From 8157d1270bae3f5f66bec868b1f3fb0c068a9c1b Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 12:23:12 -0400 Subject: [PATCH 01/10] feat(updates): general consolidation --- package.json | 82 ++-- src/lib/api.ts | 122 ++--- yarn.lock | 1150 ++++++++++++++++++++++++------------------------ 3 files changed, 656 insertions(+), 698 deletions(-) diff --git a/package.json b/package.json index 6702d59..1dd70ca 100644 --- a/package.json +++ b/package.json @@ -23,46 +23,46 @@ }, "license": "AGPL-3.0-or-later", "dependencies": { - "@coral-xyz/anchor": "^0.26.0", - "@ledgerhq/errors": "^6.15.0", - "@ledgerhq/hw-app-solana": "^7.0.14", - "@ledgerhq/hw-transport-node-hid-noevents": "^6.28.0", - "@marinade.finance/cli-common": "^2.0.18", - "@marinade.finance/ledger-utils": "^2.0.18", - "@marinade.finance/ts-common": "^2.0.18", - "@marinade.finance/web3js-common": "^2.0.18", - "@metaplex-foundation/js": "^0.18.3", - "@metaplex-foundation/mpl-token-metadata": "^2.13.0", - "@metaplex/js": "^4.12.0", - "@octokit/auth-basic": "^1.4.8", - "@octokit/rest": "^19.0.3", - "@solana/spl-token": "^0.3.6", - "@solana/spl-token-registry": "^0.2.4574", - "@solana/web3.js": "^1.66.2", - "@sqds/sdk": "^2.0.2", - "@types/bn.js": "^5.1.1", - "@types/clear": "^0.1.2", - "@types/clui": "^0.3.1", - "@types/figlet": "^1.5.5", - "@types/lodash": "^4.14.191", + "@coral-xyz/anchor": "0.26.0", + "@ledgerhq/errors": "6.15.0", + "@ledgerhq/hw-app-solana": "7.0.14", + "@ledgerhq/hw-transport-node-hid-noevents": "6.28.0", + "@marinade.finance/cli-common": "2.0.18", + "@marinade.finance/ledger-utils": "2.0.18", + "@marinade.finance/ts-common": "2.0.18", + "@marinade.finance/web3js-common": "2.0.18", + "@metaplex-foundation/js": "0.18.3", + "@metaplex-foundation/mpl-token-metadata": "2.13.0", + "@metaplex/js": "4.12.0", + "@octokit/auth-basic": "1.4.8", + "@octokit/rest": "19.0.3", + "@solana/spl-token": "0.3.6", + "@solana/spl-token-registry": "0.2.4574", + "@solana/web3.js": "1.66.2", + "@sqds/sdk": "2.0.2", + "@types/bn.js": "5.1.1", + "@types/clear": "0.1.2", + "@types/clui": "0.3.1", + "@types/figlet": "1.5.5", + "@types/lodash": "4.14.191", "axios": "1.14.0", - "bn.js": "^5.2.1", - "bs58": "^5.0.0", + "bn.js": "5.2.1", + "bs58": "5.0.0", "chalk": "4.1.2", "clear": "^0.1.0", - "clui": "^0.3.6", - "configstore": "^6.0.0", - "console.table": "^0.10.0", - "figlet": "^1.5.2", + "clui": "0.3.6", + "configstore": "6.0.0", + "console.table": "0.10.0", + "figlet": "1.5.2", "inquirer": "8.0.0", "inquirer-press-to-continue": "1.1.4", - "lodash": "^4.17.21", - "minimist": "^1.2.6", - "simple-git": "^3.10.0", - "touch": "^3.1.0", - "tslib": "^2.5.0", - "typescript": "^4.9.5", - "yargs": "^17.6.2" + "lodash": "4.17.21", + "minimist": "1.2.6", + "simple-git": "3.10.0", + "touch": "3.1.0", + "tslib": "2.5.0", + "typescript": "4.9.5", + "yargs": "17.6.2" }, "bin": { "squads-cli": "./bin/index.js" @@ -72,14 +72,14 @@ "node": ">=16.0.0" }, "devDependencies": { - "@types/inquirer": "^9.0.3", - "@types/node": "^18.14.6", - "@types/yargs": "^17.0.22", - "ts-node": "^10.9.1" + "@types/inquirer": "9.0.3", + "@types/node": "18.14.6", + "@types/yargs": "17.0.22", + "ts-node": "10.9.1" }, "resolutions": { - "@solana/web3.js": "^1.66.2", - "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "1.66.2", + "@solana/spl-token": "0.3.6", "inquirer-press-to-continue": "1.1.4" } } diff --git a/src/lib/api.ts b/src/lib/api.ts index 39bee3c..f697650 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -31,6 +31,22 @@ class API{ this.program = new anchor.Program(idl as anchor.Idl, this.programId, this.provider); } + private sendAndConfirm = async ( + ixes: anchor.web3.TransactionInstruction[], + opts: { confirm?: boolean } = {}, + ): Promise => { + const { confirm = true } = opts; + const { blockhash, lastValidBlockHeight } = await this.connection.getLatestBlockhash(); + const tx = new anchor.web3.Transaction({ blockhash, lastValidBlockHeight, feePayer: this.wallet.publicKey }); + tx.add(...ixes); + const signed = await this.wallet.signTransaction(tx); + const sig = await this.connection.sendRawTransaction(signed.serialize(), { skipPreflight: true }); + if (confirm) { + await this.connection.confirmTransaction(sig, "confirmed"); + } + return sig; + }; + getSquadExtended = async (ms: PublicKey) => { return this.squads.getMultisig(ms); }; @@ -72,16 +88,7 @@ class API{ toPubkey: vault, lamports: anchor.web3.LAMPORTS_PER_SOL / 1000, }); - const {blockhash, lastValidBlockHeight} = await this.connection.getLatestBlockhash(); - const fundTx = new anchor.web3.Transaction({ - blockhash, - feePayer: this.wallet.publicKey, - lastValidBlockHeight, - }); - fundTx.add(fundIx); - const signedTx = await this.wallet.signTransaction(fundTx); - const sig =await this.connection.sendRawTransaction(signedTx.serialize(), {preflightCommitment: "confirmed",skipPreflight: true}); - await this.connection.confirmTransaction(sig, "confirmed"); + await this.sendAndConfirm([fundIx]); }catch (e){ console.log("Error funding vault", e); throw e; @@ -131,45 +138,21 @@ class API{ const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); const approveIx = await this.squads.buildApproveTransaction(msPDA, txPDA); - const {blockhash, lastValidBlockHeight} = await this.connection.getLatestBlockhash(); - let tx = new anchor.web3.Transaction({blockhash, lastValidBlockHeight, feePayer: this.wallet.publicKey}); - tx.add(createTxIx); - tx.add(addIx); - tx.add(activateIx); - tx.add(approveIx); - console.log("Transaction composed") - tx = await this.wallet.signTransaction(tx); - console.log("Transaction signed") - console.log("Sending"); - const sig = await this.connection.sendRawTransaction(tx.serialize(), {skipPreflight: true}); - await this.connection.confirmTransaction(sig, "confirmed"); - console.log("Transaction sent"); + await this.sendAndConfirm([createTxIx, addIx, activateIx, approveIx]); return txPDA; }; - + createSafeAuthorityTx = async (msPDA: PublicKey, programId: PublicKey, currentAuthority: PublicKey, newAuthority: PublicKey) => { const nextTxIndex = await this.squads.getNextTransactionIndex(msPDA); const [txPDA] = await getTxPDA(msPDA, new BN(nextTxIndex), this.programId); const createTxIx = await this.squads.buildCreateTransaction(msPDA, 1, nextTxIndex); const ix = await upgradeSetAuthorityIx(programId, currentAuthority, newAuthority); - + const addIx = await this.squads.buildAddInstruction(msPDA, txPDA, ix, 1); const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); const approveIx = await this.squads.buildApproveTransaction(msPDA, txPDA); - - const {blockhash, lastValidBlockHeight} = await this.connection.getLatestBlockhash(); - let tx = new anchor.web3.Transaction({blockhash, lastValidBlockHeight, feePayer: this.wallet.publicKey}); - tx.add(createTxIx); - tx.add(addIx); - tx.add(activateIx); - tx.add(approveIx); - console.log("Transaction composed") - tx = await this.wallet.signTransaction(tx); - console.log("Transaction signed") - console.log("Sending"); - const sig = await this.connection.sendRawTransaction(tx.serialize(), {skipPreflight: true}); - await this.connection.confirmTransaction(sig, "confirmed"); - console.log("Transaction sent"); + + await this.sendAndConfirm([createTxIx, addIx, activateIx, approveIx]); return txPDA; }; @@ -207,71 +190,34 @@ class API{ await txBuilder.withAddMember(key) ).getInstructions(); const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); - console.log("transaction instructions", JSON.stringify(txInstructions, null, 2)); - const {blockhash, lastValidBlockHeight} = await this.connection.getLatestBlockhash(); - let tx = new anchor.web3.Transaction({blockhash, lastValidBlockHeight, feePayer: this.wallet.publicKey}); const topup = await this.squads.checkGetTopUpInstruction(msPDA); - if(topup){ - tx.add(topup); - } - tx.add(...txInstructions); - tx.add(activateIx); - - console.log("Transaction composed") - tx = await this.wallet.signTransaction(tx); - console.log("Transaction signed") - console.log("Sending"); - const sig = await this.connection.sendRawTransaction(tx.serialize(), {skipPreflight: true}); - await this.connection.confirmTransaction(sig, "confirmed"); - + const ixes = [...(topup ? [topup] : []), ...txInstructions, activateIx]; + await this.sendAndConfirm(ixes); + await this.squads.approveTransaction(txPDA); return this.squads.getTransaction(txPDA); } - + removeKeyTransaction = async (msPDA: PublicKey, key: PublicKey) => { const txBuilder = await this.squads.getTransactionBuilder(msPDA, 0); const [txInstructions, txPDA] = await ( await txBuilder.withRemoveMember(key) ).getInstructions(); const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); - - const {blockhash, lastValidBlockHeight} = await this.connection.getLatestBlockhash(); - let tx = new anchor.web3.Transaction({blockhash, lastValidBlockHeight, feePayer: this.wallet.publicKey}); - - tx.add(...txInstructions); - tx.add(activateIx); - - console.log("Transaction composed") - tx = await this.wallet.signTransaction(tx); - console.log("Transaction signed") - console.log("Sending"); - const sig = await this.connection.sendRawTransaction(tx.serialize(), {skipPreflight: true}); - await this.connection.confirmTransaction(sig, "confirmed"); - + await this.sendAndConfirm([...txInstructions, activateIx]); + await this.squads.approveTransaction(txPDA); return this.squads.getTransaction(txPDA); }; - + changeThresholdTransaction = async (msPDA: PublicKey, threshold: number) => { const txBuilder = await this.squads.getTransactionBuilder(msPDA, 0); const [txInstructions, txPDA] = await ( await txBuilder.withChangeThreshold(threshold) ).getInstructions(); const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); - - const {blockhash, lastValidBlockHeight} = await this.connection.getLatestBlockhash(); - let tx = new anchor.web3.Transaction({blockhash, lastValidBlockHeight, feePayer: this.wallet.publicKey}); - - tx.add(...txInstructions); - tx.add(activateIx); - - console.log("Transaction composed") - tx = await this.wallet.signTransaction(tx); - console.log("Transaction signed") - console.log("Sending"); - const sig = await this.connection.sendRawTransaction(tx.serialize(), {skipPreflight: true}); - await this.connection.confirmTransaction(sig, "confirmed"); - + await this.sendAndConfirm([...txInstructions, activateIx]); + await this.squads.approveTransaction(txPDA); return this.squads.getTransaction(txPDA); }; @@ -321,11 +267,7 @@ class API{ ASSOCIATED_TOKEN_PROGRAM_ID, ); - const {blockhash, lastValidBlockHeight} = await this.connection.getLatestBlockhash(); - let tx = new anchor.web3.Transaction({blockhash, lastValidBlockHeight, feePayer: this.wallet.publicKey}); - tx.add(createATAIx); - tx = await this.wallet.signTransaction(tx); - const sig = await this.connection.sendRawTransaction(tx.serialize(), {skipPreflight: true}); + await this.sendAndConfirm([createATAIx], { confirm: false }); return ataPubkey; } } diff --git a/yarn.lock b/yarn.lock index ca02325..e61c037 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,12 +2,10 @@ # yarn lockfile v1 -"@babel/runtime@^7.17.2", "@babel/runtime@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" +"@babel/runtime@^7.12.5": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" + integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== "@bundlr-network/client@^0.8.8": version "0.8.9" @@ -34,7 +32,7 @@ near-api-js "^0.44.2" near-seed-phrase "^0.2.0" -"@coral-xyz/anchor@^0.26.0": +"@coral-xyz/anchor@0.26.0", "@coral-xyz/anchor@^0.26.0": version "0.26.0" resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.26.0.tgz#c8e4f7177e93441afd030f22d777d54d0194d7d1" integrity sha512-PxRl+wu5YyptWiR9F2MBHOLLibm87Z4IMUBPreX+DYBtPM+xggvcPi0KAN7+kIL4IrIhXI8ma5V0MCXxSN1pHg== @@ -84,347 +82,347 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" +"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.8.0": + version "5.8.0" + 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" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" + integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + +"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" + integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/address@5.8.0", "@ethersproject/address@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" + integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + +"@ethersproject/base64@5.8.0", "@ethersproject/base64@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" + integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== + dependencies: + "@ethersproject/bytes" "^5.8.0" + +"@ethersproject/basex@5.8.0", "@ethersproject/basex@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" + integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" + integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" +"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@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": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" + integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + +"@ethersproject/contracts@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" + integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== + dependencies: + "@ethersproject/abi" "^5.8.0" + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + +"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" + integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/hdnode@5.8.0", "@ethersproject/hdnode@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" + integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" + integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.7.0", "@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== +"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" + integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== dependencies: - "@ethersproject/bytes" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" +"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" + integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== + +"@ethersproject/networks@5.8.0", "@ethersproject/networks@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" + integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" + integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + +"@ethersproject/properties@5.8.0", "@ethersproject/properties@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" + integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/providers@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" + integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" bech32 "1.1.4" - ws "7.4.6" + ws "8.18.0" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== +"@ethersproject/random@5.8.0", "@ethersproject/random@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" + integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== +"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" + integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== +"@ethersproject/sha2@5.8.0", "@ethersproject/sha2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" + integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== +"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" + integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" bn.js "^5.2.1" - elliptic "6.5.4" + elliptic "6.6.1" hash.js "1.1.7" -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.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/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" +"@ethersproject/solidity@5.8.0": + version "5.8.0" + 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" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" + integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" + integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + +"@ethersproject/units@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" + integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/wallet@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" + integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/json-wallets" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/web@5.8.0", "@ethersproject/web@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" + integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== + dependencies: + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" + integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" @@ -466,12 +464,12 @@ rxjs "^7.8.1" semver "^7.3.5" -"@ledgerhq/errors@^6.15.0": +"@ledgerhq/errors@6.15.0", "@ledgerhq/errors@^6.15.0": version "6.15.0" resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.15.0.tgz#45cda73915f695cc072cb8a99650830bc5dc6668" integrity sha512-6xaw5/mgoht62TnL3rXsaQYEFwpnXyNDk1AOSJksIjFHx9bHUnkyVmrnGQDj0JLzi+E7bHEgTrpCs8wpeDh9jA== -"@ledgerhq/hw-app-solana@^7.0.14": +"@ledgerhq/hw-app-solana@7.0.14": version "7.0.14" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-solana/-/hw-app-solana-7.0.14.tgz#1fa30b91066d1b0eb4ed238ef3769715cf75da4c" integrity sha512-tKpDaG2LE2RYuYXiVdGokSS8PHhmUHt4NMp7pmWAsyn8kTDBA1gFJFJkMTG5qFj//NVkvPgqZmG2Yj+yMeErag== @@ -480,7 +478,7 @@ "@ledgerhq/hw-transport" "^6.29.0" bip32-path "^0.4.2" -"@ledgerhq/hw-transport-node-hid-noevents@^6.28.0": +"@ledgerhq/hw-transport-node-hid-noevents@6.28.0": version "6.28.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.28.0.tgz#bf6b6615458fa98ae348a034f127233e448682ee" integrity sha512-7hhgZQzYTFEazxu8Lu/LBk9ah2if4EIQyPuapUfbH+kgbJ6QkGcYQEVO6ZfIIIO4osLvncI1eOU5KpzSlXsJjA== @@ -506,22 +504,22 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.11.0.tgz#0d28e7edcf71548506f4304686cba480ba91bbcf" integrity sha512-HHK9y4GGe4X7CXbRUCh7z8Mp+WggpJn1dmUjmuk1rNugESF6o8nAOnXA+BxwtRRNV3CgNJR3Wxdos4J9qV0Zsg== -"@marinade.finance/cli-common@^2.0.18": +"@marinade.finance/cli-common@2.0.18": version "2.0.18" resolved "https://registry.yarnpkg.com/@marinade.finance/cli-common/-/cli-common-2.0.18.tgz#09180d6c7263b0fb23b06bb428e992410bf980ed" integrity sha512-HZzu50lB9GlUeyu/Ma9sp9qZ8LsHpGwwhNg9pbwKsWoEmQRB4vZW/dfpcRXlomyE4rFczfF0eYIkmxAWQ+Xx1Q== -"@marinade.finance/ledger-utils@^2.0.18": +"@marinade.finance/ledger-utils@2.0.18": version "2.0.18" resolved "https://registry.yarnpkg.com/@marinade.finance/ledger-utils/-/ledger-utils-2.0.18.tgz#c1fa9812e43a1579d7283c0f08df10e9173cc389" integrity sha512-7kXLGQIHNhjAq+vVKDB3TuiQ55P9SsMSj5mjimRkw8k7AQ9iX2Lp0gbUsisdRw/1Le+0cq7aS1FfiIDGAfrffQ== -"@marinade.finance/ts-common@^2.0.18": +"@marinade.finance/ts-common@2.0.18": version "2.0.18" resolved "https://registry.yarnpkg.com/@marinade.finance/ts-common/-/ts-common-2.0.18.tgz#b90a67371116a7953f8b5c80035449f214fbd175" integrity sha512-ljaJPWm//mK8OFUMwwEIFfj4xmJvQCjlRfmJ06sQnlNaNJf9ef9ZhH682YyGFM09OexkIttlJEc8GEldzKGBhw== -"@marinade.finance/web3js-common@^2.0.18": +"@marinade.finance/web3js-common@2.0.18": version "2.0.18" resolved "https://registry.yarnpkg.com/@marinade.finance/web3js-common/-/web3js-common-2.0.18.tgz#85dbe69afc55a31f25348203b0afbce2e753ffaa" integrity sha512-YE0FYbJ/axEGlVKTwCu526phwCpf4oSquGyg8OAjxAAalbaRV4w02b2LTfDTdEvm8pNPjCCJ7qdNH+QfeRu4fA== @@ -578,7 +576,7 @@ resolved "https://registry.yarnpkg.com/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz#dc2032a452d6c269e25f016aa4dd63600e2af975" integrity sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA== -"@metaplex-foundation/js@^0.18.3": +"@metaplex-foundation/js@0.18.3": version "0.18.3" resolved "https://registry.yarnpkg.com/@metaplex-foundation/js/-/js-0.18.3.tgz#d61d25b9e3ab91d069cd6a87fa9eb5d01ce56ed3" integrity sha512-rqI8vI+V5Bt3pgrv8E7leqR8gxxdw6Q/pbWg4EznbuYSmpNGRQkjMaZE0C+rQrmtQbMqUD9rUsUuYOoppSlI4A== @@ -680,6 +678,19 @@ "@solana/spl-token" "^0.1.8" "@solana/web3.js" "^1.31.0" +"@metaplex-foundation/mpl-token-metadata@2.13.0", "@metaplex-foundation/mpl-token-metadata@^2.8.6": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz#ea498190ad4ed1d4c0b8218a72d03bd17a883d11" + integrity sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw== + dependencies: + "@metaplex-foundation/beet" "^0.7.1" + "@metaplex-foundation/beet-solana" "^0.4.0" + "@metaplex-foundation/cusper" "^0.0.2" + "@solana/spl-token" "^0.3.6" + "@solana/web3.js" "^1.66.2" + bn.js "^5.2.0" + debug "^4.3.4" + "@metaplex-foundation/mpl-token-metadata@^0.0.2": version "0.0.2" resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-0.0.2.tgz#02058970320459e2550e90caf54c58bcacbe6bb2" @@ -698,19 +709,6 @@ "@solana/spl-token" "^0.1.8" "@solana/web3.js" "^1.31.0" -"@metaplex-foundation/mpl-token-metadata@^2.13.0", "@metaplex-foundation/mpl-token-metadata@^2.8.6": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz#ea498190ad4ed1d4c0b8218a72d03bd17a883d11" - integrity sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw== - dependencies: - "@metaplex-foundation/beet" "^0.7.1" - "@metaplex-foundation/beet-solana" "^0.4.0" - "@metaplex-foundation/cusper" "^0.0.2" - "@solana/spl-token" "^0.3.6" - "@solana/web3.js" "^1.66.2" - bn.js "^5.2.0" - debug "^4.3.4" - "@metaplex-foundation/mpl-token-vault@^0.0.2": version "0.0.2" resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-vault/-/mpl-token-vault-0.0.2.tgz#84d2fc86f750f8413acd9e9c24f4b3c016a12c47" @@ -720,7 +718,7 @@ "@solana/spl-token" "^0.1.8" "@solana/web3.js" "^1.31.0" -"@metaplex/js@^4.12.0": +"@metaplex/js@4.12.0": version "4.12.0" resolved "https://registry.yarnpkg.com/@metaplex/js/-/js-4.12.0.tgz#1190767a4e69d4e5613002aab3f4c1fb8de07896" integrity sha512-rIUTMXo5gIXFIZt08AEHyqH4oVoLL2dMYiNePQluw9pydesRym4jDayJ5POxEmKmyc6KGqVKw/YWUIivmUY5zg== @@ -748,29 +746,37 @@ dependencies: "@noble/hashes" "1.3.1" -"@noble/curves@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - "@noble/ed25519@^1.6.1", "@noble/ed25519@^1.7.1": version "1.7.3" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== +"@noble/ed25519@^1.7.0": + version "1.7.5" + resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.5.tgz#94df8bdb9fec9c4644a56007eecb57b0e9fbd0d7" + integrity sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA== + "@noble/hashes@1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== -"@noble/hashes@1.3.2", "@noble/hashes@^1.1.3", "@noble/hashes@^1.3.1", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": +"@noble/hashes@^1.1.2": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + +"@noble/hashes@^1.1.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== -"@octokit/auth-basic@^1.4.8": +"@noble/secp256k1@^1.6.3": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.2.tgz#c2c3343e2dce80e15a914d7442147507f8a98e7f" + integrity sha512-/qzwYl5eFLH8OWIecQWM31qld2g1NfjgylK+TNhqtaUKP37Nm+Y+z30Fjhw0Ct8p9yCQEm2N3W/AckdIb3SMcQ== + +"@octokit/auth-basic@1.4.8": version "1.4.8" resolved "https://registry.yarnpkg.com/@octokit/auth-basic/-/auth-basic-1.4.8.tgz#8609c64f49666f3b641e045ae4cafb24f78d93e0" integrity sha512-k3nsQBmAmnTGj6Z9S78JUtIGqlHEKwN+/AUBMs34/4+lQsG5gs3k5UqqdJEr1a2s3FXiyRz+monY46iirHR8Yw== @@ -787,7 +793,7 @@ resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== -"@octokit/core@^4.2.1": +"@octokit/core@^4.0.0": version "4.2.4" resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== @@ -832,30 +838,35 @@ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== +"@octokit/openapi-types@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-14.0.0.tgz#949c5019028c93f189abbc2fb42f333290f7134a" + integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw== + "@octokit/openapi-types@^18.0.0": version "18.1.1" resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== -"@octokit/plugin-paginate-rest@^6.1.2": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" - integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== +"@octokit/plugin-paginate-rest@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz#86f8be759ce2d6d7c879a31490fd2f7410b731f0" + integrity sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA== dependencies: - "@octokit/tsconfig" "^1.0.2" - "@octokit/types" "^9.2.3" + "@octokit/types" "^6.41.0" "@octokit/plugin-request-log@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== -"@octokit/plugin-rest-endpoint-methods@^7.1.2": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" - integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== +"@octokit/plugin-rest-endpoint-methods@^6.0.0": + version "6.8.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz#97391fda88949eb15f68dc291957ccbe1d3e8ad1" + integrity sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg== dependencies: - "@octokit/types" "^10.0.0" + "@octokit/types" "^8.1.1" + deprecation "^2.3.1" "@octokit/request-error@^2.0.0", "@octokit/request-error@^2.1.0": version "2.1.0" @@ -899,36 +910,31 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@^19.0.3": - version "19.0.13" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.13.tgz#e799393264edc6d3c67eeda9e5bd7832dcf974e4" - integrity sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA== +"@octokit/rest@19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.3.tgz#b9a4e8dc8d53e030d611c053153ee6045f080f02" + integrity sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ== dependencies: - "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/core" "^4.0.0" + "@octokit/plugin-paginate-rest" "^3.0.0" "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.1.2" - -"@octokit/tsconfig@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" - integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== - -"@octokit/types@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" - integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== - dependencies: - "@octokit/openapi-types" "^18.0.0" + "@octokit/plugin-rest-endpoint-methods" "^6.0.0" -"@octokit/types@^6.0.0", "@octokit/types@^6.0.3", "@octokit/types@^6.16.1": +"@octokit/types@^6.0.0", "@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.41.0": version "6.41.0" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== dependencies: "@octokit/openapi-types" "^12.11.0" -"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": +"@octokit/types@^8.1.1": + version "8.2.1" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-8.2.1.tgz#a6de091ae68b5541f8d4fcf9a12e32836d4648aa" + integrity sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw== + dependencies: + "@octokit/openapi-types" "^14.0.0" + +"@octokit/types@^9.0.0": version "9.3.2" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== @@ -986,17 +992,17 @@ dependencies: buffer "~6.0.3" -"@solana/spl-token-registry@^0.2.4574": +"@solana/spl-token-registry@0.2.4574": version "0.2.4574" resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.4574.tgz#13f4636b7bec90d2bb43bbbb83512cd90d2ce257" integrity sha512-JzlfZmke8Rxug20VT/VpI2XsXlsqMlcORIUivF+Yucj7tFi7A0dXG7h+2UnD0WaZJw8BrUz2ABNkUnv89vbv1A== dependencies: cross-fetch "3.0.6" -"@solana/spl-token@^0.1.8", "@solana/spl-token@^0.3.5", "@solana/spl-token@^0.3.6": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.8.tgz#8e9515ea876e40a4cc1040af865f61fc51d27edf" - integrity sha512-ogwGDcunP9Lkj+9CODOWMiVJEdRtqHAtX2rWF62KxnnSWtMZtV9rDhTrZFshiyJmxDnRL/1nKE1yJHg4jjs3gg== +"@solana/spl-token@0.3.6", "@solana/spl-token@^0.1.8", "@solana/spl-token@^0.3.5", "@solana/spl-token@^0.3.6": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.6.tgz#35473ad2ed71fe91e5754a2ac72901e1b8b26a42" + integrity sha512-P9pTXjDIRvVbjr3J0mCnSamYqLnICeds7IoH1/Ro2R9OBuOHdp5pqKZoscfZ3UYrgnCWUc1bc9M2m/YPHjw+1g== dependencies: "@solana/buffer-layout" "^4.0.0" "@solana/buffer-layout-utils" "^0.2.0" @@ -1020,31 +1026,31 @@ "@wallet-standard/base" "^1.0.1" "@wallet-standard/features" "^1.0.3" -"@solana/web3.js@^1.30.2", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.66.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2": - version "1.87.6" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.87.6.tgz#6744cfc5f4fc81e0f58241c0a92648a7320bb3bf" - integrity sha512-LkqsEBgTZztFiccZZXnawWa8qNCATEqE97/d0vIwjTclmVlc8pBpD1DmjfVHtZ1HS5fZorFlVhXfpwnCNDZfyg== +"@solana/web3.js@1.66.2", "@solana/web3.js@^1.30.2", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.66.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2": + version "1.66.2" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.66.2.tgz#80b43c5868b846124fe3ebac7d3943930c3fa60c" + integrity sha512-RyaHMR2jGmaesnYP045VLeBGfR/gAW3cvZHzMFGg7bkO+WOYOYp1nEllf0/la4U4qsYGKCsO9eEevR5fhHiVHg== dependencies: - "@babel/runtime" "^7.23.2" - "@noble/curves" "^1.2.0" - "@noble/hashes" "^1.3.1" + "@babel/runtime" "^7.12.5" + "@noble/ed25519" "^1.7.0" + "@noble/hashes" "^1.1.2" + "@noble/secp256k1" "^1.6.3" "@solana/buffer-layout" "^4.0.0" - agentkeepalive "^4.3.0" bigint-buffer "^1.1.5" - bn.js "^5.2.1" + bn.js "^5.0.0" borsh "^0.7.0" bs58 "^4.0.1" - buffer "6.0.3" + buffer "6.0.1" fast-stable-stringify "^1.0.0" - jayson "^4.1.0" - node-fetch "^2.6.12" - rpc-websockets "^7.5.1" + jayson "^3.4.4" + node-fetch "2" + rpc-websockets "^7.5.0" superstruct "^0.14.2" -"@sqds/sdk@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@sqds/sdk/-/sdk-2.0.4.tgz#c5b1e78ee32227369f61c6b27c30876383f4e889" - integrity sha512-SmwqL55GW9teIPRqYBVUp1tNp3Tfd8olPShas/+5L48XaUHBDEFNuDA9E8KKbIZoB34WSLdgyq0tIJLlhMMHnA== +"@sqds/sdk@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@sqds/sdk/-/sdk-2.0.2.tgz#326a2cbe35ec0b5cda7f1cf295b1bb93a3e199ae" + integrity sha512-37aV2QP2CaIFfFD2YPi5EHM5ByCgMYsUl4xBqeYLN6lGz6HGpH2gJo+nRWf0wg7f4lUlW0o/TV0YvWyX2ghKzg== dependencies: "@coral-xyz/anchor" "^0.26.0" "@solana/web3.js" "^1.73.2" @@ -1075,6 +1081,13 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@types/bn.js@5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + dependencies: + "@types/node" "*" + "@types/bn.js@^4.11.5": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" @@ -1082,13 +1095,6 @@ dependencies: "@types/node" "*" -"@types/bn.js@^5.1.1": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" - integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== - dependencies: - "@types/node" "*" - "@types/bs58@^4.0.1": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/bs58/-/bs58-4.0.4.tgz#49fbcb0c7db5f7cea26f0e0f61dc4a41a2445aab" @@ -1102,20 +1108,20 @@ resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.2.tgz#82bb6aab00abf7cff3ca2825abe010c0cd536ae5" integrity sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg== -"@types/clear@^0.1.2": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@types/clear/-/clear-0.1.4.tgz#19b2863ac2c5e77a24ed6a51a08210a887652066" - integrity sha512-4nJjoilJPTbYF7Q4y5+F7JFDK8QdcwOItzwVv3RDEMWALT9Mx9UzfxCiUfpbFK05REhieXTCvhbNkiDW/Wfejw== +"@types/clear@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/clear/-/clear-0.1.2.tgz#131050f8a7b429ae0e4ca390339ea9977ca977bd" + integrity sha512-h3GHp9BuPgY3X+WKWwJgTIl/h38KkcdU6JG28i1xdrlS8YXVi3V1YrhaZkjuvur97qZo8TMQjVXJorTf87LvfA== "@types/cli-color@*": version "2.0.5" resolved "https://registry.yarnpkg.com/@types/cli-color/-/cli-color-2.0.5.tgz#ef561afe744f28a28d972f05339a27a24db1b4d7" integrity sha512-7GTI5GNi37HHQ3BEbT64tstsEeNmw8yix3vwVlFEB0EFO8U5vIcPzKbnAjoLnlIfQ7afq5Ol5eM4RCqEJdcK4g== -"@types/clui@^0.3.1": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@types/clui/-/clui-0.3.4.tgz#55be5da89ddf9d7b0b847119a588bb8488af99b2" - integrity sha512-546l5CCaNQyg8OgFG84WINSW6J37/x2a+7uX650peQ7VscBKD6x4IlNn1syeK4EdixVzBpOG7H08XjmYs2MwQA== +"@types/clui@0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@types/clui/-/clui-0.3.1.tgz#ccd8208ef11e04afd662115b1500337c527a3642" + integrity sha512-MxV6JIniaXPM+TNiqQ7vKi6Ad8sb0hyiaJmyjjzWv1ywinR7ZqEFdE7uP7IMmwXC2Huv3Axj1dZKDNYNl1I15g== dependencies: "@types/cli-color" "*" @@ -1126,23 +1132,23 @@ dependencies: "@types/node" "*" -"@types/figlet@^1.5.5": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@types/figlet/-/figlet-1.5.8.tgz#96b8186c7e2a388b4f8d09ee3276cba2af88bb0b" - integrity sha512-G22AUvy4Tl95XLE7jmUM8s8mKcoz+Hr+Xm9W90gJsppJq9f9tHvOGkrpn4gRX0q/cLtBdNkWtWCKDg2UDZoZvQ== +"@types/figlet@1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/figlet/-/figlet-1.5.5.tgz#da93169178f0187da288c313ab98ab02fb1e8b8c" + integrity sha512-0sMBeFoqdGgdXoR/hgKYSWMpFufSpToosNsI2VgmkPqZJgeEXsXNu2hGr0FN401dBro2tNO5y2D6uw3UxVaxbg== -"@types/inquirer@^9.0.3": - version "9.0.7" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-9.0.7.tgz#61bb8d0e42f038b9a1738b08fba7fa98ad9b4b24" - integrity sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g== +"@types/inquirer@9.0.3": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-9.0.3.tgz#dc99da4f2f6de9d26c284b4f6aaab4d98c456db1" + integrity sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw== dependencies: "@types/through" "*" rxjs "^7.2.0" -"@types/lodash@^4.14.191": - version "4.14.201" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.201.tgz#76f47cb63124e806824b6c18463daf3e1d480239" - integrity sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ== +"@types/lodash@4.14.191": + version "4.14.191" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" + integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== "@types/node@*": version "20.9.0" @@ -1156,18 +1162,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== +"@types/node@18.14.6": + version "18.14.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.6.tgz#ae1973dd2b1eeb1825695bb11ebfb746d27e3e93" + integrity sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA== + "@types/node@^12.12.54": version "12.20.55" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== -"@types/node@^18.14.6": - version "18.18.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.9.tgz#5527ea1832db3bba8eb8023ce8497b7d3f299592" - integrity sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ== - dependencies: - undici-types "~5.26.4" - "@types/through@*": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.33.tgz#14ebf599320e1c7851e7d598149af183c6b9ea56" @@ -1187,10 +1191,10 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@types/yargs@^17.0.22": - version "17.0.31" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.31.tgz#8fd0089803fd55d8a285895a18b88cb71a99683c" - integrity sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg== +"@types/yargs@17.0.22": + version "17.0.22" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" + integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== dependencies: "@types/yargs-parser" "*" @@ -1234,13 +1238,6 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== -agentkeepalive@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - algo-msgpack-with-bigint@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz#38bb717220525b3ff42232eefdcd9efb9ad405d6" @@ -1511,16 +1508,16 @@ bn.js@5.2.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + bn.js@^4.0.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - borsh@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.4.0.tgz#9dd6defe741627f1315eac2a73df61421f6ddb9f" @@ -1562,6 +1559,13 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== +bs58@5.0.0, bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -1569,13 +1573,6 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" -bs58@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" - integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== - dependencies: - base-x "^4.0.0" - btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" @@ -1591,10 +1588,10 @@ buffer-reverse@^1.0.1: resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== -buffer@6.0.3, buffer@^6.0.2, buffer@^6.0.3, buffer@~6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== +buffer@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" + integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== dependencies: base64-js "^1.3.1" ieee754 "^1.2.1" @@ -1607,6 +1604,14 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.2, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + bufferutil@^4.0.1: version "4.0.8" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" @@ -1725,7 +1730,7 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -clui@^0.3.6: +clui@0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/clui/-/clui-0.3.6.tgz#8e1e5cea7332a6e54083f59da0ccbe1d6f2fa787" integrity sha512-Z4UbgZILlIAjkEkZiDOa2aoYjohKx7fa6DxIh6cE9A6WNWZ61iXfQc6CmdC9SKdS5nO0P0UyQ+WfoXfB65e3HQ== @@ -1766,7 +1771,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -configstore@^6.0.0: +configstore@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== @@ -1777,7 +1782,7 @@ configstore@^6.0.0: write-file-atomic "^3.0.3" xdg-basedir "^5.0.1" -console.table@^0.10.0: +console.table@0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.10.0.tgz#0917025588875befd70cf2eff4bef2c6e2d75d04" integrity sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g== @@ -1971,7 +1976,7 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -deprecation@^2.0.0: +deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== @@ -2017,7 +2022,20 @@ easy-table@1.1.0: optionalDependencies: wcwidth ">=1.0.1" -elliptic@6.5.4, elliptic@^6.5.4: +elliptic@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -2186,40 +2204,40 @@ ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: "@scure/bip39" "1.2.1" ethers@^5.5.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" + version "5.8.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" + integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== + dependencies: + "@ethersproject/abi" "5.8.0" + "@ethersproject/abstract-provider" "5.8.0" + "@ethersproject/abstract-signer" "5.8.0" + "@ethersproject/address" "5.8.0" + "@ethersproject/base64" "5.8.0" + "@ethersproject/basex" "5.8.0" + "@ethersproject/bignumber" "5.8.0" + "@ethersproject/bytes" "5.8.0" + "@ethersproject/constants" "5.8.0" + "@ethersproject/contracts" "5.8.0" + "@ethersproject/hash" "5.8.0" + "@ethersproject/hdnode" "5.8.0" + "@ethersproject/json-wallets" "5.8.0" + "@ethersproject/keccak256" "5.8.0" + "@ethersproject/logger" "5.8.0" + "@ethersproject/networks" "5.8.0" + "@ethersproject/pbkdf2" "5.8.0" + "@ethersproject/properties" "5.8.0" + "@ethersproject/providers" "5.8.0" + "@ethersproject/random" "5.8.0" + "@ethersproject/rlp" "5.8.0" + "@ethersproject/sha2" "5.8.0" + "@ethersproject/signing-key" "5.8.0" + "@ethersproject/solidity" "5.8.0" + "@ethersproject/strings" "5.8.0" + "@ethersproject/transactions" "5.8.0" + "@ethersproject/units" "5.8.0" + "@ethersproject/wallet" "5.8.0" + "@ethersproject/web" "5.8.0" + "@ethersproject/wordlists" "5.8.0" ethjs-unit@0.1.6: version "0.1.6" @@ -2283,10 +2301,10 @@ fast-stable-stringify@^1.0.0: resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== -figlet@^1.5.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.7.0.tgz#46903a04603fd19c3e380358418bb2703587a72e" - integrity sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg== +figlet@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" + integrity sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ== figures@^3.0.0: version "3.2.0" @@ -2532,13 +2550,6 @@ http-errors@^1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -2796,10 +2807,10 @@ isomorphic-ws@^4.0.1: resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== -jayson@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.0.tgz#60dc946a85197317f2b1439d672a8b0a99cea2f9" - integrity sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A== +jayson@^3.4.4: + version "3.7.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.7.0.tgz#b735b12d06d348639ae8230d7a1e2916cb078f25" + integrity sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ== dependencies: "@types/connect" "^3.4.33" "@types/node" "^12.12.54" @@ -2811,6 +2822,7 @@ jayson@^4.1.0: eyes "^0.1.8" isomorphic-ws "^4.0.1" json-stringify-safe "^5.0.1" + lodash "^4.17.20" uuid "^8.3.2" ws "^7.4.5" @@ -2865,11 +2877,16 @@ lodash.isequal@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== -lodash@^4.17.21: +lodash@4.17.21, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash@^4.17.20: + version "4.18.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" + integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== + log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -2999,7 +3016,12 @@ minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: +minimist@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minimist@^1.2.0, minimist@^1.2.3: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -3014,11 +3036,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multistream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.1.0.tgz#7bf00dfd119556fbc153cff3de4c6d477909f5a8" @@ -3113,18 +3130,18 @@ node-addon-api@^3.0.2: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: +node-fetch@2, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.6.1" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" @@ -3321,11 +3338,6 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - regexp.prototype.flags@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" @@ -3376,12 +3388,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rpc-websockets@^7.5.1: - version "7.6.2" - resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.6.2.tgz#ed82f21ea8290f26d73f10d0dc0f9425dc364b81" - integrity sha512-+M1fOYMPxvOQDHbSItkD/an4fRwPZ1Nft1zv48G84S0TyChG2A1GXmjWkbs3o2NxW+q36H9nM2uLo5yojTrPaA== +rpc-websockets@^7.5.0: + version "7.11.2" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.11.2.tgz#582910c425b9f2c860327481c1d1e0e431bf4a6d" + integrity sha512-pL9r5N6AVHlMN/vT98+fcO+5+/UcPLf/4tq+WUaid/PPUGS/ttJ3y8e9IqmaWKtShNAysMSjkczuEA49NuV7UQ== dependencies: - "@babel/runtime" "^7.17.2" eventemitter3 "^4.0.7" uuid "^8.3.2" ws "^8.5.0" @@ -3499,10 +3510,10 @@ simple-get@^4.0.0: once "^1.3.1" simple-concat "^1.0.0" -simple-git@^3.10.0: - version "3.20.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.20.0.tgz#ff9c3f736d6b2bf0e3510209569d206aac84833d" - integrity sha512-ozK8tl2hvLts8ijTs18iFruE+RoqmC/mqZhjs/+V7gS5W68JpJ3+FCTmLVqmR59MaUQ52MfGQuWsIqfsTbbJ0Q== +simple-git@3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.10.0.tgz#f20031dd121d3c49e215ef0186a102bece3f89b2" + integrity sha512-2w35xrS5rVtAW0g67LqtxCZN5cdddz/woQRfS0OJXaljXEoTychZ4jnE+CQgra/wX4ZvHeiChTUMenCwfIYEYw== dependencies: "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" @@ -3669,7 +3680,7 @@ toml@^3.0.0: resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== -touch@^3.1.0: +touch@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== @@ -3686,7 +3697,7 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -ts-node@^10.9.1: +ts-node@10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== @@ -3705,12 +3716,17 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +tslib@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.5.0: +tslib@^2.0.3, tslib@^2.1.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -3754,7 +3770,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^4.9.5: +typescript@4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -3912,10 +3928,10 @@ write-file-atomic@^3.0.3: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== ws@^7.4.5: version "7.5.9" @@ -3947,10 +3963,10 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.6.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== +yargs@17.6.2: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== dependencies: cliui "^8.0.1" escalade "^3.1.1" From b264ccd66d0cc090596faee46b8ece251258a6be Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 12:27:06 -0400 Subject: [PATCH 02/10] fix(simple-git): dependabot notice --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1dd70ca..35a56a0 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "inquirer-press-to-continue": "1.1.4", "lodash": "4.17.21", "minimist": "1.2.6", - "simple-git": "3.10.0", + "simple-git": "3.36.0", "touch": "3.1.0", "tslib": "2.5.0", "typescript": "4.9.5", From 8fa25583292c1637ccbf0c4279205d36363b1130 Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 12:28:40 -0400 Subject: [PATCH 03/10] chore(deps): update --- yarn.lock | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index e61c037..3b6f68c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -975,6 +975,18 @@ "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" +"@simple-git/args-pathspec@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@simple-git/args-pathspec/-/args-pathspec-1.0.3.tgz#9ef4a2ad5f49ab4056362d03f93f775b93118ca5" + integrity sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA== + +"@simple-git/argv-parser@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@simple-git/argv-parser/-/argv-parser-1.1.1.tgz#275b839c6eeb5030872c73b1ea839a416885da9d" + integrity sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw== + dependencies: + "@simple-git/args-pathspec" "^1.0.3" + "@solana/buffer-layout-utils@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" @@ -1895,6 +1907,13 @@ debug@^4.1.1, debug@^4.3.3, debug@^4.3.4: dependencies: ms "2.1.2" +debug@^4.4.0: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -3036,6 +3055,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multistream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.1.0.tgz#7bf00dfd119556fbc153cff3de4c6d477909f5a8" @@ -3510,14 +3534,16 @@ simple-get@^4.0.0: once "^1.3.1" simple-concat "^1.0.0" -simple-git@3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.10.0.tgz#f20031dd121d3c49e215ef0186a102bece3f89b2" - integrity sha512-2w35xrS5rVtAW0g67LqtxCZN5cdddz/woQRfS0OJXaljXEoTychZ4jnE+CQgra/wX4ZvHeiChTUMenCwfIYEYw== +simple-git@3.36.0: + version "3.36.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.36.0.tgz#019b28c0a35847ee34299c6fb63770ab1b2dffb7" + integrity sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q== dependencies: "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" - debug "^4.3.4" + "@simple-git/args-pathspec" "^1.0.3" + "@simple-git/argv-parser" "^1.1.0" + debug "^4.4.0" snake-case@^3.0.4: version "3.0.4" From f6549716d0d60cbee98ec90e55b7ad8fc2889dea Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 12:33:35 -0400 Subject: [PATCH 04/10] fix(consolidation): more abstraction/helpers --- src/lib/api.ts | 103 +++++++++++------------ yarn.lock | 218 ++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 234 insertions(+), 87 deletions(-) diff --git a/src/lib/api.ts b/src/lib/api.ts index f697650..d09d8f3 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -11,6 +11,8 @@ import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; import { Wallet } from "@coral-xyz/anchor"; import {Connection, LAMPORTS_PER_SOL, PublicKey, VoteProgram} from "@solana/web3.js"; +type SquadsTxBuilder = Awaited>; + class API{ squads; wallet; @@ -47,6 +49,40 @@ class API{ return sig; }; + // Builder-driven multisig config changes (auth index 0): add/remove member, change threshold. + // Sends create+add+activate (+ optional topup) in one Solana tx, then casts the caller's approval. + private submitBuilderTx = async ( + msPDA: PublicKey, + mutate: (b: SquadsTxBuilder) => Promise, + opts: { includeTopUp?: boolean } = {}, + ) => { + const builder = await this.squads.getTransactionBuilder(msPDA, 0); + const [txInstructions, txPDA] = await (await mutate(builder)).getInstructions(); + const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); + const ixes: anchor.web3.TransactionInstruction[] = []; + if (opts.includeTopUp) { + const topup = await this.squads.checkGetTopUpInstruction(msPDA); + if (topup) ixes.push(topup); + } + ixes.push(...txInstructions, activateIx); + await this.sendAndConfirm(ixes); + await this.squads.approveTransaction(txPDA); + return this.squads.getTransaction(txPDA); + }; + + // Wraps a single arbitrary instruction as a vault-authority (auth index 1) multisig tx. + // Creates, adds, activates, and approves the multisig tx in one Solana tx. + private submitAsMultisigTx = async (msPDA: PublicKey, innerIx: anchor.web3.TransactionInstruction): Promise => { + const nextTxIndex = await this.squads.getNextTransactionIndex(msPDA); + const [txPDA] = await getTxPDA(msPDA, new BN(nextTxIndex), this.programId); + const createTxIx = await this.squads.buildCreateTransaction(msPDA, 1, nextTxIndex); + const addIx = await this.squads.buildAddInstruction(msPDA, txPDA, innerIx, 1); + const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); + const approveIx = await this.squads.buildApproveTransaction(msPDA, txPDA); + await this.sendAndConfirm([createTxIx, addIx, activateIx, approveIx]); + return txPDA; + }; + getSquadExtended = async (ms: PublicKey) => { return this.squads.getMultisig(ms); }; @@ -123,37 +159,19 @@ class API{ return null } - createTransferWithdrawAuthTx = async (msPDA: PublicKey, validatorId: PublicKey, currentAuthority: PublicKey, newAuthorizedPubkey: PublicKey) => { - const nextTxIndex = await this.squads.getNextTransactionIndex(msPDA); - const [txPDA] = await getTxPDA(msPDA, new BN(nextTxIndex), this.programId); - const createTxIx = await this.squads.buildCreateTransaction(msPDA, 1, nextTxIndex); + createTransferWithdrawAuthTx = (msPDA: PublicKey, validatorId: PublicKey, currentAuthority: PublicKey, newAuthorizedPubkey: PublicKey) => { const authorizeIx = VoteProgram.authorize({ authorizedPubkey: currentAuthority, newAuthorizedPubkey, voteAuthorizationType: { index: 1 }, votePubkey: validatorId, - }).instructions[0] - - const addIx = await this.squads.buildAddInstruction(msPDA, txPDA, authorizeIx, 1); - const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); - const approveIx = await this.squads.buildApproveTransaction(msPDA, txPDA); - - await this.sendAndConfirm([createTxIx, addIx, activateIx, approveIx]); - return txPDA; + }).instructions[0]; + return this.submitAsMultisigTx(msPDA, authorizeIx); }; createSafeAuthorityTx = async (msPDA: PublicKey, programId: PublicKey, currentAuthority: PublicKey, newAuthority: PublicKey) => { - const nextTxIndex = await this.squads.getNextTransactionIndex(msPDA); - const [txPDA] = await getTxPDA(msPDA, new BN(nextTxIndex), this.programId); - const createTxIx = await this.squads.buildCreateTransaction(msPDA, 1, nextTxIndex); const ix = await upgradeSetAuthorityIx(programId, currentAuthority, newAuthority); - - const addIx = await this.squads.buildAddInstruction(msPDA, txPDA, ix, 1); - const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); - const approveIx = await this.squads.buildApproveTransaction(msPDA, txPDA); - - await this.sendAndConfirm([createTxIx, addIx, activateIx, approveIx]); - return txPDA; + return this.submitAsMultisigTx(msPDA, ix); }; executeTransaction = async (tx: PublicKey) => { @@ -184,43 +202,14 @@ class API{ return this.squads.cancelTransaction(tx); } - addKeyTransaction = async (msPDA: PublicKey, key: PublicKey) => { - const txBuilder = await this.squads.getTransactionBuilder(msPDA, 0); - const [txInstructions, txPDA] = await ( - await txBuilder.withAddMember(key) - ).getInstructions(); - const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); - const topup = await this.squads.checkGetTopUpInstruction(msPDA); - const ixes = [...(topup ? [topup] : []), ...txInstructions, activateIx]; - await this.sendAndConfirm(ixes); + addKeyTransaction = (msPDA: PublicKey, key: PublicKey) => + this.submitBuilderTx(msPDA, b => b.withAddMember(key), { includeTopUp: true }); - await this.squads.approveTransaction(txPDA); - return this.squads.getTransaction(txPDA); - } - - removeKeyTransaction = async (msPDA: PublicKey, key: PublicKey) => { - const txBuilder = await this.squads.getTransactionBuilder(msPDA, 0); - const [txInstructions, txPDA] = await ( - await txBuilder.withRemoveMember(key) - ).getInstructions(); - const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); - await this.sendAndConfirm([...txInstructions, activateIx]); - - await this.squads.approveTransaction(txPDA); - return this.squads.getTransaction(txPDA); - }; - - changeThresholdTransaction = async (msPDA: PublicKey, threshold: number) => { - const txBuilder = await this.squads.getTransactionBuilder(msPDA, 0); - const [txInstructions, txPDA] = await ( - await txBuilder.withChangeThreshold(threshold) - ).getInstructions(); - const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); - await this.sendAndConfirm([...txInstructions, activateIx]); + removeKeyTransaction = (msPDA: PublicKey, key: PublicKey) => + this.submitBuilderTx(msPDA, b => b.withRemoveMember(key)); - await this.squads.approveTransaction(txPDA); - return this.squads.getTransaction(txPDA); - }; + changeThresholdTransaction = (msPDA: PublicKey, threshold: number) => + this.submitBuilderTx(msPDA, b => b.withChangeThreshold(threshold)); createTransaction(msPDA: PublicKey, authorityIndex: number){ return this.squads.createTransaction(msPDA, authorityIndex); diff --git a/yarn.lock b/yarn.lock index 3b6f68c..a8aeb9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1386,6 +1386,13 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + "avsc@https://github.com/Irys-xyz/avsc#csp-fixes": version "5.4.7" resolved "https://github.com/Irys-xyz/avsc#a730cc8018b79e114b6a3381bbb57760a24c6cef" @@ -1648,6 +1655,24 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: get-intrinsic "^1.2.1" set-function-length "^1.1.1" +call-bind@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.9.tgz#39a644700c80bc7d0ca9102fc6d1d43b2fd7eee7" + integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + get-intrinsic "^1.3.0" + set-function-length "^1.2.2" + +call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + camelcase@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" @@ -1801,7 +1826,12 @@ console.table@0.10.0: dependencies: easy-table "1.1.0" -create-hash@^1.1.0, create-hash@^1.1.2: +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +create-hash@^1.1.0, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -1812,7 +1842,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@1.1.7, create-hmac@^1.1.4: +create-hmac@1.1.7, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -1966,6 +1996,15 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -2041,7 +2080,7 @@ easy-table@1.1.0: optionalDependencies: wcwidth ">=1.0.1" -elliptic@6.6.1: +elliptic@6.6.1, elliptic@^6.5.4: version "6.6.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== @@ -2054,19 +2093,6 @@ elliptic@6.6.1: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2088,7 +2114,7 @@ error-polyfill@^0.1.3: o3 "^1.0.3" u3 "^0.1.1" -es-define-property@^1.0.1: +es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== @@ -2354,6 +2380,13 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -2409,7 +2442,7 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" -get-intrinsic@^1.2.6: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -2484,6 +2517,13 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.2.2" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" @@ -2522,6 +2562,16 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash-base@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.2.tgz#79d72def7611c3f6e3c3b5730652638001b10a74" + integrity sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg== + dependencies: + inherits "^2.0.4" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + to-buffer "^1.2.1" + hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -2594,7 +2644,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2693,7 +2743,7 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-callable@^1.1.3: +is-callable@^1.1.3, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -2788,6 +2838,13 @@ is-typed-array@^1.1.10: dependencies: which-typed-array "^1.1.11" +is-typed-array@^1.1.14: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -2821,6 +2878,11 @@ isarray@^2.0.5: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isomorphic-ws@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" @@ -3290,15 +3352,21 @@ path-is-absolute@^1.0.0: integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== pbkdf2@^3.0.9: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + version "3.1.5" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.5.tgz#444a59d7a259a95536c56e80c89de31cc01ed366" + integrity sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ== 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.2.0" + create-hmac "^1.1.7" + ripemd160 "^2.0.3" + safe-buffer "^5.2.1" + sha.js "^2.4.12" + to-buffer "^1.2.1" + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== prebuild-install@^7.1.1: version "7.1.1" @@ -3318,6 +3386,11 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -3353,6 +3426,19 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +readable-stream@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -3412,6 +3498,14 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +ripemd160@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.3.tgz#9be54e4ba5e3559c8eee06a25cd7648bbccdf5a8" + integrity sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA== + dependencies: + hash-base "^3.1.2" + inherits "^2.0.4" + rpc-websockets@^7.5.0: version "7.11.2" resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.11.2.tgz#582910c425b9f2c860327481c1d1e0e431bf4a6d" @@ -3443,11 +3537,16 @@ rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -3484,6 +3583,18 @@ set-function-length@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + set-function-name@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -3506,6 +3617,15 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +sha.js@^2.4.12: + version "2.4.12" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" + integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.0" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -3593,6 +3713,13 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -3696,6 +3823,15 @@ tmp@^0.2.0: dependencies: rimraf "^3.0.0" +to-buffer@^1.2.0, to-buffer@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" + integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" + toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -3789,6 +3925,15 @@ type@^2.7.2: resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -3835,7 +3980,7 @@ utf8@3.0.0: resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== -util-deprecate@^1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -3921,6 +4066,19 @@ which-typed-array@^1.1.11, which-typed-array@^1.1.13: gopd "^1.0.1" has-tostringtag "^1.0.0" +which-typed-array@^1.1.16: + version "1.1.20" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + wrap-ansi@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" From fbe04a71f24398af8602aa3724bbad8178be1483 Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 12:48:58 -0400 Subject: [PATCH 05/10] chore(audit): full socket fix --- package.json | 12 +- yarn.lock | 1374 ++++++++++++++++++++++++++++---------------------- 2 files changed, 787 insertions(+), 599 deletions(-) diff --git a/package.json b/package.json index 35a56a0..38009b9 100644 --- a/package.json +++ b/package.json @@ -31,21 +31,21 @@ "@marinade.finance/ledger-utils": "2.0.18", "@marinade.finance/ts-common": "2.0.18", "@marinade.finance/web3js-common": "2.0.18", - "@metaplex-foundation/js": "0.18.3", + "@metaplex-foundation/js": "0.20.1", "@metaplex-foundation/mpl-token-metadata": "2.13.0", "@metaplex/js": "4.12.0", "@octokit/auth-basic": "1.4.8", - "@octokit/rest": "19.0.3", + "@octokit/rest": "20.0.2", "@solana/spl-token": "0.3.6", "@solana/spl-token-registry": "0.2.4574", - "@solana/web3.js": "1.66.2", + "@solana/web3.js": "1.98.1", "@sqds/sdk": "2.0.2", "@types/bn.js": "5.1.1", "@types/clear": "0.1.2", "@types/clui": "0.3.1", "@types/figlet": "1.5.5", "@types/lodash": "4.14.191", - "axios": "1.14.0", + "axios": "1.15.2", "bn.js": "5.2.1", "bs58": "5.0.0", "chalk": "4.1.2", @@ -54,9 +54,9 @@ "configstore": "6.0.0", "console.table": "0.10.0", "figlet": "1.5.2", - "inquirer": "8.0.0", + "inquirer": "8.2.7", "inquirer-press-to-continue": "1.1.4", - "lodash": "4.17.21", + "lodash": "4.18.0", "minimist": "1.2.6", "simple-git": "3.36.0", "touch": "3.1.0", diff --git a/yarn.lock b/yarn.lock index a8aeb9e..57e6484 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,36 +2,11 @@ # yarn lockfile v1 -"@babel/runtime@^7.12.5": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.25.0": version "7.29.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== -"@bundlr-network/client@^0.8.8": - version "0.8.9" - resolved "https://registry.yarnpkg.com/@bundlr-network/client/-/client-0.8.9.tgz#58e969a5d80f8d25d212d46bb7a060730a3c1736" - integrity sha512-SJ7BAt/KhONeFQ0+nbqrw2DUWrsev6y6cmlXt+3x7fPCkw7OJwudtxV/h2nBteZd65NXjqw8yzkmLiLfZ7CCRA== - dependencies: - "@solana/wallet-adapter-base" "^0.9.2" - "@solana/web3.js" "^1.36.0" - "@supercharge/promise-pool" "^2.1.0" - algosdk "^1.13.1" - arbundles "^0.6.21" - arweave "^1.11.4" - async-retry "^1.3.3" - axios "^0.25.0" - base64url "^3.0.1" - bignumber.js "^9.0.1" - bs58 "^4.0.1" - commander "^8.2.0" - csv "^6.0.5" - ethers "^5.5.1" - inquirer "^8.2.0" - js-sha256 "^0.9.0" - mime-types "^2.1.34" - near-api-js "^0.44.2" - near-seed-phrase "^0.2.0" - "@coral-xyz/anchor@0.26.0", "@coral-xyz/anchor@^0.26.0": version "0.26.0" resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.26.0.tgz#c8e4f7177e93441afd030f22d777d54d0194d7d1" @@ -82,7 +57,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.8.0": +"@ethersproject/abi@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== @@ -97,7 +72,7 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/strings" "^5.8.0" -"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.8.0": +"@ethersproject/abstract-provider@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== @@ -110,7 +85,7 @@ "@ethersproject/transactions" "^5.8.0" "@ethersproject/web" "^5.8.0" -"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.8.0": +"@ethersproject/abstract-signer@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== @@ -121,7 +96,7 @@ "@ethersproject/logger" "^5.8.0" "@ethersproject/properties" "^5.8.0" -"@ethersproject/address@5.8.0", "@ethersproject/address@^5.8.0": +"@ethersproject/address@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== @@ -132,14 +107,14 @@ "@ethersproject/logger" "^5.8.0" "@ethersproject/rlp" "^5.8.0" -"@ethersproject/base64@5.8.0", "@ethersproject/base64@^5.8.0": +"@ethersproject/base64@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== dependencies: "@ethersproject/bytes" "^5.8.0" -"@ethersproject/basex@5.8.0", "@ethersproject/basex@^5.8.0": +"@ethersproject/basex@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== @@ -147,7 +122,7 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/properties" "^5.8.0" -"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.8.0": +"@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== @@ -156,21 +131,21 @@ "@ethersproject/logger" "^5.8.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.8.0": +"@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@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": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== dependencies: "@ethersproject/bignumber" "^5.8.0" -"@ethersproject/contracts@5.8.0": +"@ethersproject/contracts@^5.7.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== @@ -186,7 +161,7 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/transactions" "^5.8.0" -"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.8.0": +"@ethersproject/hash@^5.7.0", "@ethersproject/hash@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== @@ -201,7 +176,7 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/strings" "^5.8.0" -"@ethersproject/hdnode@5.8.0", "@ethersproject/hdnode@^5.8.0": +"@ethersproject/hdnode@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== @@ -219,7 +194,7 @@ "@ethersproject/transactions" "^5.8.0" "@ethersproject/wordlists" "^5.8.0" -"@ethersproject/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.8.0": +"@ethersproject/json-wallets@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== @@ -238,7 +213,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.8.0": +"@ethersproject/keccak256@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== @@ -246,19 +221,19 @@ "@ethersproject/bytes" "^5.8.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.8.0": +"@ethersproject/logger@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== -"@ethersproject/networks@5.8.0", "@ethersproject/networks@^5.8.0": +"@ethersproject/networks@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== dependencies: "@ethersproject/logger" "^5.8.0" -"@ethersproject/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.8.0": +"@ethersproject/pbkdf2@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== @@ -266,14 +241,14 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/sha2" "^5.8.0" -"@ethersproject/properties@5.8.0", "@ethersproject/properties@^5.8.0": +"@ethersproject/properties@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== dependencies: "@ethersproject/logger" "^5.8.0" -"@ethersproject/providers@5.8.0": +"@ethersproject/providers@^5.7.2": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== @@ -299,7 +274,7 @@ bech32 "1.1.4" ws "8.18.0" -"@ethersproject/random@5.8.0", "@ethersproject/random@^5.8.0": +"@ethersproject/random@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== @@ -307,7 +282,7 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/logger" "^5.8.0" -"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.8.0": +"@ethersproject/rlp@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== @@ -315,7 +290,7 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/logger" "^5.8.0" -"@ethersproject/sha2@5.8.0", "@ethersproject/sha2@^5.8.0": +"@ethersproject/sha2@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== @@ -324,7 +299,7 @@ "@ethersproject/logger" "^5.8.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.8.0": +"@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== @@ -336,19 +311,7 @@ elliptic "6.6.1" hash.js "1.1.7" -"@ethersproject/solidity@5.8.0": - version "5.8.0" - 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" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/sha2" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - -"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.8.0": +"@ethersproject/strings@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== @@ -357,7 +320,7 @@ "@ethersproject/constants" "^5.8.0" "@ethersproject/logger" "^5.8.0" -"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.8.0": +"@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== @@ -372,16 +335,7 @@ "@ethersproject/rlp" "^5.8.0" "@ethersproject/signing-key" "^5.8.0" -"@ethersproject/units@5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" - integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== - dependencies: - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - -"@ethersproject/wallet@5.8.0": +"@ethersproject/wallet@^5.7.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== @@ -402,7 +356,7 @@ "@ethersproject/transactions" "^5.8.0" "@ethersproject/wordlists" "^5.8.0" -"@ethersproject/web@5.8.0", "@ethersproject/web@^5.8.0": +"@ethersproject/web@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== @@ -413,7 +367,7 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/strings" "^5.8.0" -"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.8.0": +"@ethersproject/wordlists@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== @@ -424,6 +378,64 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/strings" "^5.8.0" +"@inquirer/external-editor@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" + integrity sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== + dependencies: + chardet "^2.1.1" + iconv-lite "^0.7.0" + +"@irys/arweave@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@irys/arweave/-/arweave-0.0.2.tgz#c0e73eb8c15e323342d33ea92701d4036fd22ae3" + integrity sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg== + dependencies: + asn1.js "^5.4.1" + async-retry "^1.3.3" + axios "^1.4.0" + base64-js "^1.5.1" + bignumber.js "^9.1.1" + +"@irys/query@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@irys/query/-/query-0.0.1.tgz#c0aa3eff9eef585d2b3d8d9e358b1c5942015414" + integrity sha512-7TCyR+Qn+F54IQQx5PlERgqNwgIQik8hY55iZl/silTHhCo1MI2pvx5BozqPUVCc8/KqRsc2nZd8Bc29XGUjRQ== + dependencies: + async-retry "^1.3.3" + axios "^1.4.0" + +"@irys/sdk@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@irys/sdk/-/sdk-0.0.2.tgz#36e86d44143ce6f7576fd3fe53800fe842697de8" + integrity sha512-un/e/CmTpgT042gDwCN3AtISrR9OYGMY6V+442pFmSWKrwrsDoIXZ8VlLiYKnrtTm+yquGhjfYy0LDqGWq41pA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/wallet" "^5.7.0" + "@irys/query" "^0.0.1" + "@near-js/crypto" "^0.0.3" + "@near-js/keystores-browser" "^0.0.3" + "@near-js/providers" "^0.0.4" + "@near-js/transactions" "^0.1.0" + "@solana/web3.js" "^1.36.0" + "@supercharge/promise-pool" "^3.0.0" + algosdk "^1.13.1" + aptos "=1.8.5" + arbundles "^0.10.0" + async-retry "^1.3.3" + axios "^1.4.0" + base64url "^3.0.1" + bignumber.js "^9.0.1" + bs58 "5.0.0" + commander "^8.2.0" + csv "5.5.3" + inquirer "^8.2.0" + js-sha256 "^0.9.0" + mime-types "^2.1.34" + near-seed-phrase "^0.2.0" + "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" @@ -524,20 +536,20 @@ resolved "https://registry.yarnpkg.com/@marinade.finance/web3js-common/-/web3js-common-2.0.18.tgz#85dbe69afc55a31f25348203b0afbce2e753ffaa" integrity sha512-YE0FYbJ/axEGlVKTwCu526phwCpf4oSquGyg8OAjxAAalbaRV4w02b2LTfDTdEvm8pNPjCCJ7qdNH+QfeRu4fA== -"@metaplex-foundation/beet-solana@^0.3.0", "@metaplex-foundation/beet-solana@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz#4b37cda5c7f32ffd2bdd8b3164edc05c6463ab35" - integrity sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g== +"@metaplex-foundation/beet-solana@0.4.0", "@metaplex-foundation/beet-solana@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz#52891e78674aaa54e0031f1bca5bfbc40de12e8d" + integrity sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ== dependencies: "@metaplex-foundation/beet" ">=0.1.0" "@solana/web3.js" "^1.56.2" bs58 "^5.0.0" debug "^4.3.4" -"@metaplex-foundation/beet-solana@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz#52891e78674aaa54e0031f1bca5bfbc40de12e8d" - integrity sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ== +"@metaplex-foundation/beet-solana@^0.3.0", "@metaplex-foundation/beet-solana@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz#4b37cda5c7f32ffd2bdd8b3164edc05c6463ab35" + integrity sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g== dependencies: "@metaplex-foundation/beet" ">=0.1.0" "@solana/web3.js" "^1.56.2" @@ -576,20 +588,22 @@ resolved "https://registry.yarnpkg.com/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz#dc2032a452d6c269e25f016aa4dd63600e2af975" integrity sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA== -"@metaplex-foundation/js@0.18.3": - version "0.18.3" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/js/-/js-0.18.3.tgz#d61d25b9e3ab91d069cd6a87fa9eb5d01ce56ed3" - integrity sha512-rqI8vI+V5Bt3pgrv8E7leqR8gxxdw6Q/pbWg4EznbuYSmpNGRQkjMaZE0C+rQrmtQbMqUD9rUsUuYOoppSlI4A== +"@metaplex-foundation/js@0.20.1": + version "0.20.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/js/-/js-0.20.1.tgz#654974dfdb163435f9583478256e5917e2187a7b" + integrity sha512-aqiLoEiToXdfI5pS+17/GN/dIO2D31gLoVQvEKDQi9XcnOPVhfJerXDmwgKbhp79OGoYxtlvVw+b2suacoUzGQ== dependencies: - "@bundlr-network/client" "^0.8.8" + "@irys/sdk" "^0.0.2" "@metaplex-foundation/beet" "0.7.1" "@metaplex-foundation/mpl-auction-house" "^2.3.0" + "@metaplex-foundation/mpl-bubblegum" "^0.6.2" "@metaplex-foundation/mpl-candy-guard" "^0.3.0" "@metaplex-foundation/mpl-candy-machine" "^5.0.0" "@metaplex-foundation/mpl-candy-machine-core" "^0.1.2" - "@metaplex-foundation/mpl-token-metadata" "^2.8.6" + "@metaplex-foundation/mpl-token-metadata" "^2.11.0" "@noble/ed25519" "^1.7.1" "@noble/hashes" "^1.1.3" + "@solana/spl-account-compression" "^0.1.8" "@solana/spl-token" "^0.3.5" "@solana/web3.js" "^1.63.1" bignumber.js "^9.0.2" @@ -600,7 +614,7 @@ eventemitter3 "^4.0.7" lodash.clonedeep "^4.5.0" lodash.isequal "^4.5.0" - merkletreejs "^0.2.32" + merkletreejs "^0.3.11" mime "^3.0.0" node-fetch "^2.6.7" @@ -625,6 +639,21 @@ "@solana/spl-token" "^0.1.8" "@solana/web3.js" "^1.31.0" +"@metaplex-foundation/mpl-bubblegum@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-bubblegum/-/mpl-bubblegum-0.6.2.tgz#e1b098ccef10899b0d759a03e3d4b1ae7bdc9f0c" + integrity sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw== + dependencies: + "@metaplex-foundation/beet" "0.7.1" + "@metaplex-foundation/beet-solana" "0.4.0" + "@metaplex-foundation/cusper" "^0.0.2" + "@metaplex-foundation/mpl-token-metadata" "^2.5.2" + "@solana/spl-account-compression" "^0.1.4" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.50.1" + bn.js "^5.2.0" + js-sha3 "^0.8.0" + "@metaplex-foundation/mpl-candy-guard@^0.3.0": version "0.3.2" resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-candy-guard/-/mpl-candy-guard-0.3.2.tgz#426e89793676b42e9bbb5e523303fba36ccd5281" @@ -678,7 +707,7 @@ "@solana/spl-token" "^0.1.8" "@solana/web3.js" "^1.31.0" -"@metaplex-foundation/mpl-token-metadata@2.13.0", "@metaplex-foundation/mpl-token-metadata@^2.8.6": +"@metaplex-foundation/mpl-token-metadata@2.13.0", "@metaplex-foundation/mpl-token-metadata@^2.11.0", "@metaplex-foundation/mpl-token-metadata@^2.5.2": version "2.13.0" resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz#ea498190ad4ed1d4c0b8218a72d03bd17a883d11" integrity sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw== @@ -739,6 +768,142 @@ crypto-hash "^1.3.0" form-data "^4.0.0" +"@near-js/crypto@0.0.3", "@near-js/crypto@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@near-js/crypto/-/crypto-0.0.3.tgz#4a33e526ab5fa75b703427067985694a279ff8bd" + integrity sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw== + dependencies: + "@near-js/types" "0.0.3" + bn.js "5.2.1" + borsh "^0.7.0" + tweetnacl "^1.0.1" + +"@near-js/crypto@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@near-js/crypto/-/crypto-0.0.4.tgz#7bb991da25f06096de51466c6331cb185314fad8" + integrity sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ== + dependencies: + "@near-js/types" "0.0.4" + bn.js "5.2.1" + borsh "^0.7.0" + tweetnacl "^1.0.1" + +"@near-js/keystores-browser@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@near-js/keystores-browser/-/keystores-browser-0.0.3.tgz#110b847cd9c358076c2401e9462cc1140e12a908" + integrity sha512-Ve/JQ1SBxdNk3B49lElJ8Y54AoBY+yOStLvdnUIpe2FBOczzwDCkcnPcMDV0NMwVlHpEnOWICWHbRbAkI5Vs+A== + dependencies: + "@near-js/crypto" "0.0.3" + "@near-js/keystores" "0.0.3" + +"@near-js/keystores@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@near-js/keystores/-/keystores-0.0.3.tgz#eb1e8e06936da166b5ed8dab3123eaa1bf7a8dab" + integrity sha512-mnwLYUt4Td8u1I4QE1FBx2d9hMt3ofiriE93FfOluJ4XiqRqVFakFYiHg6pExg5iEkej/sXugBUFeQ4QizUnew== + dependencies: + "@near-js/crypto" "0.0.3" + "@near-js/types" "0.0.3" + +"@near-js/keystores@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@near-js/keystores/-/keystores-0.0.4.tgz#da03069497bb14741a4d97f7ad4746baf9a09ea7" + integrity sha512-+vKafmDpQGrz5py1liot2hYSjPGXwihveeN+BL11aJlLqZnWBgYJUWCXG+uyGjGXZORuy2hzkKK6Hi+lbKOfVA== + dependencies: + "@near-js/crypto" "0.0.4" + "@near-js/types" "0.0.4" + +"@near-js/providers@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@near-js/providers/-/providers-0.0.4.tgz#90f84d765ff90370599d027f47c098a3e7e745d0" + integrity sha512-g/2pJTYmsIlTW4mGqeRlqDN9pZeN+1E2/wfoMIf3p++boBVxVlaSebtQgawXAf2lkfhb9RqXz5pHqewXIkTBSw== + dependencies: + "@near-js/transactions" "0.1.0" + "@near-js/types" "0.0.3" + "@near-js/utils" "0.0.3" + bn.js "5.2.1" + borsh "^0.7.0" + http-errors "^1.7.2" + optionalDependencies: + node-fetch "^2.6.1" + +"@near-js/signers@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@near-js/signers/-/signers-0.0.3.tgz#bfc8386613295fc6b51982cf65c79bdc9307aa5e" + integrity sha512-u1R+DDIua5PY1PDFnpVYqdMgQ7c4dyeZsfqMjE7CtgzdqupgTYCXzJjBubqMlAyAx843PoXmLt6CSSKcMm0WUA== + dependencies: + "@near-js/crypto" "0.0.3" + "@near-js/keystores" "0.0.3" + js-sha256 "^0.9.0" + +"@near-js/signers@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@near-js/signers/-/signers-0.0.4.tgz#a1904ccc718d6f87b05cd2e168f33bde0cfb269a" + integrity sha512-xCglo3U/WIGsz/izPGFMegS5Q3PxOHYB8a1E7RtVhNm5QdqTlQldLCm/BuMg2G/u1l1ZZ0wdvkqRTG9joauf3Q== + dependencies: + "@near-js/crypto" "0.0.4" + "@near-js/keystores" "0.0.4" + js-sha256 "^0.9.0" + +"@near-js/transactions@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@near-js/transactions/-/transactions-0.1.0.tgz#a03f529da6bb2eaf9dd0590093f2d0763b8ae72a" + integrity sha512-OrrDFqhX0rtH+6MV3U3iS+zmzcPQI+L4GJi9na4Uf8FgpaVPF0mtSmVrpUrS5CC3LwWCzcYF833xGYbXOV4Kfg== + dependencies: + "@near-js/crypto" "0.0.3" + "@near-js/signers" "0.0.3" + "@near-js/types" "0.0.3" + "@near-js/utils" "0.0.3" + bn.js "5.2.1" + borsh "^0.7.0" + js-sha256 "^0.9.0" + +"@near-js/transactions@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@near-js/transactions/-/transactions-0.1.1.tgz#3d4c9d8e3cf2543642d660c0c0b126f0a97d5d43" + integrity sha512-Fk83oLLFK7nz4thawpdv9bGyMVQ2i48iUtZEVYhuuuqevl17tSXMlhle9Me1ZbNyguJG/cWPdNybe1UMKpyGxA== + dependencies: + "@near-js/crypto" "0.0.4" + "@near-js/signers" "0.0.4" + "@near-js/types" "0.0.4" + "@near-js/utils" "0.0.4" + bn.js "5.2.1" + borsh "^0.7.0" + js-sha256 "^0.9.0" + +"@near-js/types@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@near-js/types/-/types-0.0.3.tgz#d504222469f4d50a6299c522fb6905ba10905bd6" + integrity sha512-gC3iGUT+r2JjVsE31YharT+voat79ToMUMLCGozHjp/R/UW1M2z4hdpqTUoeWUBGBJuVc810gNTneHGx0jvzwQ== + dependencies: + bn.js "5.2.1" + +"@near-js/types@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@near-js/types/-/types-0.0.4.tgz#d941689df41c850aeeeaeb9d498418acec515404" + integrity sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg== + dependencies: + bn.js "5.2.1" + +"@near-js/utils@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@near-js/utils/-/utils-0.0.3.tgz#5e631f3dbdb7f0c6985bcbef08644db83b519978" + integrity sha512-J72n/EL0VfLRRb4xNUF4rmVrdzMkcmkwJOhBZSTWz3PAZ8LqNeU9ZConPfMvEr6lwdaD33ZuVv70DN6IIjPr1A== + dependencies: + "@near-js/types" "0.0.3" + bn.js "5.2.1" + depd "^2.0.0" + mustache "^4.0.0" + +"@near-js/utils@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@near-js/utils/-/utils-0.0.4.tgz#1a387f81974ebbfa4521c92590232be97e3335dd" + integrity sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA== + dependencies: + "@near-js/types" "0.0.4" + bn.js "5.2.1" + depd "^2.0.0" + mustache "^4.0.0" + "@noble/curves@1.1.0", "@noble/curves@~1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" @@ -746,6 +911,13 @@ dependencies: "@noble/hashes" "1.3.1" +"@noble/curves@^1.4.2": + version "1.9.7" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" + integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/ed25519@^1.6.1", "@noble/ed25519@^1.7.1": version "1.7.3" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" @@ -756,12 +928,17 @@ resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.5.tgz#94df8bdb9fec9c4644a56007eecb57b0e9fbd0d7" integrity sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA== +"@noble/hashes@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" + integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== + "@noble/hashes@1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== -"@noble/hashes@^1.1.2": +"@noble/hashes@1.8.0", "@noble/hashes@^1.1.2", "@noble/hashes@^1.4.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== @@ -771,6 +948,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@noble/hashes@~1.1.1": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.5.tgz#1a0377f3b9020efe2fae03290bd2a12140c95c11" + integrity sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ== + "@noble/secp256k1@^1.6.3": version "1.7.2" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.2.tgz#c2c3343e2dce80e15a914d7442147507f8a98e7f" @@ -788,21 +970,21 @@ btoa-lite "^1.0.0" universal-user-agent "^6.0.0" -"@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== - -"@octokit/core@^4.0.0": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" - integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== + +"@octokit/core@^5.0.0": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.2.tgz#252805732de9b4e8e4f658d34b80c4c9b2534761" + integrity sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.0.0" before-after-hook "^2.2.0" universal-user-agent "^6.0.0" @@ -815,22 +997,21 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== +"@octokit/endpoint@^9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.6.tgz#114d912108fe692d8b139cfe7fc0846dfd11b6c0" + integrity sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw== dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" + "@octokit/types" "^13.1.0" universal-user-agent "^6.0.0" -"@octokit/graphql@^5.0.0": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" - integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== +"@octokit/graphql@^7.1.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.1.1.tgz#79d9f3d0c96a8fd13d64186fe5c33606d48b79cc" + integrity sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g== dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" + "@octokit/request" "^8.4.1" + "@octokit/types" "^13.0.0" universal-user-agent "^6.0.0" "@octokit/openapi-types@^12.11.0": @@ -838,35 +1019,34 @@ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== -"@octokit/openapi-types@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-14.0.0.tgz#949c5019028c93f189abbc2fb42f333290f7134a" - integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw== +"@octokit/openapi-types@^20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-20.0.0.tgz#9ec2daa0090eeb865ee147636e0c00f73790c6e5" + integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA== -"@octokit/openapi-types@^18.0.0": - version "18.1.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" - integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== +"@octokit/openapi-types@^24.2.0": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3" + integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg== -"@octokit/plugin-paginate-rest@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz#86f8be759ce2d6d7c879a31490fd2f7410b731f0" - integrity sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA== +"@octokit/plugin-paginate-rest@^9.0.0": + version "9.2.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz#c516bc498736bcdaa9095b9a1d10d9d0501ae831" + integrity sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ== dependencies: - "@octokit/types" "^6.41.0" + "@octokit/types" "^12.6.0" -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== +"@octokit/plugin-request-log@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz#98a3ca96e0b107380664708111864cb96551f958" + integrity sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA== -"@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.8.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz#97391fda88949eb15f68dc291957ccbe1d3e8ad1" - integrity sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg== +"@octokit/plugin-rest-endpoint-methods@^10.0.0": + version "10.4.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz#41ba478a558b9f554793075b2e20cd2ef973be17" + integrity sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg== dependencies: - "@octokit/types" "^8.1.1" - deprecation "^2.3.1" + "@octokit/types" "^12.6.0" "@octokit/request-error@^2.0.0", "@octokit/request-error@^2.1.0": version "2.1.0" @@ -877,12 +1057,12 @@ deprecation "^2.0.0" once "^1.4.0" -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== +"@octokit/request-error@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.1.tgz#b9218f9c1166e68bb4d0c89b638edc62c9334805" + integrity sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g== dependencies: - "@octokit/types" "^9.0.0" + "@octokit/types" "^13.1.0" deprecation "^2.0.0" once "^1.4.0" @@ -898,48 +1078,46 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/request@^6.0.0": - version "6.2.8" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== +"@octokit/request@^8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.1.tgz#715a015ccf993087977ea4365c44791fc4572486" + integrity sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw== dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" + "@octokit/endpoint" "^9.0.6" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.1.0" universal-user-agent "^6.0.0" -"@octokit/rest@19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.3.tgz#b9a4e8dc8d53e030d611c053153ee6045f080f02" - integrity sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ== +"@octokit/rest@20.0.2": + version "20.0.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-20.0.2.tgz#5cc8871ba01b14604439049e5f06c74b45c99594" + integrity sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ== dependencies: - "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^3.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + "@octokit/core" "^5.0.0" + "@octokit/plugin-paginate-rest" "^9.0.0" + "@octokit/plugin-request-log" "^4.0.0" + "@octokit/plugin-rest-endpoint-methods" "^10.0.0" -"@octokit/types@^6.0.0", "@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.41.0": - version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" - integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== +"@octokit/types@^12.6.0": + version "12.6.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-12.6.0.tgz#8100fb9eeedfe083aae66473bd97b15b62aedcb2" + integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw== dependencies: - "@octokit/openapi-types" "^12.11.0" + "@octokit/openapi-types" "^20.0.0" -"@octokit/types@^8.1.1": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-8.2.1.tgz#a6de091ae68b5541f8d4fcf9a12e32836d4648aa" - integrity sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw== +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0": + version "13.10.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3" + integrity sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA== dependencies: - "@octokit/openapi-types" "^14.0.0" + "@octokit/openapi-types" "^24.2.0" -"@octokit/types@^9.0.0": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== +"@octokit/types@^6.0.0", "@octokit/types@^6.0.3", "@octokit/types@^6.16.1": + version "6.41.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== dependencies: - "@octokit/openapi-types" "^18.0.0" + "@octokit/openapi-types" "^12.11.0" "@randlabs/communication-bridge@1.0.1": version "1.0.1" @@ -967,6 +1145,14 @@ "@noble/hashes" "~1.3.1" "@scure/base" "~1.1.0" +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + dependencies: + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" + "@scure/bip39@1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" @@ -997,13 +1183,48 @@ bigint-buffer "^1.1.5" bignumber.js "^9.0.1" -"@solana/buffer-layout@^4.0.0": +"@solana/buffer-layout@^4.0.0", "@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" integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== dependencies: buffer "~6.0.3" +"@solana/codecs-core@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.3.0.tgz#6bf2bb565cb1ae880f8018635c92f751465d8695" + integrity sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw== + dependencies: + "@solana/errors" "2.3.0" + +"@solana/codecs-numbers@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz#ac7e7f38aaf7fcd22ce2061fbdcd625e73828dc6" + integrity sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg== + dependencies: + "@solana/codecs-core" "2.3.0" + "@solana/errors" "2.3.0" + +"@solana/errors@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.3.0.tgz#4ac9380343dbeffb9dffbcb77c28d0e457c5fa31" + integrity sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ== + dependencies: + chalk "^5.4.1" + commander "^14.0.0" + +"@solana/spl-account-compression@^0.1.4", "@solana/spl-account-compression@^0.1.8": + version "0.1.10" + resolved "https://registry.yarnpkg.com/@solana/spl-account-compression/-/spl-account-compression-0.1.10.tgz#b3135ce89349d6090832b3b1d89095badd57e969" + integrity sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw== + dependencies: + "@metaplex-foundation/beet" "^0.7.1" + "@metaplex-foundation/beet-solana" "^0.4.0" + bn.js "^5.2.1" + borsh "^0.7.0" + js-sha3 "^0.8.0" + typescript-collections "^1.3.3" + "@solana/spl-token-registry@0.2.4574": version "0.2.4574" resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.4574.tgz#13f4636b7bec90d2bb43bbbb83512cd90d2ce257" @@ -1020,25 +1241,7 @@ "@solana/buffer-layout-utils" "^0.2.0" buffer "^6.0.3" -"@solana/wallet-adapter-base@^0.9.2": - 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-standard-features@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@solana/wallet-standard-features/-/wallet-standard-features-1.1.0.tgz#516d78626dd0802d299db49298e4ebbec3433940" - integrity sha512-oVyygxfYkkF5INYL0GuD8GFmNO/wd45zNesIqGCFE6X66BYxmI6HmyzQJCcZTZ0BNsezlVg4t+3MCL5AhfFoGA== - dependencies: - "@wallet-standard/base" "^1.0.1" - "@wallet-standard/features" "^1.0.3" - -"@solana/web3.js@1.66.2", "@solana/web3.js@^1.30.2", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.66.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2": +"@solana/web3.js@1.66.2", "@solana/web3.js@^1.30.2", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.66.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2": version "1.66.2" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.66.2.tgz#80b43c5868b846124fe3ebac7d3943930c3fa60c" integrity sha512-RyaHMR2jGmaesnYP045VLeBGfR/gAW3cvZHzMFGg7bkO+WOYOYp1nEllf0/la4U4qsYGKCsO9eEevR5fhHiVHg== @@ -1059,6 +1262,27 @@ rpc-websockets "^7.5.0" superstruct "^0.14.2" +"@solana/web3.js@1.98.1": + version "1.98.1" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.98.1.tgz#9237a5dcded21b323672aa503a0db1c3d18ff841" + integrity sha512-gRAq1YPbfSDAbmho4kY7P/8iLIjMWXAzBJdP9iENFR+dFQSBSueHzjK/ou8fxhqHP9j+J4Msl4p/oDemFcIjlg== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + "@solana/codecs-numbers" "^2.1.0" + agentkeepalive "^4.5.0" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + "@sqds/sdk@2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@sqds/sdk/-/sdk-2.0.2.tgz#326a2cbe35ec0b5cda7f1cf295b1bb93a3e199ae" @@ -1068,10 +1292,17 @@ "@solana/web3.js" "^1.73.2" bn.js "^5.2.1" -"@supercharge/promise-pool@^2.1.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz#6050eea8c2d7f92ddd4ddc582ee328b15c034ad3" - integrity sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w== +"@supercharge/promise-pool@^3.0.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-3.3.0.tgz#81c3c890f3aaac3727d466831d985e6e9811c441" + integrity sha512-qGzCltMN05ohRRQAXB8TPWt+0Coz9Va266gr9nYN1qc/f/EIaup3VRg7b59mtRaeKTRcxreF20l/udCM/gOqNg== + +"@swc/helpers@^0.5.11": + version "0.5.21" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.21.tgz#0b1b020317ee1282860ca66f7e9a7c7790f05ae0" + integrity sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg== + dependencies: + tslib "^2.8.0" "@tsconfig/node10@^1.0.7": version "1.0.9" @@ -1198,6 +1429,13 @@ dependencies: "@types/node" "*" +"@types/ws@^8.2.2": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" @@ -1210,18 +1448,6 @@ dependencies: "@types/yargs-parser" "*" -"@wallet-standard/base@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@wallet-standard/base/-/base-1.0.1.tgz#860dd94d47c9e3c5c43b79d91c6afdbd7a36264e" - integrity sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w== - -"@wallet-standard/features@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@wallet-standard/features/-/features-1.0.3.tgz#c992876c5e4f7a0672f8869c4146c87e0dfe48c8" - integrity sha512-m8475I6W5LTatTZuUz5JJNK42wFRgkJTB0I9tkruMwfqBF2UN2eomkYNVf9RbrsROelCRzSFmugqjKZBFaubsA== - dependencies: - "@wallet-standard/base" "^1.0.1" - JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -1250,6 +1476,20 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== + dependencies: + humanize-ms "^1.2.1" + algo-msgpack-with-bigint@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz#38bb717220525b3ff42232eefdcd9efb9ad405d6" @@ -1300,35 +1540,41 @@ ansicolors@^0.3.2: resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== -arbundles@^0.6.21: - version "0.6.23" - resolved "https://registry.yarnpkg.com/arbundles/-/arbundles-0.6.23.tgz#c00cda953df67fa65d4297486237cc8e0c072c47" - integrity sha512-+gr93F3fivN+6dhiImT6BQNaXz4oECPn2GYjCZjS2yEoq7hM78FRvVp6kQyjEdhnuBFQr/q4oS/nkjnQlHdj9Q== +aptos@=1.8.5: + version "1.8.5" + resolved "https://registry.yarnpkg.com/aptos/-/aptos-1.8.5.tgz#a17ac721066914785902b03cf1e7304495f6cd9d" + integrity sha512-iQxliWesNHjGQ5YYXCyss9eg4+bDGQWqAZa73vprqGQ9tungK0cRjUI2fmnp63Ed6UG6rurHrL+b0ckbZAOZZQ== dependencies: + "@noble/hashes" "1.1.3" + "@scure/bip39" "1.1.0" + axios "0.27.2" + form-data "4.0.0" + tweetnacl "1.0.3" + +arbundles@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/arbundles/-/arbundles-0.10.1.tgz#1f542d9edf185a8a272994aef501a8ee12aaaa46" + integrity sha512-QYFepxessLCirvRkQK9iQmjxjHz+s50lMNGRwZwpyPWLohuf6ISyj1gkFXJHlMT+rNSrsHxb532glHnKbjwu3A== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" + "@irys/arweave" "^0.0.2" "@noble/ed25519" "^1.6.1" - "@randlabs/myalgo-connect" "^1.1.2" - "@solana/wallet-adapter-base" "^0.9.2" - algosdk "^1.13.1" - arweave "^1.11.4" - arweave-stream-tx "^1.1.0" - avsc "https://github.com/Irys-xyz/avsc#csp-fixes" - axios "^0.21.3" base64url "^3.0.1" bs58 "^4.0.1" - ethers "^5.5.1" keccak "^3.0.2" + secp256k1 "^5.0.0" + optionalDependencies: + "@randlabs/myalgo-connect" "^1.1.2" + algosdk "^1.13.1" + arweave-stream-tx "^1.1.0" multistream "^4.1.0" - process "^0.11.10" - secp256k1 "^4.0.2" tmp-promise "^3.0.2" -arconnect@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/arconnect/-/arconnect-0.4.2.tgz#83de7638fb46183e82d7ec7efb5594c5f7cdc806" - integrity sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw== - dependencies: - arweave "^1.10.13" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -1349,16 +1595,6 @@ arweave-stream-tx@^1.1.0: dependencies: exponential-backoff "^3.1.0" -arweave@^1.10.13, arweave@^1.11.4: - version "1.14.4" - resolved "https://registry.yarnpkg.com/arweave/-/arweave-1.14.4.tgz#5ba22136aa0e7fd9495258a3931fb770c9d6bf21" - integrity sha512-tmqU9fug8XAmFETYwgUhLaD3WKav5DaM4p1vgJpEj/Px2ORPPMikwnSySlFymmL2qgRh2ZBcZsg11+RXPPGLsA== - dependencies: - arconnect "^0.4.2" - asn1.js "^5.4.1" - base64-js "^1.5.1" - bignumber.js "^9.0.2" - asn1.js@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -1393,26 +1629,23 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -"avsc@https://github.com/Irys-xyz/avsc#csp-fixes": - version "5.4.7" - resolved "https://github.com/Irys-xyz/avsc#a730cc8018b79e114b6a3381bbb57760a24c6cef" +axios@0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" -axios@1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.14.0.tgz#7c29f4cf2ea91ef05018d5aa5399bf23ed3120eb" - integrity sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ== +axios@1.15.2: + version "1.15.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.15.2.tgz#eb8fb6d30349abace6ade5b4cb4d9e8a0dc23e5b" + integrity sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A== dependencies: follow-redirects "^1.15.11" form-data "^4.0.5" proxy-from-env "^2.1.0" -axios@^0.21.3: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - axios@^0.25.0: version "0.25.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" @@ -1420,12 +1653,24 @@ axios@^0.25.0: dependencies: follow-redirects "^1.14.7" -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +axios@^1.4.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.16.1.tgz#517e29291d19d6e8cf919ff264f4fe157261ba12" + integrity sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A== + dependencies: + follow-redirects "^1.16.0" + form-data "^4.0.5" + https-proxy-agent "^5.0.1" + proxy-from-env "^2.1.0" -base-x@^3.0.2, base-x@^3.0.6: +base-x@^3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== + dependencies: + safe-buffer "^5.0.1" + +base-x@^3.0.6: version "3.0.9" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== @@ -1433,9 +1678,9 @@ base-x@^3.0.2, base-x@^3.0.6: safe-buffer "^5.0.1" base-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" - integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.1.tgz#817fb7b57143c501f649805cb247617ad016a885" + integrity sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw== base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" @@ -1469,6 +1714,11 @@ bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.0.2: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== +bignumber.js@^9.1.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" + integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== + bindings@^1.3.0, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -1522,17 +1772,17 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== -bn.js@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -bn.js@^4.0.0, bn.js@^4.11.9: +bn.js@^4.0.0: + version "4.12.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.3.tgz#2cc2c679188eb35b006f2d0d4710bed8437a769e" + integrity sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g== + +bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== @@ -1547,15 +1797,6 @@ borsh@^0.4.0: bs58 "^4.0.0" text-encoding-utf-8 "^1.0.2" -borsh@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.6.0.tgz#a7c9eeca6a31ca9e0607cb49f329cb659eb791e1" - integrity sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - borsh@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" @@ -1565,14 +1806,6 @@ borsh@^0.7.0: bs58 "^4.0.0" text-encoding-utf-8 "^1.0.2" -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1615,6 +1848,14 @@ buffer@6.0.1: base64-js "^1.3.1" ieee754 "^1.2.1" +buffer@6.0.3, buffer@^6.0.2, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -1623,14 +1864,6 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.2, buffer@^6.0.3, buffer@~6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - bufferutil@^4.0.1: version "4.0.8" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" @@ -1678,11 +1911,6 @@ camelcase@^6.3.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -capability@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/capability/-/capability-0.2.5.tgz#51ad87353f1936ffd77f2f21c74633a4dea88801" - integrity sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg== - chalk@4.1.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -1696,17 +1924,31 @@ chalk@^5.0.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" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chalk@^5.4.1: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + +chardet@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -cipher-base@^1.0.1, cipher-base@^1.0.3: +cipher-base@^1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.7.tgz#bd094bfef42634ccfd9e13b9fc73274997111e39" + integrity sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.2" + +cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== @@ -1793,6 +2035,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@^14.0.0: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== + commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -1803,11 +2050,6 @@ commander@^8.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - configstore@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" @@ -1878,10 +2120,10 @@ crypto-hash@^1.3.0: resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== -crypto-js@^3.1.9-1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" - integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== crypto-random-string@^4.0.0: version "4.0.0" @@ -1890,30 +2132,30 @@ crypto-random-string@^4.0.0: dependencies: type-fest "^1.0.1" -csv-generate@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-4.3.0.tgz#e9004172ab1995815580f2253d8fc1bbd43a5d1f" - integrity sha512-7KdVId/2RgwPIKfWHaHtjBq7I9mgdi8ICzsUyIhP8is6UwpwVGGSC/aPnrZ8/SkgBcCP20lXrdPuP64Irs1VBg== +csv-generate@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" + integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== -csv-parse@^5.5.2: - version "5.5.2" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.5.2.tgz#ab525e642093dccff7c5cca5c7b71fd3e99fe8f2" - integrity sha512-YRVtvdtUNXZCMyK5zd5Wty1W6dNTpGKdqQd4EQ8tl/c6KW1aMBB1Kg1ppky5FONKmEqGJ/8WjLlTNLPne4ioVA== +csv-parse@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" + integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== -csv-stringify@^6.4.4: - version "6.4.4" - resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-6.4.4.tgz#92ef52e21b5cc39d20e7db9b6b913367460e2659" - integrity sha512-NDshLupGa7gp4UG4sSNIqwYJqgSwvds0SvENntxoVoVvTzXcrHvd5gG2MWpbRpSNvk59dlmIe1IwNvSxN4IVmg== +csv-stringify@^5.6.5: + version "5.6.5" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" + integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== -csv@^6.0.5: - version "6.3.5" - resolved "https://registry.yarnpkg.com/csv/-/csv-6.3.5.tgz#af8c9f76fef21974cb8968a044fdeb1f84556011" - integrity sha512-Y+KTCAUljtq2JaGP42ZL1bymqlU5BkfnFpZhxRczGFDZox2VXhlRHnG5DRshyUrwQzmCdEiLjSqNldCfm1OVCA== +csv@5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" + integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== dependencies: - csv-generate "^4.3.0" - csv-parse "^5.5.2" - csv-stringify "^6.4.4" - stream-transform "^3.2.10" + csv-generate "^3.4.3" + csv-parse "^4.16.3" + csv-stringify "^5.6.5" + stream-transform "^2.1.3" d@1, d@^1.0.1: version "1.0.1" @@ -1930,6 +2172,13 @@ d@~0.1.1: dependencies: es5-ext "~0.10.2" +debug@4, debug@^4.4.0: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + debug@^4.1.1, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -1937,13 +2186,6 @@ debug@^4.1.1, debug@^4.3.3, debug@^4.3.4: dependencies: ms "2.1.2" -debug@^4.4.0: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -2034,7 +2276,7 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -deprecation@^2.0.0, deprecation@^2.3.1: +deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== @@ -2045,9 +2287,9 @@ detect-libc@^2.0.0: integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + version "4.0.4" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.4.tgz#7a6dbfda325f25f07517e9b518f897c08332e07d" + integrity sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ== dot-case@^3.0.4: version "3.0.4" @@ -2080,7 +2322,7 @@ easy-table@1.1.0: optionalDependencies: wcwidth ">=1.0.1" -elliptic@6.6.1, elliptic@^6.5.4: +elliptic@6.6.1, elliptic@^6.5.7: version "6.6.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== @@ -2105,15 +2347,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -error-polyfill@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/error-polyfill/-/error-polyfill-0.1.3.tgz#df848b61ad8834f7a5db69a70b9913df86721d15" - integrity sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg== - dependencies: - capability "^0.2.5" - o3 "^1.0.3" - u3 "^0.1.1" - es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" @@ -2156,7 +2389,17 @@ es-set-tostringtag@^2.1.0: has-tostringtag "^1.0.2" hasown "^2.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.11, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46, es5-ext@~0.10.5, es5-ext@~0.10.6: +es5-ext@^0.10.35, es5-ext@^0.10.62: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" + +es5-ext@^0.10.50, es5-ext@~0.10.11, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46, es5-ext@~0.10.5, es5-ext@~0.10.6: version "0.10.62" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== @@ -2231,6 +2474,16 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + ethereum-bloom-filters@^1.0.6: version "1.0.10" resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" @@ -2248,42 +2501,6 @@ ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: "@scure/bip32" "1.3.1" "@scure/bip39" "1.2.1" -ethers@^5.5.1: - version "5.8.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" - integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== - dependencies: - "@ethersproject/abi" "5.8.0" - "@ethersproject/abstract-provider" "5.8.0" - "@ethersproject/abstract-signer" "5.8.0" - "@ethersproject/address" "5.8.0" - "@ethersproject/base64" "5.8.0" - "@ethersproject/basex" "5.8.0" - "@ethersproject/bignumber" "5.8.0" - "@ethersproject/bytes" "5.8.0" - "@ethersproject/constants" "5.8.0" - "@ethersproject/contracts" "5.8.0" - "@ethersproject/hash" "5.8.0" - "@ethersproject/hdnode" "5.8.0" - "@ethersproject/json-wallets" "5.8.0" - "@ethersproject/keccak256" "5.8.0" - "@ethersproject/logger" "5.8.0" - "@ethersproject/networks" "5.8.0" - "@ethersproject/pbkdf2" "5.8.0" - "@ethersproject/properties" "5.8.0" - "@ethersproject/providers" "5.8.0" - "@ethersproject/random" "5.8.0" - "@ethersproject/rlp" "5.8.0" - "@ethersproject/sha2" "5.8.0" - "@ethersproject/signing-key" "5.8.0" - "@ethersproject/solidity" "5.8.0" - "@ethersproject/strings" "5.8.0" - "@ethersproject/transactions" "5.8.0" - "@ethersproject/units" "5.8.0" - "@ethersproject/wallet" "5.8.0" - "@ethersproject/web" "5.8.0" - "@ethersproject/wordlists" "5.8.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -2292,7 +2509,7 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -event-emitter@~0.3.4: +event-emitter@^0.3.5, event-emitter@~0.3.4: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== @@ -2305,6 +2522,11 @@ eventemitter3@^4.0.7: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" + integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== + events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -2327,15 +2549,6 @@ ext@^1.1.2: dependencies: type "^2.7.2" -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - eyes@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" @@ -2363,15 +2576,15 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -follow-redirects@^1.14.0, follow-redirects@^1.14.7: +follow-redirects@^1.14.7: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== -follow-redirects@^1.15.11: - version "1.15.11" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== +follow-redirects@^1.14.9, follow-redirects@^1.15.11, follow-redirects@^1.16.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" + integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== for-each@^0.3.3: version "0.3.3" @@ -2387,7 +2600,7 @@ for-each@^0.3.5: dependencies: is-callable "^1.2.7" -form-data@^4.0.0: +form-data@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== @@ -2396,7 +2609,7 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@^4.0.5: +form-data@^4.0.0, form-data@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== @@ -2412,11 +2625,6 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -2471,18 +2679,6 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -2619,12 +2815,27 @@ http-errors@^1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: - safer-buffer ">= 2.1.2 < 3" + ms "^2.0.0" + +iconv-lite@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" + integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" @@ -2636,15 +2847,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2662,35 +2865,16 @@ inquirer-press-to-continue@1.1.4: deep-equal "^2.0.5" ora "^6.1.0" -inquirer@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.0.0.tgz#957a46db1abcf0fdd2ab82deb7470e90afc7d0ac" - integrity sha512-ON8pEJPPCdyjxj+cxsYRe6XfCJepTxANdNnTebsTuQgXpRyZRRT9t4dJwjRubgmvn20CLSEnozRUayXyM9VTXA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.6" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -inquirer@^8.2.0: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== +inquirer@8.2.7, inquirer@^8.2.0: + version "8.2.7" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.7.tgz#62f6b931a9b7f8735dc42db927316d8fb6f71de8" + integrity sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA== dependencies: + "@inquirer/external-editor" "^1.0.0" ansi-escapes "^4.2.1" chalk "^4.1.1" cli-cursor "^3.1.0" cli-width "^3.0.0" - external-editor "^3.0.3" figures "^3.0.0" lodash "^4.17.21" mute-stream "0.0.8" @@ -2907,6 +3091,24 @@ jayson@^3.4.4: uuid "^8.3.2" ws "^7.4.5" +jayson@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.3.0.tgz#22eb8f3dcf37a5e893830e5451f32bde6d1bde4d" + integrity sha512-AauzHcUcqs8OBnCHOkJY280VaTiCm57AbuO7lqzcw7JapGj50BisE3xhksye4zlTSR1+1tAz67wLTl8tEH1obQ== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + stream-json "^1.9.1" + uuid "^8.3.2" + ws "^7.5.10" + js-sha256@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" @@ -2958,16 +3160,21 @@ lodash.isequal@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== -lodash@4.17.21, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash@4.18.0: + version "4.18.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.0.tgz#dfd726f07ab2e39dd763de28fcf66e395c03e440" + integrity sha512-l1mfj2atMqndAHI3ls7XqPxEjV2J9ZkcNyHpoZA3r2T1LLwDB69jgkMWh71YKwhBbK0G2f4WSn05ahmQXVxupA== lodash@^4.17.20: version "4.18.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -3037,14 +3244,14 @@ memoizee@0.3.x: next-tick "~0.2.2" timers-ext "0.1" -merkletreejs@^0.2.32: - version "0.2.32" - resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.32.tgz#cf1c0760e2904e4a1cc269108d6009459fd06223" - integrity sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ== +merkletreejs@^0.3.11: + version "0.3.11" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" + integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== dependencies: bignumber.js "^9.0.1" buffer-reverse "^1.0.1" - crypto-js "^3.1.9-1" + crypto-js "^4.2.0" treeify "^1.1.0" web3-utils "^1.3.4" @@ -3090,13 +3297,6 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimist@1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -3107,6 +3307,11 @@ minimist@^1.2.0, minimist@^1.2.3: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +mixme@^0.5.1: + version "0.5.10" + resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" + integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" @@ -3117,7 +3322,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.3: +ms@^2.0.0, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -3145,23 +3350,6 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -near-api-js@^0.44.2: - version "0.44.2" - resolved "https://registry.yarnpkg.com/near-api-js/-/near-api-js-0.44.2.tgz#e451f68f2c56bd885c7b918db5818a3e6e9423d0" - integrity sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg== - dependencies: - bn.js "5.2.0" - borsh "^0.6.0" - bs58 "^4.0.0" - depd "^2.0.0" - error-polyfill "^0.1.3" - http-errors "^1.7.2" - js-sha256 "^0.9.0" - mustache "^4.0.0" - node-fetch "^2.6.1" - text-encoding-utf-8 "^1.0.2" - tweetnacl "^1.0.1" - near-hd-key@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/near-hd-key/-/near-hd-key-1.2.1.tgz#f508ff15436cf8a439b543220f3cc72188a46756" @@ -3216,7 +3404,12 @@ node-addon-api@^3.0.2: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-fetch@2, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-fetch@2, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -3257,13 +3450,6 @@ number-to-bn@1.7.0: bn.js "4.11.6" strip-hex-prefix "1.0.0" -o3@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" - integrity sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ== - dependencies: - capability "^0.2.5" - object-inspect@^1.9.0: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" @@ -3292,7 +3478,7 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -3336,21 +3522,11 @@ ora@^6.1.0: strip-ansi "^7.0.1" wcwidth "^1.0.1" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - pako@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - pbkdf2@^3.0.9: version "3.1.5" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.5.tgz#444a59d7a259a95536c56e80c89de31cc01ed366" @@ -3391,11 +3567,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - proxy-from-env@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" @@ -3483,13 +3654,6 @@ retry@0.13.1: resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -3518,18 +3682,25 @@ rpc-websockets@^7.5.0: bufferutil "^4.0.1" utf-8-validate "^5.0.2" +rpc-websockets@^9.0.2: + version "9.3.10" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.3.10.tgz#d6f9b08edfac40e873a059b358806f6d58572e80" + integrity sha512-QT5PQ6LiWhA5RCS93oWwgxU4XzQltkYm8C3aTmmKEgj0HolGRo3VbdzELw7CEV35l9T7Amha8Vnr4rCfSjVP+w== + dependencies: + "@swc/helpers" "^0.5.11" + "@types/ws" "^8.2.2" + buffer "^6.0.3" + eventemitter3 "^5.0.1" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.1" + utf-8-validate "^6.0.0" + run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -rxjs@^6.6.6: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -3547,7 +3718,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3557,13 +3728,13 @@ scrypt-js@3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -secp256k1@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== +secp256k1@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-5.0.1.tgz#dc2c86187d48ff2da756f0f7e96417ee03c414b1" + integrity sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA== dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" + elliptic "^6.5.7" + node-addon-api "^5.0.0" node-gyp-build "^4.2.0" semver@^7.3.5: @@ -3609,15 +3780,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/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.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -sha.js@^2.4.12: +sha.js@^2.4.0, sha.js@^2.4.12: version "2.4.12" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== @@ -3626,6 +3789,14 @@ sha.js@^2.4.12: safe-buffer "^5.2.1" to-buffer "^1.2.0" +sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -3692,10 +3863,24 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" -stream-transform@^3.2.10: - version "3.2.10" - resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-3.2.10.tgz#1c59b9656d787de210ba17095933f5a88cb8e31b" - integrity sha512-Yu+x7zcWbWdyB0Td8dFzHt2JEyD6694CNq2lqh1rbuEBVxPtjb/GZ7xDnZcdYiU5E/RtufM54ClSEOzZDeWguA== +stream-chain@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" + integrity sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA== + +stream-json@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.9.1.tgz#e3fec03e984a503718946c170db7d74556c2a187" + integrity sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw== + dependencies: + stream-chain "^2.2.5" + +stream-transform@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" + integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== + dependencies: + mixme "^0.5.1" string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" @@ -3756,6 +3941,11 @@ superstruct@^0.15.4: resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== +superstruct@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-2.0.2.tgz#3f6d32fbdc11c357deff127d591a39b996300c54" + integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== + supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -3764,9 +3954,9 @@ supports-color@^7.1.0: has-flag "^4.0.0" tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" + integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== dependencies: chownr "^1.1.1" mkdirp-classic "^0.5.2" @@ -3809,21 +3999,12 @@ tmp-promise@^3.0.2: dependencies: tmp "^0.2.0" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmp@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== -to-buffer@^1.2.0, to-buffer@^1.2.1: +to-buffer@^1.2.0, to-buffer@^1.2.1, to-buffer@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== @@ -3883,16 +4064,16 @@ tslib@2.5.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.0.3, tslib@^2.1.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -3941,16 +4122,16 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typescript-collections@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/typescript-collections/-/typescript-collections-1.3.3.tgz#62d50d93c018c094d425eabee649f00ec5cc0fea" + integrity sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ== + typescript@4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -u3@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" - integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== - undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" @@ -3975,6 +4156,13 @@ utf-8-validate@^5.0.2: dependencies: node-gyp-build "^4.3.0" +utf-8-validate@^6.0.0: + version "6.0.6" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.6.tgz#8a842c9b15af3f6323a3d5ed5eb9e61d208d8c22" + integrity sha512-q3l3P9UtEEiAHcsgsqTgf9PPjctrDWoIXW3NpOHFdRDbLvu4DLIcxHangJ4RLrWkBcKjmcs/6NkerI8T/rE4LA== + dependencies: + node-gyp-build "^4.3.0" + utf8@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" @@ -4117,15 +4305,15 @@ ws@8.18.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== -ws@^7.4.5: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^7.4.5, ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.5.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + version "8.20.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.1.tgz#91a9ae2b312ccf98e0a85ec499b48cef45ab0ddb" + integrity sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w== xdg-basedir@^5.0.1: version "5.1.0" From c663b1bb390648d83ba7e391e6f512865095dbd7 Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 13:42:51 -0400 Subject: [PATCH 06/10] fix(improvements): dedupes and consolidation --- src/lib/api.ts | 10 +- src/lib/menu.ts | 273 +++++++++++++++++++----------------------------- 2 files changed, 116 insertions(+), 167 deletions(-) diff --git a/src/lib/api.ts b/src/lib/api.ts index d09d8f3..4f194f2 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -86,6 +86,13 @@ class API{ getSquadExtended = async (ms: PublicKey) => { return this.squads.getMultisig(ms); }; + + getAuthority = async (msPDA: PublicKey, authorityIndex: number = 1): Promise => { + const [pda] = await getAuthorityPDA(msPDA, new BN(authorityIndex), this.programId); + return pda; + }; + + getVault = (msPDA: PublicKey): Promise => this.getAuthority(msPDA, 1); getSquads = async (pubkey: PublicKey) => { const allSquads = await this.program.account.ms.all(); @@ -117,8 +124,7 @@ class API{ const tx = await this.squads.createMultisig(threshold,createKey,members); // try to fund the PDA try { - const msPDA = tx.publicKey; - const [vault] = await getAuthorityPDA(msPDA, new BN(1), this.programId); + const vault = await this.getVault(tx.publicKey); const fundIx = anchor.web3.SystemProgram.transfer({ fromPubkey: this.wallet.publicKey, toPubkey: vault, diff --git a/src/lib/menu.ts b/src/lib/menu.ts index 577c60d..1b39090 100644 --- a/src/lib/menu.ts +++ b/src/lib/menu.ts @@ -8,7 +8,7 @@ import "console.table"; import * as fs from 'fs'; import path from 'path'; -import { getAuthorityPDA, DEFAULT_MULTISIG_PROGRAM_ID, DEFAULT_PROGRAM_MANAGER_PROGRAM_ID, getIxPDA } from '@sqds/sdk'; +import { DEFAULT_MULTISIG_PROGRAM_ID, DEFAULT_PROGRAM_MANAGER_PROGRAM_ID, getIxPDA } from '@sqds/sdk'; import { TXMETA_PROGRAM_ID } from './constants.js'; import BN from 'bn.js'; import {ComputeBudgetProgram, PublicKey, Transaction} from '@solana/web3.js'; @@ -123,7 +123,7 @@ class Menu{ multisigList = async () => { const loadAuthorities = async (ms: any[]) => { return Promise.all(ms.map(async (msObj,i) => { - const [mAuth] = await getAuthorityPDA(msObj.publicKey, new BN(1), this.api.programId); + const mAuth = await this.api.getVault(msObj.publicKey); return { value: i, name: `${mAuth.toBase58()} (${shortenTextEnd(msObj.publicKey.toBase58(),6)})`, @@ -159,7 +159,7 @@ class Menu{ }; multisig = async (ms: any) => { - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); console.log("Info"); console.log("-----------------------------------------------------------"); @@ -171,7 +171,7 @@ class Menu{ // load vault assets let status = new Spinner("Loading vault"); status.start(); - const [vaultPDA] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vaultPDA = await this.api.getVault(ms.publicKey); const vault = await this.api.getVaultAssets(vaultPDA); status.stop(); this.vault(ms,vaultPDA, vault); @@ -207,7 +207,7 @@ class Menu{ }; transactions = async (txs: any[], ms: any) => { - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {action} = await transactionsMenu(txs, this.wallet.publicKey); if(action === "<- Go back") { @@ -230,8 +230,7 @@ class Menu{ if(assemble.indexOf("Assemble") == 0){ const {authority} = await createTransactionInq(); - const authorityBN = new BN(authority, 10); - const [authorityPDA] = await getAuthorityPDA(ms.publicKey, authorityBN, this.api.programId); + const authorityPDA = await this.api.getAuthority(ms.publicKey, parseInt(authority, 10)); const status = new Spinner("Creating transaction..."); console.log("This will create a new transaction draft for authority " + chalk.blue(authorityPDA.toBase58())); @@ -250,8 +249,7 @@ class Menu{ } }else if(assemble.indexOf("Enter") == 0) { const {authority} = await createTransactionInq(); - const authorityBN = new BN(authority, 10); - const [authorityPDA] = await getAuthorityPDA(ms.publicKey, authorityBN, this.api.programId); + const authorityPDA = await this.api.getAuthority(ms.publicKey, parseInt(authority, 10)); const {rawIx} = await addTransactionInq(); if (rawIx.length > 1) { @@ -305,10 +303,39 @@ class Menu{ } }; + // Run a confirm → spinner → api call → splice-and-recurse flow for tx status changes + // (approve/activate/reject/cancel). Errors and the "no" path both recurse with the original tx. + private runTxAction = async ( + tx: any, ms: any, txs: any[], + apiFn: (txPubkey: PublicKey) => Promise, + msgs: { confirm: string; spinner: string; success: string }, + ) => { + const {yes} = await basicConfirm(msgs.confirm, false); + if (!yes) { + return this.transaction(tx, ms, txs); + } + const status = new Spinner(msgs.spinner); + status.start(); + try { + const updatedTx = await apiFn(tx.publicKey); + status.stop(); + const newInd = txs.findIndex(t => t.publicKey.toBase58() === updatedTx.publicKey.toBase58()); + txs.splice(newInd, 1, updatedTx); + console.log(msgs.success); + await continueInq(); + this.transaction(updatedTx, ms, txs); + } catch(e) { + status.stop(); + console.log("Error!", e); + await continueInq(); + this.transaction(tx, ms, txs); + } + }; + transaction = async (tx: any, ms: any, txs: any[]) => { - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); - const [authority] = await getAuthorityPDA(ms.publicKey, new BN(tx.authorityIndex,10), this.api.programId); + const authority = await this.api.getAuthority(ms.publicKey, parseInt(tx.authorityIndex, 10)); const txData = [ { status: Object.keys(tx.status)[0], @@ -330,27 +357,11 @@ class Menu{ if(action === "<- Go back") { this.transactions(txs, ms); }else if (action === "Approve") { - const {yes} = await basicConfirm(`Approve this transaction?`,false); - if (yes) { - const status = new Spinner("Approving transaction..."); - status.start(); - try { - const updatedTx = await this.api.approveTransaction(tx.publicKey); - status.stop(); - const newInd = txs.findIndex(t => t.publicKey.toBase58() === updatedTx.publicKey.toBase58()); - txs.splice(newInd, 1, updatedTx); - console.log("Transaction approved"); - await continueInq(); - this.transaction(updatedTx, ms, txs); - }catch(e){ - status.stop(); - console.log("Error!", e); - await continueInq(); - this.transaction(tx, ms, txs); - } - }else{ - this.transaction(tx, ms, txs); - } + await this.runTxAction(tx, ms, txs, t => this.api.approveTransaction(t), { + confirm: "Approve this transaction?", + spinner: "Approving transaction...", + success: "Transaction approved", + }); }else if (action === "Execute") { const {yes} = await basicConfirm(`Execute this transaction?`,false); if (yes) { @@ -459,73 +470,25 @@ class Menu{ } } else if (action === "Activate") { - const {yes} = await basicConfirm(`Activate this transaction?`,false); - if (yes) { - const status = new Spinner("Activating transaction..."); - status.start(); - try { - const updatedTx = await this.api.activate(tx.publicKey); - status.stop(); - const newInd = txs.findIndex(t => t.publicKey.toBase58() === updatedTx.publicKey.toBase58()); - txs.splice(newInd, 1, updatedTx); - console.log("Activated Transaction"); - await continueInq(); - this.transaction(updatedTx, ms, txs); - }catch(e){ - status.stop(); - console.log("Error!", e); - await continueInq(); - this.transaction(tx, ms, txs); - } - }else{ - this.transaction(tx, ms, txs); - } + await this.runTxAction(tx, ms, txs, t => this.api.activate(t), { + confirm: "Activate this transaction?", + spinner: "Activating transaction...", + success: "Activated Transaction", + }); } else if (action === "Reject") { - const {yes} = await basicConfirm(`Reject this transaction?`,false); - if (yes) { - const status = new Spinner("Rejecting transaction..."); - status.start(); - try { - const updatedTx = await this.api.rejectTransaction(tx.publicKey); - status.stop(); - const newInd = txs.findIndex(t => t.publicKey.toBase58() === updatedTx.publicKey.toBase58()); - txs.splice(newInd, 1, updatedTx); - console.log("Transaction rejected"); - await continueInq(); - this.transaction(updatedTx, ms, txs); - }catch(e){ - status.stop(); - console.log("Error!", e); - await continueInq(); - this.transaction(tx, ms, txs); - } - }else{ - this.transaction(tx, ms, txs); - } + await this.runTxAction(tx, ms, txs, t => this.api.rejectTransaction(t), { + confirm: "Reject this transaction?", + spinner: "Rejecting transaction...", + success: "Transaction rejected", + }); } else if (action === "Submit to cancel") { - const {yes} = await basicConfirm(`Cancel this transaction?`,false); - if (yes) { - const status = new Spinner("Cancelling transaction..."); - status.start(); - try { - const updatedTx = await this.api.cancelTransaction(tx.publicKey); - status.stop(); - const newInd = txs.findIndex(t => t.publicKey.toBase58() === updatedTx.publicKey.toBase58()); - txs.splice(newInd, 1, updatedTx); - console.log("Transaction cancel submitted"); - await continueInq(); - this.transaction(updatedTx, ms, txs); - }catch(e){ - status.stop(); - console.log("Error!", e); - await continueInq(); - this.transaction(tx, ms, txs); - } - }else{ - this.transaction(tx, ms, txs); - } + await this.runTxAction(tx, ms, txs, t => this.api.cancelTransaction(t), { + confirm: "Cancel this transaction?", + spinner: "Cancelling transaction...", + success: "Transaction cancel submitted", + }); } else{ this.transaction(tx, ms, txs); @@ -545,7 +508,7 @@ class Menu{ } settings = async (ms: any) => { - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1,10), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const owners = ms.keys.map((m: PublicKey) => { return m.toBase58(); @@ -685,7 +648,7 @@ class Menu{ program = async (ms: any) => { this.header(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); const {programId} = await promptProgramId(); if (programId.length < 1) { this.multisig(ms); @@ -697,11 +660,18 @@ class Menu{ chalk.blue("Current program data authority: " + programAuthority); status.stop(); if (programAuthority === this.wallet.publicKey.toBase58()) { - this.programAuthority(ms, programAuthority, programId); - } - if (programAuthority === vault.toBase58()) { - this.programAuthorityOut(ms, programAuthority, programId); - }else{ + this.programAuthorityChange(ms, programAuthority, programId, { + key: vault, + label: "Vault - authority index 1", + direction: "to", + }); + } else if (programAuthority === vault.toBase58()) { + this.programAuthorityChange(ms, programAuthority, programId, { + key: this.wallet.publicKey, + label: "Your connected wallet", + direction: "out of", + }); + } else { await inquirer.prompt({default: false, name: 'action', type: 'input', message: `Neither the connected wallet nor this Squad have authority over this program - Enter to continue`}); this.program(ms); } @@ -715,67 +685,40 @@ class Menu{ } } - programAuthority = async (ms: any, currentAuthority: PublicKey, programId: string) => { - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + private programAuthorityChange = async ( + ms: any, + currentAuthority: PublicKey, + programId: string, + destination: { key: PublicKey; label: string; direction: "to" | "out of" }, + ) => { + const vault = await this.api.getVault(ms.publicKey); this.header(vault); - console.log(`This will create a safe upgrade authority transfer transaction of ${programId} to the Squad vault`); + console.log(`This will create a safe upgrade authority transfer transaction of ${programId} ${destination.direction} the Squad vault`); console.log("Program Address: " + chalk.blue(`${programId}`)); console.log(`Multisig Address: ` + chalk.white(`${ms.publicKey.toBase58()}`)); console.log(`Current Program Authority: ` + chalk.white(`${currentAuthority}`)); - console.log(`New Program Upgrade Authority: ` + chalk.green(vault.toBase58()) + chalk.white(` (Vault - authority index 1)`)); + console.log(`New Program Upgrade Authority: ` + chalk.green(destination.key.toBase58()) + chalk.white(` (${destination.label})`)); const {action} = await inquirer.prompt({default: false, name: 'action', type: 'confirm', message: `Continue?`}); - if (action) { - const status = new Spinner('Creating transaction...'); - status.start(); - try { - const tx = await this.api.createSafeAuthorityTx(ms.publicKey, new PublicKey(programId), new PublicKey(currentAuthority), vault); - status.stop(); - console.log(chalk.green("Transaction created!")); - console.log(chalk.blue("Transaction ID: ") + chalk.white(tx)); - await continueInq(); - this.multisig(ms); - }catch(e){ - console.log(e); - status.stop(); - console.log(`Transaction creation failed - Enter to continue`); - await continueInq(); - this.program(ms); - } - }else{ - this.program(ms); + if (!action) { + return this.program(ms); } - } - - programAuthorityOut = async (ms: any, currentAuthority: PublicKey, programId: string) => { - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); - this.header(vault); - console.log(`This will create a safe upgrade authority transfer transaction of ${programId} out of the Squad vault`); - console.log("Program Address: " + chalk.blue(`${programId}`)); - console.log(`Multisig Address: ` + chalk.white(`${ms.publicKey.toBase58()}`)); - console.log(`Current Program Authority: ` + chalk.white(`${currentAuthority}`)); - console.log(`New Program Upgrade Authority: ` + chalk.green(this.wallet.publicKey.toBase58()) + chalk.white(` (Your connected wallet)`)); - const {action} = await inquirer.prompt({default: false, name: 'action', type: 'confirm', message: `Continue?`}); - if (action) { - const status = new Spinner('Creating transaction...'); - status.start(); - try { - const tx = await this.api.createSafeAuthorityTx(ms.publicKey, new PublicKey(programId), new PublicKey(currentAuthority), this.wallet.publicKey); - status.stop(); - console.log(chalk.green("Transaction created!")); - console.log(chalk.blue("Transaction ID: ") + chalk.white(tx)); - await continueInq(); - this.multisig(ms); - }catch(e){ - console.log(e); - status.stop(); - console.log(`Transaction creation failed - Enter to continue`); - await continueInq(); - this.program(ms); - } - }else{ + const status = new Spinner('Creating transaction...'); + status.start(); + try { + const tx = await this.api.createSafeAuthorityTx(ms.publicKey, new PublicKey(programId), new PublicKey(currentAuthority), destination.key); + status.stop(); + console.log(chalk.green("Transaction created!")); + console.log(chalk.blue("Transaction ID: ") + chalk.white(tx)); + await continueInq(); + this.multisig(ms); + } catch(e) { + console.log(e); + status.stop(); + console.log(`Transaction creation failed - Enter to continue`); + await continueInq(); this.program(ms); } - } + }; create = async () => { this.header(); @@ -828,7 +771,7 @@ class Menu{ ata = async (ms: any) => { clear(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const ataKeys = await createATAInq(vault); if(ataKeys){ @@ -853,7 +796,7 @@ class Menu{ nfts = async (ms: any) => { clear(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {action} = await nftMainInq(); if (action === 0) { @@ -869,7 +812,7 @@ class Menu{ validator = async (ms: any) => { clear() - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {action} = await validatorMainInq(); if (action === 0) { @@ -881,7 +824,7 @@ class Menu{ validatorWithdrawAuthorityChange = async (ms: any) => { clear(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {validatorId} = await validatorWithdrawAuthPrompt(); if (validatorId.length < 1) { @@ -916,7 +859,7 @@ class Menu{ } transferWithdrawAuthorityOut = async (ms: any, withdrawAuthority: string, validatorId: string, destination: string) => { - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); console.log(`This will create a transaction for the transfer of the validator (${validatorId}) withdraw authority out of the Squad vault`); console.log("Validator Address: " + chalk.blue(`${validatorId}`)); @@ -947,7 +890,7 @@ class Menu{ nftAuthorityChange = async (ms: any) => { clear(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {type, publicKey, mintList} = await nftUpdateAuthorityInq(); let newAuthority = vault; @@ -991,7 +934,7 @@ class Menu{ // this can simply be transferred to the vault directly with metaplex program nftAuthorityChangeIncoming = async (ms: any, mintList: PublicKey[], newAuthority: PublicKey) => { clear(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {validate} = await nftValidateMetasInq(); let error = false; @@ -1083,7 +1026,7 @@ class Menu{ // to move the authority out, transaction will need to be created nftAuthorityChangeOutgoing = async (ms: any, mintList: PublicKey[], newAuthority: PublicKey) => { clear(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); let error = false; const {ownerValidate} = await nftValidateOwnerInq(); @@ -1175,7 +1118,7 @@ class Menu{ nftValidateMetaAuthorities = async (ms: any) => { clear(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); let error = false; console.log("This process will check that all the provided mints specified have the proper matching metadata account update authority, and also possess valid metadata accounts."); @@ -1221,7 +1164,7 @@ class Menu{ nftBatchTransfer = async (ms: any) => { clear(); - const [vault] = await getAuthorityPDA(ms.publicKey, new BN(1), this.api.programId); + const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {mintList} = await nftMintListInq(); if (mintList && mintList.length > 0) { From 500feb4de6f26b5e7dfc07c24180e84f4721b660 Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 16:12:11 -0400 Subject: [PATCH 07/10] fix(cleanup): further consolidation, types --- .eslintrc.json | 25 + package.json | 9 +- src/index.ts | 32 +- src/lib/api.ts | 96 ++-- src/lib/connection.ts | 16 +- src/lib/inq/cluster.js | 47 +- src/lib/inq/createThreshold.js | 38 +- src/lib/menu.ts | 176 ++++---- src/lib/nfts.ts | 233 ++-------- src/lib/program.ts | 6 +- src/lib/utils.ts | 9 +- src/lib/wallet.ts | 27 +- src/types.ts | 48 ++ yarn.lock | 801 ++++++++++++++++++++++++++++++++- 14 files changed, 1171 insertions(+), 392 deletions(-) create mode 100644 .eslintrc.json create mode 100644 src/types.ts diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..5694b60 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json", + "sourceType": "module", + "ecmaVersion": 2021 + }, + "plugins": ["@typescript-eslint"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-unused-vars": ["warn", { "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" }], + "@typescript-eslint/no-floating-promises": "warn", + "@typescript-eslint/no-misused-promises": "warn", + "@typescript-eslint/await-thenable": "error", + "no-empty": ["warn", { "allowEmptyCatch": true }], + "no-constant-condition": ["warn", { "checkLoops": false }], + "prefer-const": "warn" + }, + "ignorePatterns": ["bin/", "node_modules/", "src/squads_mpl.json", "src/lib/inq/**/*.js"] +} diff --git a/package.json b/package.json index 38009b9..f971456 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,14 @@ "description": "", "main": "bin/index.js", "scripts": { + "build": "tsc", + "typecheck": "tsc --noEmit", + "lint": "eslint 'src/**/*.ts'", "test": "echo \"Error: no test specified\" && exit 1" }, "author": { "name": "Sean Ganser", - "email": "sean.ganser@gmail.com", - "url": "https://github.com/ogmedia" + "email": "sean@sqds.io" }, "keywords": [ "solana", @@ -75,6 +77,9 @@ "@types/inquirer": "9.0.3", "@types/node": "18.14.6", "@types/yargs": "17.0.22", + "@typescript-eslint/eslint-plugin": "6.21.0", + "@typescript-eslint/parser": "6.21.0", + "eslint": "8.57.0", "ts-node": "10.9.1" }, "resolutions": { diff --git a/src/index.ts b/src/index.ts index 0cf365d..8ba8284 100755 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,8 @@ #!/usr/bin/env node import clear from 'clear'; import chalk from 'chalk'; +import { readFileSync } from 'fs'; +import { join } from 'path'; import Menu from "./lib/menu.js"; import CliWallet from './lib/wallet.js'; @@ -11,7 +13,11 @@ import yargs from 'yargs'; import {hideBin} from 'yargs/helpers' import {parseLedgerWallet} from "@marinade.finance/ledger-utils"; -const VERSION = "2.1.3"; +// Read package.json at runtime so --version stays in sync with the published +// package. __dirname points at the compiled bin/ directory, so ../package.json +// resolves whether installed globally (node_modules/@sqds/cli) or run from src. +const pkg = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf8")) as { version: string }; +const VERSION = pkg.version; const argv = yargs(hideBin(process.argv)).options({ cluster: { type: 'string'}, @@ -30,8 +36,13 @@ const load = async ( clear(); console.log(chalk.yellow('Starting Squads CLI...') + " Follow the prompts to get started") const {walletPath} = await SetupWallet(); - const ledgerWallet = await parseLedgerWallet(walletPath) - const cliWallet = new CliWallet(walletPath, ledgerWallet, computeUnitPrice); + // parseLedgerWallet matches only the literal "usb://ledger" prefix; normalize + // case so "USB://Ledger" etc. is also detected as a ledger URL. + const normalizedWalletPath = walletPath.toLowerCase().startsWith("usb://ledger") + ? "usb://ledger" + walletPath.slice("usb://ledger".length) + : walletPath; + const ledgerWallet = await parseLedgerWallet(normalizedWalletPath); + const cliWallet = new CliWallet(normalizedWalletPath, ledgerWallet, computeUnitPrice); let cliConnection; if(!initCluster){ const {cluster} = await SetupCluster(); @@ -72,6 +83,21 @@ if (typeof argv.computeUnitPrice == "number") { computeUnitPrice = argv.computeUnitPrice; } +// Graceful exit on Ctrl+C — inquirer 8 throws ExitPromptError on SIGINT which +// otherwise surfaces as an ugly unhandled rejection. +process.on("SIGINT", () => { + console.log(chalk.blue("\nGoodbye!")); + process.exit(0); +}); +process.on("unhandledRejection", (reason) => { + const msg = reason instanceof Error ? reason.message : String(reason); + if (/ExitPromptError|force closed the prompt/i.test(msg)) { + process.exit(0); + } + console.error(chalk.red("\nUnexpected error:"), reason); + process.exit(1); +}); + if (argv.help){ help(); }else if (argv.version || argv.v){ diff --git a/src/lib/api.ts b/src/lib/api.ts index 4f194f2..5350c2f 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1,4 +1,3 @@ -import axios from "axios"; import Squads, { getTxPDA, getAuthorityPDA } from "@sqds/sdk"; import * as anchor from "@coral-xyz/anchor"; import BN from "bn.js"; @@ -8,10 +7,13 @@ import {getAssociatedTokenAddress,createAssociatedTokenAccountInstruction} from import {idl} from "../info"; import { ASSOCIATED_TOKEN_PROGRAM_ID } from "@solana/spl-token"; import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import { Wallet } from "@coral-xyz/anchor"; import {Connection, LAMPORTS_PER_SOL, PublicKey, VoteProgram} from "@solana/web3.js"; +import type CliConnection from "./connection.js"; +import type { AnchorWallet, MultisigAccount, SquadsTxBuilder, TransactionAccount } from "../types.js"; -type SquadsTxBuilder = Awaited>; +// Minimal shape we need from program.account.ms.all() — the IDL is cast to +// the generic Idl type so anchor types account data as `unknown`. +type MsProgramAccount = { publicKey: PublicKey; account: { keys: PublicKey[] } }; class API{ squads; @@ -22,7 +24,7 @@ class API{ program; provider; programManagerId: PublicKey; - constructor(wallet: Wallet, connection: any, programId: PublicKey, programManagerId: PublicKey){ + constructor(wallet: AnchorWallet, connection: CliConnection, programId: PublicKey, programManagerId: PublicKey){ this.programId = programId; this.programManagerId = programManagerId; this.squads = Squads.endpoint(connection.cluster, wallet, {commitmentOrConfig: "confirmed", multisigProgramId: this.programId, programManagerProgramId: this.programManagerId}); @@ -74,7 +76,7 @@ class API{ // Creates, adds, activates, and approves the multisig tx in one Solana tx. private submitAsMultisigTx = async (msPDA: PublicKey, innerIx: anchor.web3.TransactionInstruction): Promise => { const nextTxIndex = await this.squads.getNextTransactionIndex(msPDA); - const [txPDA] = await getTxPDA(msPDA, new BN(nextTxIndex), this.programId); + const [txPDA] = getTxPDA(msPDA, new BN(nextTxIndex), this.programId); const createTxIx = await this.squads.buildCreateTransaction(msPDA, 1, nextTxIndex); const addIx = await this.squads.buildAddInstruction(msPDA, txPDA, innerIx, 1); const activateIx = await this.squads.buildActivateTransaction(msPDA, txPDA); @@ -88,41 +90,37 @@ class API{ }; getAuthority = async (msPDA: PublicKey, authorityIndex: number = 1): Promise => { - const [pda] = await getAuthorityPDA(msPDA, new BN(authorityIndex), this.programId); + const [pda] = getAuthorityPDA(msPDA, new BN(authorityIndex), this.programId); return pda; }; getVault = (msPDA: PublicKey): Promise => this.getAuthority(msPDA, 1); - getSquads = async (pubkey: PublicKey) => { - const allSquads = await this.program.account.ms.all(); - const mySquads = allSquads.filter((s:any) => { - const mappedKeys = s.account.keys.map((k: PublicKey) => k.toBase58()); - if (mappedKeys.indexOf(this.wallet.publicKey.toBase58()) >= 0){ - return true; - } - return false; - }).map(s => s.publicKey); + getSquads = async (_pubkey: PublicKey) => { + const allSquads = await this.program.account.ms.all() as MsProgramAccount[]; + const mySquads = allSquads + .filter((s) => s.account.keys.some((k) => k.equals(this.wallet.publicKey))) + .map((s) => s.publicKey); return Promise.all(mySquads.map(k => this.getSquadExtended(k))); }; - - getChainSquads = async (pubkey: PublicKey) => { - - } - getTransactions = async (ms: any) => { + getTransactions = async (ms: MultisigAccount): Promise => { const txIndex = ms.transactionIndex; - const txsPDA = [...new Array(txIndex)].map( (_, i) => { - const ind = new BN(i+1); - const [txPDA] = getTxPDA(ms.publicKey, ind, this.programId); + const txsPDA = [...new Array(txIndex)].map((_, i) => { + const ind = new BN(i + 1); + const [txPDA] = getTxPDA(ms.publicKey, ind, this.programId); return txPDA; - }) - return this.squads.getTransactions(txsPDA) + }); + const results = await this.squads.getTransactions(txsPDA); + return results.filter((t): t is TransactionAccount => t !== null); } - createMultisig = async (threshold: number, createKey: PublicKey,members: PublicKey[]) => { - const tx = await this.squads.createMultisig(threshold,createKey,members); - // try to fund the PDA + createMultisig = async (threshold: number, createKey: PublicKey, members: PublicKey[]) => { + // The multisig is created on-chain by the SDK call below. After that succeeds the + // CLI sends a small SOL transfer to seed the vault. If that funding step fails we + // still return the created multisig — re-throwing would make the user think the + // whole creation failed and leave an orphan multisig they don't know exists. + const tx = await this.squads.createMultisig(threshold, createKey, members); try { const vault = await this.getVault(tx.publicKey); const fundIx = anchor.web3.SystemProgram.transfer({ @@ -131,10 +129,10 @@ class API{ lamports: anchor.web3.LAMPORTS_PER_SOL / 1000, }); await this.sendAndConfirm([fundIx]); - }catch (e){ - console.log("Error funding vault", e); - throw e; - // couldn't fund + } catch (e) { + console.log(`\nWarning: multisig was created at ${tx.publicKey.toBase58()}, but the initial vault funding (~0.001 SOL) failed.`); + console.log(`You may want to manually send a small amount of SOL to the vault to cover rent for future transactions.`); + console.log(`Funding error:`, e); } return tx; }; @@ -154,15 +152,15 @@ class API{ }; getValidatorWithdrawAuth = async (validatorAddress: anchor.web3.PublicKey) => { try { - const parsedAccount = await this.connection.getParsedAccountInfo(validatorAddress) as any - const parsed = this.getParsed(parsedAccount) + const parsedAccount = await this.connection.getParsedAccountInfo(validatorAddress); + const parsed = this.getParsed(parsedAccount); if (parsed && parsed.type === "vote") { - return parsed.info.authorizedWithdrawer + return parsed.info.authorizedWithdrawer; } - } catch (e) { - return null + } catch (_e) { + return null; } - return null + return null; } createTransferWithdrawAuthTx = (msPDA: PublicKey, validatorId: PublicKey, currentAuthority: PublicKey, newAuthorizedPubkey: PublicKey) => { @@ -180,14 +178,6 @@ class API{ return this.submitAsMultisigTx(msPDA, ix); }; - executeTransaction = async (tx: PublicKey) => { - return this.squads.executeTransaction(tx); - }; - - executeInstruction = async (tx: PublicKey, ix: PublicKey) => { - return this.squads.executeInstruction(tx, ix); - }; - executeTransactionBuilder = async (tx: PublicKey) => { return this.squads.buildExecuteTransaction(tx); }; @@ -238,6 +228,7 @@ class API{ return getAssets(this.connection, vaultPDA); } + private balanceErrorLogged = false; async getWalletBalance(cb?: (balance: number) => void) { try { const lamports = await this.connection.getBalance(this.wallet.publicKey, "processed"); @@ -246,14 +237,19 @@ class API{ cb(SOL); } return SOL; - }catch(e){ + } catch (e) { + if (!this.balanceErrorLogged) { + this.balanceErrorLogged = true; + console.log(`\nWarning: could not fetch wallet balance from RPC. Displayed balance may be inaccurate.`); + console.log(`Error:`, e); + } return 0; } } async createATA(mint: PublicKey, owner: PublicKey){ - const ataPubkey = await getAssociatedTokenAddress(mint,owner,true,TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID) - const createATAIx = await createAssociatedTokenAccountInstruction( + const ataPubkey = await getAssociatedTokenAddress(mint,owner,true,TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID); + const createATAIx = createAssociatedTokenAccountInstruction( this.wallet.publicKey, ataPubkey, owner, @@ -262,7 +258,7 @@ class API{ ASSOCIATED_TOKEN_PROGRAM_ID, ); - await this.sendAndConfirm([createATAIx], { confirm: false }); + await this.sendAndConfirm([createATAIx]); return ataPubkey; } } diff --git a/src/lib/connection.ts b/src/lib/connection.ts index 997a5a5..1711891 100644 --- a/src/lib/connection.ts +++ b/src/lib/connection.ts @@ -1,32 +1,28 @@ import {web3} from "@coral-xyz/anchor"; class CliConnection { - connection; - cluster; - constructor(hostUrl?: string | undefined){ - let cluster; + connection: web3.Connection; + cluster: string; + constructor(hostUrl?: string){ + let cluster: string | undefined; if (hostUrl === "localnet"){ cluster = "http://127.0.0.1:8899"; } else if (hostUrl === "devnet"){ cluster = "https://api.devnet.solana.com"; } - else if (hostUrl === null || hostUrl === "mainnet" || hostUrl === "mainnet-beta"){ - cluster = "https://api.mainnet-beta.solana.com"; - } - else if (hostUrl === ""){ + else if (hostUrl == null || hostUrl === "mainnet" || hostUrl === "mainnet-beta" || hostUrl === ""){ cluster = "https://api.mainnet-beta.solana.com"; } else { cluster = hostUrl; } - this.cluster = cluster; if (!cluster){ throw new Error("Invalid cluster provided"); } + this.cluster = cluster; this.connection = new web3.Connection(cluster); } - } export default CliConnection; \ No newline at end of file diff --git a/src/lib/inq/cluster.js b/src/lib/inq/cluster.js index c89e69a..693ab86 100644 --- a/src/lib/inq/cluster.js +++ b/src/lib/inq/cluster.js @@ -1,12 +1,45 @@ import inquirer from "inquirer"; -export default () => { - const questions = [ +const PRESETS = [ + { name: "mainnet-beta", value: "mainnet-beta" }, + { name: "devnet", value: "devnet" }, + { name: "localnet (http://127.0.0.1:8899)", value: "localnet" }, + { name: "Custom RPC URL...", value: "__custom__" }, +]; + +const validateRpcUrl = (value) => { + if (!value || value.length === 0) return 'Please enter an RPC URL'; + try { + const u = new URL(value); + if (u.protocol !== 'http:' && u.protocol !== 'https:') { + return 'URL must use http:// or https://'; + } + return true; + } catch { + return 'Please enter a valid URL'; + } +}; + +export default async () => { + const { choice } = await inquirer.prompt([ + { + name: 'choice', + type: 'list', + message: 'Choose a Solana cluster:', + choices: PRESETS, + default: 'mainnet-beta', + }, + ]); + if (choice !== "__custom__") { + return { cluster: choice }; + } + const { cluster } = await inquirer.prompt([ { name: 'cluster', type: 'input', - message: 'Enter the rpc cluster to use (or enter for mainnet-beta):', - } - ]; - return inquirer.prompt(questions); - }; \ No newline at end of file + message: 'Enter the RPC URL:', + validate: validateRpcUrl, + }, + ]); + return { cluster }; +}; diff --git a/src/lib/inq/createThreshold.js b/src/lib/inq/createThreshold.js index d13ae15..b65d2d2 100644 --- a/src/lib/inq/createThreshold.js +++ b/src/lib/inq/createThreshold.js @@ -1,24 +1,22 @@ import inquirer from "inquirer"; -export default (numMembers) => { -const questions = [ - { - name: 'threshold', - type: 'number', - default: 1, - message: 'Enter the multisig threshold (or enter for default of 1):', - validate: function( value, answers ) { - if (value > 0 && value <= numMembers) { - try { - return true; - } catch { - return 'Invalid threshold - must be between 1 and number of members'; - } - }else{ - return true; - } - } - } +export default (numMembers) => { + const questions = [ + { + name: 'threshold', + type: 'number', + default: 1, + message: `Enter the multisig threshold (must be between 1 and ${numMembers}, default 1):`, + validate: function (value) { + if (typeof value !== 'number' || Number.isNaN(value)) { + return 'Threshold must be a number'; + } + if (value < 1 || value > numMembers) { + return `Threshold must be between 1 and ${numMembers}`; + } + return true; + }, + }, ]; return inquirer.prompt(questions); -}; \ No newline at end of file +}; diff --git a/src/lib/menu.ts b/src/lib/menu.ts index 1b39090..57b85cc 100644 --- a/src/lib/menu.ts +++ b/src/lib/menu.ts @@ -10,13 +10,11 @@ import path from 'path'; import { DEFAULT_MULTISIG_PROGRAM_ID, DEFAULT_PROGRAM_MANAGER_PROGRAM_ID, getIxPDA } from '@sqds/sdk'; import { TXMETA_PROGRAM_ID } from './constants.js'; -import BN from 'bn.js'; import {ComputeBudgetProgram, PublicKey, Transaction} from '@solana/web3.js'; import { mainMenu, viewMultisigsMenu, multisigMainMenu, - vaultMenu, multisigSettingsMenu, transactionsMenu, createMultisigCreateKeyInq, @@ -47,6 +45,9 @@ import { } from "./inq/index.js"; import API from "./api.js"; +import type CliWallet from "./wallet.js"; +import type CliConnection from "./connection.js"; +import type { MultisigAccount, TransactionAccount, AssetBundle } from "../types.js"; import { shortenTextEnd } from './utils.js'; import { @@ -65,43 +66,35 @@ import {nftWithdrawConfirmInq} from "./inq/nftMenu"; import {validatorMainInq, validatorWithdrawAuthDestPrompt, validatorWithdrawAuthPrompt} from "./inq/validatorMenu"; const Spinner = CLI.Spinner; -const Progress = CLI.Progress; + +// Compute-unit limit attached to each execute-instruction tx. Set to the +// per-tx maximum because some multisig-wrapped instructions (program upgrade +// authority changes, large CPI calls) can hit the default 200k budget. +const EXECUTE_IX_COMPUTE_UNIT_LIMIT = 1_400_000; class Menu{ programId: PublicKey; programManagerId: PublicKey; txMetaProgramId: PublicKey; - multisigs: any[] = []; + multisigs: MultisigAccount[] = []; wallet; api; connection; walletBalance: number = 0; - constructor(wallet: any, connection: any, programId?: string, programManagerId?: string, txMetaProgramId?: string) { + private balanceFetched = false; + constructor(wallet: CliWallet, connection: CliConnection, programId?: string, programManagerId?: string, txMetaProgramId?: string) { this.wallet = wallet.wallet; this.connection = connection; this.programId = programId ? new PublicKey(programId) : DEFAULT_MULTISIG_PROGRAM_ID; this.programManagerId = programManagerId ? new PublicKey(programManagerId) : DEFAULT_PROGRAM_MANAGER_PROGRAM_ID; this.txMetaProgramId = txMetaProgramId ? new PublicKey(txMetaProgramId) : new PublicKey(TXMETA_PROGRAM_ID); this.api = new API(wallet.wallet, connection, this.programId, this.programManagerId); - this.api.getWalletBalance(async (balance) => { - this.walletBalance = balance; - }); - } - - async changeWallet(wallet: any){ - this.wallet = wallet; - this.api = new API(wallet.wallet, this.connection, this.programId, this.programManagerId); - this.walletBalance = await this.api.getWalletBalance(); - } - - async changeConnection(connection: any){ - this.connection = connection; - this.api = new API(this.wallet, connection, this.programId, this.programManagerId); - this.walletBalance = await this.api.getWalletBalance(); + // Balance is fetched on first top() so the initial render doesn't show 0. } header = async (vault?: PublicKey) => { - this.api.getWalletBalance(); + // Refresh balance in the background for the next render. + this.api.getWalletBalance((balance) => { this.walletBalance = balance; }); clear(); console.log(`ProgramId: ${this.programId.toBase58()}`); console.log( @@ -121,7 +114,7 @@ class Menu{ } multisigList = async () => { - const loadAuthorities = async (ms: any[]) => { + const loadAuthorities = async (ms: MultisigAccount[]) => { return Promise.all(ms.map(async (msObj,i) => { const mAuth = await this.api.getVault(msObj.publicKey); return { @@ -158,7 +151,7 @@ class Menu{ } }; - multisig = async (ms: any) => { + multisig = async (ms: MultisigAccount) => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); console.log("Info"); @@ -206,7 +199,7 @@ class Menu{ } }; - transactions = async (txs: any[], ms: any) => { + transactions = async (txs: TransactionAccount[], ms: MultisigAccount) => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {action} = await transactionsMenu(txs, this.wallet.publicKey); @@ -215,11 +208,15 @@ class Menu{ }else{ const txKey = action.split(" ")[0]; const tx = txs.find(t => t.publicKey.toBase58() === txKey); + if (!tx) { + this.multisig(ms); + return; + } this.transaction(tx, ms, txs); } }; - createTransaction = async (ms: any) => { + createTransaction = async (ms: MultisigAccount) => { const {assemble} = await inquirer.prompt({ default: "", name: 'assemble', @@ -306,8 +303,8 @@ class Menu{ // Run a confirm → spinner → api call → splice-and-recurse flow for tx status changes // (approve/activate/reject/cancel). Errors and the "no" path both recurse with the original tx. private runTxAction = async ( - tx: any, ms: any, txs: any[], - apiFn: (txPubkey: PublicKey) => Promise, + tx: TransactionAccount, ms: MultisigAccount, txs: TransactionAccount[], + apiFn: (txPubkey: PublicKey) => Promise, msgs: { confirm: string; spinner: string; success: string }, ) => { const {yes} = await basicConfirm(msgs.confirm, false); @@ -332,10 +329,10 @@ class Menu{ } }; - transaction = async (tx: any, ms: any, txs: any[]) => { + transaction = async (tx: TransactionAccount, ms: MultisigAccount, txs: TransactionAccount[]) => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); - const authority = await this.api.getAuthority(ms.publicKey, parseInt(tx.authorityIndex, 10)); + const authority = await this.api.getAuthority(ms.publicKey, tx.authorityIndex); const txData = [ { status: Object.keys(tx.status)[0], @@ -370,12 +367,12 @@ class Menu{ let successfullyExecuted = 0; const additionalComputeBudgetInstruction = ComputeBudgetProgram.setComputeUnitLimit({ - units: 1400000, + units: EXECUTE_IX_COMPUTE_UNIT_LIMIT, }) try { if(tx.instructionIndex > 3) { for (let ixIndex = tx.executedIndex + 1; ixIndex <= tx.instructionIndex; ixIndex++){ - const [ixPDA] = await getIxPDA(tx.publicKey, new anchor.BN(ixIndex), this.api.programId); + const [ixPDA] = getIxPDA(tx.publicKey, new anchor.BN(ixIndex), this.api.programId); console.log("invoking instruction ", ixIndex); try { const ix = await this.api.executeInstructionBuilder(tx.publicKey, ixPDA); @@ -495,7 +492,7 @@ class Menu{ } }; - vault = async (ms: any, vaultPDA: PublicKey, vd: any) => { + vault = async (ms: MultisigAccount, vaultPDA: PublicKey, vd: AssetBundle) => { this.header(); console.log("Vault Address: " + chalk.blue(vaultPDA.toBase58())); console.table(vd.displayTokens); @@ -503,11 +500,7 @@ class Menu{ this.multisig(ms); } - useAsset = async (ms: any, asset: any) => { - this.header(); - } - - settings = async (ms: any) => { + settings = async (ms: MultisigAccount) => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); const owners = ms.keys.map((m: PublicKey) => { @@ -531,7 +524,7 @@ class Menu{ } } - addKey = async (ms: any) => { + addKey = async (ms: MultisigAccount) => { const {memberKey} = await inquirer.prompt({default: "", name: 'memberKey', type: 'input', message: `Enter the public key of the member you want to add (base58):`}); if (memberKey === "") { this.settings(ms); @@ -560,7 +553,7 @@ class Menu{ } }; - removeKey = async (ms: any) => { + removeKey = async (ms: MultisigAccount) => { this.header(); const choices = ms.keys.map((k: PublicKey) => k.toBase58()); choices.push("<- Go back"); @@ -591,7 +584,7 @@ class Menu{ } }; - changeThreshold = async (ms: any) => { + changeThreshold = async (ms: MultisigAccount) => { this.header(); const choices = ms.keys.map((k: PublicKey) => k.toBase58()); choices.push("<- Go back"); @@ -634,6 +627,11 @@ class Menu{ }; top = async () => { + if (!this.balanceFetched) { + // First entry: block on the initial balance so the header shows real data. + this.balanceFetched = true; + this.walletBalance = await this.api.getWalletBalance(); + } this.header(); const {action} = await mainMenu(); if(action === 'View my Multisigs') { @@ -642,11 +640,11 @@ class Menu{ this.create(); } else { clear(); - chalk.blue("Goodbye!"); + console.log(chalk.blue("Goodbye!")); } } - program = async (ms: any) => { + program = async (ms: MultisigAccount) => { this.header(); const vault = await this.api.getVault(ms.publicKey); const {programId} = await promptProgramId(); @@ -657,7 +655,7 @@ class Menu{ status.start(); try { const programAuthority = await this.api.getProgramDataAuthority(new anchor.web3.PublicKey(programId)); - chalk.blue("Current program data authority: " + programAuthority); + console.log(chalk.blue("Current program data authority: " + programAuthority)); status.stop(); if (programAuthority === this.wallet.publicKey.toBase58()) { this.programAuthorityChange(ms, programAuthority, programId, { @@ -686,8 +684,8 @@ class Menu{ } private programAuthorityChange = async ( - ms: any, - currentAuthority: PublicKey, + ms: MultisigAccount, + currentAuthority: string, programId: string, destination: { key: PublicKey; label: string; direction: "to" | "out of" }, ) => { @@ -727,17 +725,18 @@ class Menu{ if (createKey.length > 0) { initKey = createKey; } - let members = []; + const members: string[] = []; + const walletKey = this.wallet.publicKey.toBase58(); const {member} = await createMultisigMemberInq(); let newMember = member; while (newMember !== "") { - if (members.indexOf("newMember") < 0) { + if (newMember !== walletKey && members.indexOf(newMember) < 0) { members.push(newMember); } - const {member} = await createMultisigMemberInq(); - newMember = member; + const next = await createMultisigMemberInq(); + newMember = next.member; } - const {threshold} = await createMultisigThresholdInq(); + const {threshold} = await createMultisigThresholdInq(members.length + 1); const {action} = await createMultisigConfirmInq(initKey, members, threshold); if (action) { const createMembers = members.map(m => new anchor.web3.PublicKey(m)); @@ -769,7 +768,7 @@ class Menu{ } } - ata = async (ms: any) => { + ata = async (ms: MultisigAccount) => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -794,7 +793,7 @@ class Menu{ this.multisig(ms); } - nfts = async (ms: any) => { + nfts = async (ms: MultisigAccount) => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -810,7 +809,7 @@ class Menu{ } } - validator = async (ms: any) => { + validator = async (ms: MultisigAccount) => { clear() const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -822,7 +821,13 @@ class Menu{ } } - validatorWithdrawAuthorityChange = async (ms: any) => { + // Note: this flow is intentionally one-way (vault -> external). Moving a + // validator's withdraw authority *into* the vault requires the *current* + // authority's signature, which the CLI can't broker if it isn't held by + // the wallet or the vault. Users who want to delegate authority to a Squad + // should run that transfer through a separate tool that holds the current + // authority's key. + validatorWithdrawAuthorityChange = async (ms: MultisigAccount) => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -858,7 +863,7 @@ class Menu{ } } - transferWithdrawAuthorityOut = async (ms: any, withdrawAuthority: string, validatorId: string, destination: string) => { + transferWithdrawAuthorityOut = async (ms: MultisigAccount, withdrawAuthority: string, validatorId: string, destination: string) => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); console.log(`This will create a transaction for the transfer of the validator (${validatorId}) withdraw authority out of the Squad vault`); @@ -888,7 +893,7 @@ class Menu{ } } - nftAuthorityChange = async (ms: any) => { + nftAuthorityChange = async (ms: MultisigAccount) => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -906,7 +911,7 @@ class Menu{ // load the mint list from the file path provided let allMints: PublicKey[] = []; try { - allMints = await loadNFTMints(mintList); + allMints = loadNFTMints(mintList); } catch (e) { console.log("There was an error loading the mint list file: " + chalk.red(e)); error = true; @@ -932,7 +937,7 @@ class Menu{ } // this can simply be transferred to the vault directly with metaplex program - nftAuthorityChangeIncoming = async (ms: any, mintList: PublicKey[], newAuthority: PublicKey) => { + nftAuthorityChangeIncoming = async (ms: MultisigAccount, mintList: PublicKey[], newAuthority: PublicKey) => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -1024,7 +1029,7 @@ class Menu{ }; // to move the authority out, transaction will need to be created - nftAuthorityChangeOutgoing = async (ms: any, mintList: PublicKey[], newAuthority: PublicKey) => { + nftAuthorityChangeOutgoing = async (ms: MultisigAccount, mintList: PublicKey[], newAuthority: PublicKey) => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -1080,30 +1085,33 @@ class Menu{ const logtime = Date.now(); const logFilename = path.join(process.cwd(),`/authority-out-${logtime}.txt`); const transferOutWriteStream = fs.createWriteStream(logFilename, "utf8"); - transferOutWriteStream.write("Initiating bulk outgoing authority change transactions\n"); const fullResults = []; - for(const batch of buckets){ - const metasAdded = await createAuthorityUpdateTx(this.api.squads, ms.publicKey, vault, newAuthority, batch, this.api.connection, transferOutWriteStream, safeSign); - successfullyStagedMetas.push(...metasAdded.attached); + try { + transferOutWriteStream.write("Initiating bulk outgoing authority change transactions\n"); + for(const batch of buckets){ + const metasAdded = await createAuthorityUpdateTx(this.api.squads, ms.publicKey, vault, newAuthority, batch, this.api.connection, transferOutWriteStream, safeSign); + successfullyStagedMetas.push(...metasAdded.attached); - // if we haven't had an activation error, activate it - if (metasAdded.txError === 'none' || metasAdded.txError === 'approval') { - // send the txmeta if we have a valid tx metadata program - try { - const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); - const txMetaTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); - const txMetaIx = await sendTxMetaIx(ms.publicKey, metasAdded.txPDA, this.wallet.publicKey, {type: 'nftAuthorityUpdate'}, this.txMetaProgramId); - txMetaTx.add(txMetaIx); - const signed = await this.wallet.signTransaction(txMetaTx); - const txid = await this.api.connection.sendRawTransaction(signed.serialize()); - await this.api.connection.confirmTransaction(txid, "processed"); - }catch(e){ - console.log("Skipped internal squads tx meta memo"); + // if we haven't had an activation error, activate it + if (metasAdded.txError === 'none' || metasAdded.txError === 'approval') { + // send the txmeta if we have a valid tx metadata program + try { + const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); + const txMetaTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); + const txMetaIx = sendTxMetaIx(ms.publicKey, metasAdded.txPDA, this.wallet.publicKey, {type: 'nftAuthorityUpdate'}, this.txMetaProgramId); + txMetaTx.add(txMetaIx); + const signed = await this.wallet.signTransaction(txMetaTx); + const txid = await this.api.connection.sendRawTransaction(signed.serialize()); + await this.api.connection.confirmTransaction(txid, "processed"); + } catch (_e) { + console.log("Skipped internal squads tx meta memo"); + } } + fullResults.push(metasAdded); } - fullResults.push(metasAdded); + } finally { + transferOutWriteStream.close(); } - transferOutWriteStream.close(); // write the json log file const logFilenameJson = path.join(process.cwd(),`/authority-out-mints-${logtime}.json`); // write the successful fullResults to the logFilenameJson @@ -1116,7 +1124,7 @@ class Menu{ this.nfts(ms); }; - nftValidateMetaAuthorities = async (ms: any) => { + nftValidateMetaAuthorities = async (ms: MultisigAccount) => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -1125,7 +1133,7 @@ class Menu{ const {mintList, type, publicKey} = await nftValidateCurrentAuthorityInq(vault); let allMints: PublicKey[] = []; try { - allMints = await loadNFTMints(mintList); + allMints = loadNFTMints(mintList); } catch (e) { console.log("There was an error loading the mint list file: " + chalk.red(e)); error = true; @@ -1162,7 +1170,7 @@ class Menu{ this.nfts(ms); } - nftBatchTransfer = async (ms: any) => { + nftBatchTransfer = async (ms: MultisigAccount) => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -1170,7 +1178,7 @@ class Menu{ if (mintList && mintList.length > 0) { const status = new Spinner("Loading the mint list..."); status.start(); - const mints = await loadNFTMints(mintList); + const mints = loadNFTMints(mintList); status.stop(); const {success, failures} = await checkIfMintsAreValidAndOwnedByVault(this.api.connection, mints, vault) failures.forEach((mint) => { @@ -1223,7 +1231,7 @@ class Menu{ try { const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); const txMetaTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); - const txMetaIx = await sendTxMetaIx(ms.publicKey, metasAdded.txPDA, this.wallet.publicKey, {type: 'nftMassWithdraw', amount: metasAdded.attached.length, destination}, this.txMetaProgramId); + const txMetaIx = sendTxMetaIx(ms.publicKey, metasAdded.txPDA, this.wallet.publicKey, {type: 'nftMassWithdraw', amount: metasAdded.attached.length, destination}, this.txMetaProgramId); txMetaTx.add(txMetaIx); const signed = await this.wallet.signTransaction(txMetaTx); const txid = await this.api.connection.sendRawTransaction(signed.serialize()); @@ -1242,6 +1250,6 @@ class Menu{ await continueInq(); this.nfts(ms); } -}; +} export default Menu; diff --git a/src/lib/nfts.ts b/src/lib/nfts.ts index c509fba..aedac47 100644 --- a/src/lib/nfts.ts +++ b/src/lib/nfts.ts @@ -1,22 +1,13 @@ import {NodeWallet, programs} from "@metaplex/js"; import {TOKEN_PROGRAM_ID} from '@solana/spl-token'; -import {getMultipleAccountsBatch, shortenTextEnd} from "./utils.js"; -import axios from "axios"; -import {utils} from "@coral-xyz/anchor"; -import CLI from "clui"; import * as anchor from "@coral-xyz/anchor"; -import {Connection, Keypair, PublicKey, TransactionInstruction} from "@solana/web3.js"; +import {AccountInfo, Connection, Keypair, ParsedAccountData, PublicKey} from "@solana/web3.js"; import { - Account, - AccountInfo, lamports, Metaplex, - parseMetadataAccount, - toAccountInfo, token, toMetadata, toMetadataAccount, - UnparsedAccount, UnparsedMaybeAccount, walletAdapterIdentity } from "@metaplex-foundation/js"; import * as fs from "fs"; @@ -24,168 +15,20 @@ import { METAPLEX_PROGRAM_ID, updateMetadataAuthorityIx } from "./metadataInstru import {TokenStandard} from '@metaplex-foundation/mpl-token-metadata'; import Squads from "@sqds/sdk"; -import { metadata } from "figlet"; -import {fail} from "yargs"; +import type { Mutable, TxMetaPayload } from "../types.js"; -const {Progress} = CLI; -export const checkIsNFT = async (connection: Connection, acc: any) => { +type ParsedTokenAccount = { pubkey: PublicKey; account: AccountInfo }; + +export const checkIsNFT = async (connection: Connection, acc: ParsedTokenAccount) => { try { const edition = await programs.metadata.Metadata.getEdition(connection, acc.account.data.parsed.info.mint) if (edition) return true; - } catch (e) { + } catch (_e) { return acc.account.data.parsed.info.tokenAmount.decimals === 0; } } -export const getNFTAccounts = async (connection: Connection, publicKey: PublicKey) => { - const { value } = await connection.getParsedTokenAccountsByOwner(publicKey, {programId: TOKEN_PROGRAM_ID}); - const tokenMap = value.map(async ({ account, pubkey }) => { - const { data } = account; - const pda = await programs.metadata.Metadata.getPDA(data.parsed.info.mint); - - return { - account: pubkey, - mint: data.parsed.info.mint, - amount: data.parsed.info.tokenAmount, - metadataPda: pda, - metadataPdaUi: pda.toBase58(), - }; - }); - - return Promise.all(tokenMap) - // filter for amount = 1 - .then(result => { - return result.filter(ta => { - return ta.amount.uiAmount > 0; - }) - }) - // filter by metadata program key - .then(filtered => { - return getMultipleAccountsBatch(connection, filtered.map(f => f.metadataPda)) - .then(pdaRes => { - - return pdaRes.map((mpr: any, i) => { - // try to create the Metadata object - let md = null; - try { - md = new programs.metadata.Metadata(filtered[i].mint, mpr.account); - } catch (e) { - // not a valid metadata - md = null; - } - - if (md && (md.data.data.creators || md.data.tokenStandard === 1 || filtered[i].amount.decimals === 0)) { - return { - account: filtered[i].account, - metadata: md, - jsonData: {} as any, - tokenModel: { - amount: filtered[i].amount, - source: filtered[i].account.toBase58(), - mint: filtered[i].mint, - symbol: shortenTextEnd(md.data.data.symbol, 4), - decimals: 0, - name: md.data.data.name - }, - }; - } - return null; - }); - - }) - .then(mac => mac.filter(pmd => pmd)); - }) - .then(async (f) => { - for (const model of f) { - if (model) { - try { - model.jsonData = await axios.get(model.metadata.data.data.uri).then(response => response.data) - } catch (e) { - model.jsonData = model.metadata.data.data - model.jsonData.image = "" - } - } - } - return f; - }) -}; - -export const getOldNFTAccounts = async (connection: Connection, publicKey: PublicKey) => { - const { value } = await connection.getParsedTokenAccountsByOwner(publicKey, {programId: TOKEN_PROGRAM_ID}); - const tokenMap = value.map(async ({ account, pubkey }) => { - const { data } = account; - const pda = await programs.metadata.Metadata.getPDA(data.parsed.info.mint); - return { - account: pubkey, - mint: data.parsed.info.mint, - amount: data.parsed.info.tokenAmount, - metadataPda: pda, - metadataPdaUi: pda.toBase58(), - }; - }); - - return Promise.all(tokenMap) - .then(result => { - return result.filter(ta => { - return ta.mint !== null; - }) - }) - // filter by metadata program key - .then(filtered => { - return getMultipleAccountsBatch(connection, filtered.map(f => f.metadataPda)) - .then(pdaRes => { - - return pdaRes.map((mpr, i) => { - if (!mpr) { - return null; - } - // try to create the Metadata object - let md = null; - try { - md = new programs.metadata.Metadata(filtered[i].mint, mpr.account); - } - catch(e) { - // not a valid metadata - md = null; - } - - if (md && (md.data.data.creators || md.data.tokenStandard === 1 || filtered[i].amount.decimals === 0)) { - return { - account: filtered[i].account, - metadata: md, - jsonData: {} as any, - tokenModel: { - amount: filtered[i].amount, - source: filtered[i].account.toBase58(), - mint: filtered[i].mint, - symbol: shortenTextEnd(md.data.data.symbol, 4), - decimals: 0, - name: md.data.data.name - }, - }; - } - return null; - }); - - }) - .then(mac => mac.filter(pmd => pmd)); - }) - .then(async (f) => { - for (const model of f) { - if (model) { - try { - model.jsonData = await axios.get(model.metadata.data.data.uri).then(response => response.data) - } catch (e) { - model.jsonData = model.metadata.data.data - model.jsonData.image = "" - } - } - } - return f; - }) -}; - type BatchTransactionCreationError = 'approval' | 'activation' | 'none'; // can fit 250 ixes export const createAuthorityUpdateTx = async (squadsSdk: Squads, multisig: PublicKey, currentAuthority: PublicKey, newAuthority: PublicKey, mints: PublicKey[], connection: Connection, ws: fs.WriteStream, safeSign?: boolean) => { @@ -312,7 +155,7 @@ export const prepareBulkUpdate = async (mints: PublicKey[]) => { export const getMetadataAccount = (mint: PublicKey) => { // to do - put in real derivation seeds - return PublicKey.findProgramAddressSync([utils.bytes.utf8.encode('metadata'), METAPLEX_PROGRAM_ID.toBuffer(), mint.toBuffer()], METAPLEX_PROGRAM_ID)[0]; + return PublicKey.findProgramAddressSync([anchor.utils.bytes.utf8.encode('metadata'), METAPLEX_PROGRAM_ID.toBuffer(), mint.toBuffer()], METAPLEX_PROGRAM_ID)[0]; }; export const checkAllMetas = async (connection: Connection, mints: PublicKey[]) => { @@ -386,16 +229,33 @@ export const checkAllMetasAuthority = async (connection: Connection, mints: Publ } }; -// loads the mint json and maps the mints to publickey -export const loadNFTMints = async (path: string) => { - // load the json file - const mintJSON = await fs.readFileSync(path, "utf8"); - const mints: PublicKey[] = JSON.parse(mintJSON); - return mints.map(m => new PublicKey(m)); -} +// loads the mint json and maps the mints to publickey. The file must contain +// a JSON array of base58 mint addresses. Duplicates are silently de-duplicated. +export const loadNFTMints = (path: string): PublicKey[] => { + const mintJSON = fs.readFileSync(path, "utf8"); + const parsed: unknown = JSON.parse(mintJSON); + if (!Array.isArray(parsed)) { + throw new Error("Mint list file must contain a JSON array of base58 mint addresses"); + } + const seen = new Set(); + const mints: PublicKey[] = []; + parsed.forEach((entry, i) => { + if (typeof entry !== "string" || entry.length === 0) { + throw new Error(`Mint list entry ${i} is not a non-empty string`); + } + if (seen.has(entry)) return; + seen.add(entry); + try { + mints.push(new PublicKey(entry)); + } catch { + throw new Error(`Mint list entry ${i} ("${entry}") is not a valid base58 public key`); + } + }); + return mints; +}; // creates a squads tx meta instruction for the tx to be referred later by type -export const sendTxMetaIx = async (msPDA: PublicKey, txPDA: PublicKey, member: PublicKey, dataObj: any, txMetaProgramId: PublicKey) => { +export const sendTxMetaIx = (msPDA: PublicKey, txPDA: PublicKey, member: PublicKey, dataObj: TxMetaPayload, txMetaProgramId: PublicKey) => { const trackMetaSig = anchor.utils.sha256.hash( "global:track_meta" ); @@ -438,7 +298,7 @@ export const sendTxMetaIx = async (msPDA: PublicKey, txPDA: PublicKey, member: P export const estimateBulkUpdate = async (sdk: Squads, connection: Connection, buckets: PublicKey[][], testKey: PublicKey) => { // iterate through each bucket, and create a transaction, then create an instruction for each item in each bucket let ixBytes = 0; - const metaIx = await updateMetadataAuthorityIx(testKey, testKey, testKey); + const metaIx = updateMetadataAuthorityIx(testKey, testKey, testKey); const testIx = await sdk.buildAddInstruction(testKey, testKey, metaIx, 0); ixBytes = testIx.data.length; // reduce the buckets to the total number of instructions @@ -465,17 +325,20 @@ export const checkIfMintsAreValidAndOwnedByVault = async (connection: Connection mints: mints }); const allTokens = await connection.getParsedTokenAccountsByOwner(vault, {programId: TOKEN_PROGRAM_ID}); - for (const nft of loadedNFTs as any) { - const index = loadedNFTs.indexOf(nft); - if (!nft) - failures.push(mints[index].toBase58()) - else { - const found = allTokens.value.filter((value) => value.account.data.parsed.info.tokenAmount.uiAmount > 0).find((value) => value.account.data.parsed.info.mint === nft?.mintAddress.toBase58()) - if (!found) - failures.push(mints[index].toBase58()) - else - success.push(nft?.mintAddress) + for (let index = 0; index < loadedNFTs.length; index++) { + const nft = loadedNFTs[index]; + const mint = mints[index]; + if (!nft) { + failures.push(mint.toBase58()); + continue; } + const found = allTokens.value + .filter((value) => value.account.data.parsed.info.tokenAmount.uiAmount > 0) + .find((value) => value.account.data.parsed.info.mint === mint.toBase58()); + if (!found) + failures.push(mint.toBase58()); + else + success.push(mint); } } catch (e) { console.log(e) @@ -519,7 +382,7 @@ export const createWithdrawNftTx = async (squadsSdk: Squads, multisig: PublicKey : undefined // EDGE Case fixing - const mutableNFT = nft as any + const mutableNFT = nft as Mutable; if (mutableNFT.model === "sft" && !mutableNFT.tokenStandard) mutableNFT.tokenStandard = TokenStandard.FungibleAsset @@ -565,7 +428,7 @@ export const createWithdrawNftTx = async (squadsSdk: Squads, multisig: PublicKey : undefined // EDGE Case fixing - const mutableNFT = nft as any + const mutableNFT = nft as Mutable; if (mutableNFT.model === "sft" && !mutableNFT.tokenStandard) mutableNFT.tokenStandard = TokenStandard.FungibleAsset diff --git a/src/lib/program.ts b/src/lib/program.ts index eb6c950..6caa729 100644 --- a/src/lib/program.ts +++ b/src/lib/program.ts @@ -1,9 +1,11 @@ import * as anchor from "@coral-xyz/anchor"; -import { Connection, PublicKey } from "@solana/web3.js"; +import { AccountInfo, Connection, ParsedAccountData, PublicKey, RpcResponseAndContext } from "@solana/web3.js"; import BN from "bn.js"; const BPFLOADER_ADDRESS = new anchor.web3.PublicKey("BPFLoaderUpgradeab1e11111111111111111111111"); -const getParsed = (account: any) => { +type ParsedAccountResponse = RpcResponseAndContext | null>; + +const getParsed = (account: ParsedAccountResponse) => { const {value} = account; if (value && value.data && 'parsed' in value.data) { const { data: {parsed}} = value; diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 642d773..da274a1 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -26,14 +26,9 @@ export async function getMultipleAccountsBatch( keys.push(tempKeys) } - const accounts: Array = [] + const accounts: Array | null> = [] - const resArray: { [key: number]: any } = {} + const resArray: { [key: number]: Array | null> } = {} await Promise.all( keys.map(async (key, index) => { resArray[index] = await connection.getMultipleAccountsInfo(key, commitment) diff --git a/src/lib/wallet.ts b/src/lib/wallet.ts index f41b602..b407688 100644 --- a/src/lib/wallet.ts +++ b/src/lib/wallet.ts @@ -2,33 +2,29 @@ import os from "os"; import fs from "fs"; import { ComputeBudgetProgram, type Transaction } from "@solana/web3.js"; import * as anchor from "@coral-xyz/anchor"; +import type { AnchorWallet } from "../types.js"; const homedir = os.homedir(); const defaultWalletPath = `${homedir}/.config/solana/id.json`; class CliWallet { walletPath: string; - wallet: anchor.Wallet; + wallet!: AnchorWallet; constructor( walletInitPath?: string, - ledgerWallet?: any | null, + ledgerWallet?: AnchorWallet | null, computeUnitPrice?: number, ) { this.walletPath = defaultWalletPath; if (walletInitPath && walletInitPath.length > 0) { this.walletPath = walletInitPath; } - let bareWallet; - if (ledgerWallet) - bareWallet = ledgerWallet; - else - bareWallet = this.loadCliWallet(); - + const bareWallet = ledgerWallet ?? this.loadCliWallet(); this.wallet = new WalletWithFees(bareWallet, computeUnitPrice); } - loadCliWallet(){ + loadCliWallet(): AnchorWallet { let walletJSON; try { walletJSON = JSON.parse(fs.readFileSync(this.walletPath, "utf-8")); @@ -38,24 +34,19 @@ class CliWallet { throw e; } const walletKeypair = anchor.web3.Keypair.fromSecretKey(Uint8Array.from(walletJSON)); - this.wallet = new anchor.Wallet(walletKeypair); - return this.wallet; + return new anchor.Wallet(walletKeypair); } } -export class WalletWithFees implements anchor.Wallet { - bareWallet: anchor.Wallet; +export class WalletWithFees implements AnchorWallet { + bareWallet: AnchorWallet; computeUnitPrice?: number; - constructor(bareWallet: anchor.Wallet, computeUnitPrice?: number) { + constructor(bareWallet: AnchorWallet, computeUnitPrice?: number) { this.bareWallet = bareWallet; this.computeUnitPrice = computeUnitPrice; } - get payer() { - return this.bareWallet.payer; - } - get publicKey() { return this.bareWallet.publicKey; } diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..a7d816a --- /dev/null +++ b/src/types.ts @@ -0,0 +1,48 @@ +// SDK runtime shapes derived from method signatures. The @sqds/sdk public +// index does not re-export these named types, so we recover them via +// Awaited> rather than reaching into internal paths. + +import type Squads from "@sqds/sdk"; +import type { AnchorProvider } from "@coral-xyz/anchor"; + +// The anchor Wallet *interface* (not the NodeWallet class). Derived from +// AnchorProvider's constructor so we avoid reaching into anchor internals. +// Required because parseLedgerWallet returns an interface-conforming object +// that lacks the class's `payer` property. +export type AnchorWallet = ConstructorParameters[1]; + +export type MultisigAccount = Awaited>; +export type TransactionAccount = Awaited>; +export type InstructionAccount = Awaited>; +export type SquadsTxBuilder = Awaited>; + +// Asset bundles returned by getAssets (lib/assets.ts). +export interface TokenAsset { + amount: number; + source: string; + mint: string; + symbol: string; + decimals: number; + name: string; +} + +export interface AssetBundle { + usableTokens: TokenAsset[]; + displayTokens: Array<{ + Amount: number; + Account: string; + Mint: string; + Symbol: string; + Name: string; + }>; +} + +// Tagged shapes for the tx-meta memo payloads written by the bulk NFT flows. +export type TxMetaPayload = + | { type: "nftAuthorityUpdate" } + | { type: "nftMassWithdraw"; amount: number; destination: string }; + +// Strip readonly modifiers — used to mutate metaplex NFT objects in-place +// where the upstream type marks fields readonly but the SDK expects them +// patched (e.g. SFT tokenStandard). +export type Mutable = { -readonly [K in keyof T]: T[K] }; diff --git a/yarn.lock b/yarn.lock index 57e6484..f485cd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,6 +43,38 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + "@ethereumjs/rlp@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" @@ -378,6 +410,25 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/strings" "^5.8.0" +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + "@inquirer/external-editor@^1.0.0": version "1.0.3" resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" @@ -958,6 +1009,27 @@ resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.2.tgz#c2c3343e2dce80e15a914d7442147507f8a98e7f" integrity sha512-/qzwYl5eFLH8OWIecQWM31qld2g1NfjgylK+TNhqtaUKP37Nm+Y+z30Fjhw0Ct8p9yCQEm2N3W/AckdIb3SMcQ== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + "@octokit/auth-basic@1.4.8": version "1.4.8" resolved "https://registry.yarnpkg.com/@octokit/auth-basic/-/auth-basic-1.4.8.tgz#8609c64f49666f3b641e045ae4cafb24f78d93e0" @@ -1388,6 +1460,11 @@ "@types/through" "*" rxjs "^7.2.0" +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/lodash@4.14.191": version "4.14.191" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" @@ -1415,6 +1492,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/semver@^7.5.0": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.1.tgz#3ce3af1a5524ef327d2da9e4fd8b6d95c8d70528" + integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA== + "@types/through@*": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.33.tgz#14ebf599320e1c7851e7d598149af183c6b9ea56" @@ -1448,6 +1530,97 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + dependencies: + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.1.tgz#0e8f34854df7966b09304a18e808b23997bb9fc1" + integrity sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ== + JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -1461,6 +1634,11 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^8.1.1: version "8.3.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" @@ -1471,6 +1649,11 @@ acorn@^8.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== +acorn@^8.9.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" @@ -1490,6 +1673,16 @@ agentkeepalive@^4.5.0: dependencies: humanize-ms "^1.2.1" +ajv@^6.12.4: + version "6.15.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.15.0.tgz#07e982c74626167aa7a2495c53817892d7139492" + integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + algo-msgpack-with-bigint@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz#38bb717220525b3ff42232eefdcd9efb9ad405d6" @@ -1580,6 +1773,11 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + array-buffer-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" @@ -1588,6 +1786,11 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + arweave-stream-tx@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz#2d5c66554301baacd02586a152fbb198b422112f" @@ -1663,6 +1866,11 @@ axios@^1.4.0: https-proxy-agent "^5.0.1" proxy-from-env "^2.1.0" +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + base-x@^3.0.2: version "3.0.11" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" @@ -1806,6 +2014,28 @@ borsh@^0.7.0: bs58 "^4.0.0" text-encoding-utf-8 "^1.0.2" +brace-expansion@^1.1.7: + version "1.1.14" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.14.tgz#d9de602370d91347cd9ddad1224d4fd701eb348b" + integrity sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.0.tgz#4f41a41190216ee36067ec381526fe9539c4f0ae" + integrity sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1906,12 +2136,17 @@ call-bound@^1.0.3, call-bound@^1.0.4: call-bind-apply-helpers "^1.0.2" get-intrinsic "^1.3.0" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + camelcase@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -chalk@4.1.2, chalk@^4.1.0, chalk@^4.1.1: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2050,6 +2285,11 @@ commander@^8.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + configstore@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" @@ -2115,6 +2355,15 @@ cross-fetch@^3.1.5: dependencies: node-fetch "^2.6.12" +cross-spawn@^7.0.2: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-hash@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" @@ -2172,7 +2421,7 @@ d@~0.1.1: dependencies: es5-ext "~0.10.2" -debug@4, debug@^4.4.0: +debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.4.0: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -2222,6 +2471,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + defaults@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" @@ -2291,6 +2545,20 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.4.tgz#7a6dbfda325f25f07517e9b518f897c08332e07d" integrity sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -2474,6 +2742,68 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + esniff@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" @@ -2484,6 +2814,39 @@ esniff@^2.0.1: event-emitter "^0.3.5" type "^2.7.2" +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + ethereum-bloom-filters@^1.0.6: version "1.0.10" resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" @@ -2554,11 +2917,44 @@ eyes@^0.1.8: resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + fast-stable-stringify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== +fastq@^1.6.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== + dependencies: + reusify "^1.0.4" + figlet@1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" @@ -2571,11 +2967,47 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.4.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" + integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== + follow-redirects@^1.14.7: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" @@ -2625,6 +3057,11 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -2679,6 +3116,51 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -2696,6 +3178,11 @@ graceful-fs@^4.2.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + has-bigints@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -2842,12 +3329,33 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +import-fresh@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2939,11 +3447,23 @@ is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" @@ -2971,11 +3491,21 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -3067,6 +3597,11 @@ isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + isomorphic-ws@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" @@ -3124,6 +3659,13 @@ js-sha512@^0.8.0: resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.8.0.tgz#dd22db8d02756faccf19f218e3ed61ec8249f7d4" integrity sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ== +js-yaml@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + json-bigint@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" @@ -3131,6 +3673,21 @@ json-bigint@^1.0.0: dependencies: bignumber.js "^9.0.0" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -3150,6 +3707,28 @@ keccak@^3.0.2: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -3160,6 +3739,11 @@ lodash.isequal@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash@4.18.0: version "4.18.0" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.0.tgz#dfd726f07ab2e39dd763de28fcf66e395c03e440" @@ -3244,6 +3828,11 @@ memoizee@0.3.x: next-tick "~0.2.2" timers-ext "0.1" +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + merkletreejs@^0.3.11: version "0.3.11" resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" @@ -3260,6 +3849,14 @@ micro-ftch@^0.3.1: resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -3297,6 +3894,20 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== + dependencies: + brace-expansion "^1.1.7" + minimist@1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -3350,6 +3961,11 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + near-hd-key@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/near-hd-key/-/near-hd-key-1.2.1.tgz#f508ff15436cf8a439b543220f3cc72188a46756" @@ -3478,7 +4094,7 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -3492,6 +4108,18 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + ora@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" @@ -3522,11 +4150,52 @@ ora@^6.1.0: strip-ansi "^7.0.1" wcwidth "^1.0.1" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + pako@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pbkdf2@^3.0.9: version "3.1.5" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.5.tgz#444a59d7a259a95536c56e80c89de31cc01ed366" @@ -3539,6 +4208,11 @@ pbkdf2@^3.0.9: sha.js "^2.4.12" to-buffer "^1.2.1" +picomatch@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" + integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== + possible-typed-array-names@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" @@ -3562,6 +4236,11 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -3580,6 +4259,16 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + randombytes@^2.0.1, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -3633,6 +4322,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -3654,6 +4348,18 @@ retry@0.13.1: resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -3701,6 +4407,13 @@ run-async@^2.4.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -3744,6 +4457,11 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.8.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.1.tgz#bf4970b5e70fda0686363cc18bfe8805d5ed957e" + integrity sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg== + set-function-length@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" @@ -3797,6 +4515,18 @@ sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -3836,6 +4566,11 @@ simple-git@3.36.0: "@simple-git/argv-parser" "^1.1.0" debug "^4.4.0" +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -3926,6 +4661,11 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -3979,6 +4719,11 @@ text-encoding-utf-8@^1.0.2: resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -4013,6 +4758,13 @@ to-buffer@^1.2.0, to-buffer@^1.2.1, to-buffer@^1.2.2: safe-buffer "^5.2.1" typed-array-buffer "^1.0.3" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -4040,6 +4792,11 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== +ts-api-utils@^1.0.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + ts-node@10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -4086,6 +4843,18 @@ tweetnacl@1.0.3, tweetnacl@^1.0.1, tweetnacl@^1.0.2, tweetnacl@^1.0.3: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -4149,6 +4918,13 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + utf-8-validate@^5.0.2: version "5.0.10" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" @@ -4267,6 +5043,18 @@ which-typed-array@^1.1.16: gopd "^1.2.0" has-tostringtag "^1.0.2" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + wrap-ansi@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -4352,3 +5140,8 @@ yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From cb4f22295e5f313571777264706209a971dbb580 Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 17:00:21 -0400 Subject: [PATCH 08/10] feat(overhaul): better menu, state, and processing --- package.json | 1 - src/index.ts | 4 +- src/lib/api.ts | 39 +- src/lib/assets.ts | 175 ++++--- src/lib/inq/main.js | 23 +- src/lib/inq/multisigTop.js | 21 +- src/lib/inq/settings.js | 15 +- src/lib/inq/transaction.js | 37 +- src/lib/inq/transactions.js | 30 +- src/lib/menu.ts | 946 ++++++++++++++++-------------------- src/lib/menuActions.ts | 39 ++ src/lib/nfts.ts | 145 +++--- 12 files changed, 722 insertions(+), 753 deletions(-) create mode 100644 src/lib/menuActions.ts diff --git a/package.json b/package.json index f971456..9f2837f 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,6 @@ "@marinade.finance/web3js-common": "2.0.18", "@metaplex-foundation/js": "0.20.1", "@metaplex-foundation/mpl-token-metadata": "2.13.0", - "@metaplex/js": "4.12.0", "@octokit/auth-basic": "1.4.8", "@octokit/rest": "20.0.2", "@solana/spl-token": "0.3.6", diff --git a/src/index.ts b/src/index.ts index 8ba8284..9e8df15 100755 --- a/src/index.ts +++ b/src/index.ts @@ -51,9 +51,9 @@ const load = async ( cliConnection = new CliConnection(initCluster); } - // start the menu + // start the menu state machine const cli = new Menu(cliWallet, cliConnection, programId, programManagerId, txMetaProgramId); - cli.top(); + await cli.run(); }; const help = async () => { diff --git a/src/lib/api.ts b/src/lib/api.ts index 5350c2f..8c47411 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -11,10 +11,6 @@ import {Connection, LAMPORTS_PER_SOL, PublicKey, VoteProgram} from "@solana/web3 import type CliConnection from "./connection.js"; import type { AnchorWallet, MultisigAccount, SquadsTxBuilder, TransactionAccount } from "../types.js"; -// Minimal shape we need from program.account.ms.all() — the IDL is cast to -// the generic Idl type so anchor types account data as `unknown`. -type MsProgramAccount = { publicKey: PublicKey; account: { keys: PublicKey[] } }; - class API{ squads; wallet; @@ -97,11 +93,36 @@ class API{ getVault = (msPDA: PublicKey): Promise => this.getAuthority(msPDA, 1); getSquads = async (_pubkey: PublicKey) => { - const allSquads = await this.program.account.ms.all() as MsProgramAccount[]; - const mySquads = allSquads - .filter((s) => s.account.keys.some((k) => k.equals(this.wallet.publicKey))) - .map((s) => s.publicKey); - return Promise.all(mySquads.map(k => this.getSquadExtended(k))); + // Find all Ms accounts where the connected wallet appears in the `keys` + // Vec. Rather than fetching every Ms account on the program (tens of + // thousands on mainnet) and filtering client-side, we run a memcmp + // filter per possible member position. The keys Vec starts at offset + // 58 (computed below from the IDL): + // 8 discriminator + 2 threshold + 2 authorityIndex + 4 transactionIndex + // + 4 msChangeIndex + 1 bump + 32 createKey + 1 allowExternalExecute + // + 4 vec-length prefix = 58 + // We scan up to MS_SCAN_POSITIONS positions in parallel; multisigs that + // place this wallet beyond that won't be discovered (rare in practice). + const KEYS_OFFSET = 58; + const MS_SCAN_POSITIONS = 10; + const walletKey = this.wallet.publicKey.toBase58(); + const queries = Array.from({ length: MS_SCAN_POSITIONS }, (_, i) => + this.program.account.ms.all([ + { memcmp: { offset: KEYS_OFFSET + i * 32, bytes: walletKey } }, + ]), + ); + const results = await Promise.all(queries); + const seen = new Set(); + const msPDAs: PublicKey[] = []; + for (const batch of results) { + for (const entry of batch) { + const key = entry.publicKey.toBase58(); + if (seen.has(key)) continue; + seen.add(key); + msPDAs.push(entry.publicKey); + } + } + return Promise.all(msPDAs.map(k => this.getSquadExtended(k))); }; getTransactions = async (ms: MultisigAccount): Promise => { diff --git a/src/lib/assets.ts b/src/lib/assets.ts index 9eea152..5a177f5 100644 --- a/src/lib/assets.ts +++ b/src/lib/assets.ts @@ -1,95 +1,114 @@ import {Connection, LAMPORTS_PER_SOL, PublicKey} from "@solana/web3.js"; import {TOKEN_PROGRAM_ID} from "@solana/spl-token"; -import {checkIsNFT} from "./nfts.js"; import {TokenListProvider} from "@solana/spl-token-registry"; -import {shortenTextEnd} from "./utils.js"; -import {programs} from "@metaplex/js"; -import axios from "axios"; +import {lamports, toMetadata, toMetadataAccount, UnparsedMaybeAccount} from "@metaplex-foundation/js"; +import {getMultipleAccountsBatch, shortenTextEnd} from "./utils.js"; +import {getEditionAccount, getMetadataAccount} from "./nfts.js"; +import type {AssetBundle, TokenAsset} from "../types.js"; -export const getAssets = async (connection: Connection, userKey: PublicKey) => { +const WRAPPED_SOL_MINT = "So11111111111111111111111111111111111111112"; + +// Returns SOL + SPL token holdings for `userKey`. NFTs (detected by Edition +// account existence or decimals=0) are excluded from the displayed list. +// +// Previously this fetched metadata + edition + off-chain JSON per token +// sequentially (3N round-trips). Now it derives all PDAs up front and batches +// the on-chain lookups, dropping it to O(1) RPC batches regardless of token +// count. The off-chain JSON fetch (axios.get) was removed entirely — the +// result was never read. +export const getAssets = async (connection: Connection, userKey: PublicKey): Promise => { console.log("Getting accounts for:", userKey.toBase58()); - const usableTokens = []; - const parsedAccount = await connection.getParsedTokenAccountsByOwner(userKey, { - programId: TOKEN_PROGRAM_ID, - }); + const [solLamports, parsedAccount, tokenList] = await Promise.all([ + connection.getBalance(userKey, "confirmed"), + connection.getParsedTokenAccountsByOwner(userKey, { programId: TOKEN_PROGRAM_ID }), + new TokenListProvider().resolve().then(k => k.filterByClusterSlug("mainnet-beta").getList()), + ]); - const solInfo = await connection.getBalance(userKey, "confirmed"); - const solModel = { - amount: solInfo / LAMPORTS_PER_SOL, + const usableTokens: TokenAsset[] = [{ + amount: solLamports / LAMPORTS_PER_SOL, source: userKey.toBase58(), - mint: "So11111111111111111111111111111111111111112", + mint: WRAPPED_SOL_MINT, symbol: 'SOL', decimals: 9, - name: "Solana" - } - usableTokens.push(solModel) + name: "Solana", + }]; - const tokenList = await new TokenListProvider().resolve().then((knownToken) => { - return knownToken.filterByClusterSlug("mainnet-beta").getList(); - }); + // Exclude wrapped-SOL token accounts (the native SOL row already covers it). + const splAccounts = parsedAccount.value.filter( + a => a.account.data.parsed.info.mint !== WRAPPED_SOL_MINT + ); - for (const acc of parsedAccount.value) { - if (acc.account.data.parsed.info.mint !== "So11111111111111111111111111111111111111112") { - let isOnList = false; - const isNFT = await checkIsNFT(connection, acc); - if (acc.account.data.parsed.info.mint && !isNFT) { - try { - const metadata = await programs.metadata.Metadata.findByMint(connection, acc.account.data.parsed.info.mint) - const resp = await axios.get(metadata.data.data.uri).then(response => response.data) + if (splAccounts.length > 0) { + const mints = splAccounts.map(a => new PublicKey(a.account.data.parsed.info.mint)); + const metadataPDAs = mints.map(getMetadataAccount); + const editionPDAs = mints.map(getEditionAccount); + const [metadataAccounts, editionAccounts] = await Promise.all([ + getMultipleAccountsBatch(connection, metadataPDAs, "confirmed"), + getMultipleAccountsBatch(connection, editionPDAs, "confirmed"), + ]); + + const tokenListMap = new Map(tokenList.map(t => [t.address, t])); + + splAccounts.forEach((acc, i) => { + const mintStr: string = acc.account.data.parsed.info.mint; + const decimals: number = acc.account.data.parsed.info.tokenAmount.decimals; + const amount: number = acc.account.data.parsed.info.tokenAmount.uiAmount; + const source = acc.pubkey.toBase58(); + + // NFT heuristic: has an Edition account OR decimals === 0. + const isNFT = editionAccounts[i] !== null || decimals === 0; + if (isNFT) return; - const tModel = { - amount: acc.account.data.parsed.info.tokenAmount.uiAmount, - source: acc.pubkey.toBase58(), - mint: acc.account.data.parsed.info.mint, - symbol: metadata.data.data.symbol, - decimals: acc.account.data.parsed.info.tokenAmount.decimals, - name: metadata.data.data.name - } - usableTokens.push(tModel) - } catch (e) { - const hasTokenCheck = tokenList.filter((tkn) => { - return acc.account.data.parsed.info.mint === tkn.address; + // Prefer on-chain metadata for symbol/name when available. + const metaEntry = metadataAccounts[i]; + if (metaEntry) { + try { + const unparsed = { + ...metaEntry.account, + publicKey: metadataPDAs[i], + exists: true, + lamports: lamports(metaEntry.account.lamports), + } as UnparsedMaybeAccount; + const md = toMetadata(toMetadataAccount(unparsed)); + usableTokens.push({ + amount, source, mint: mintStr, + symbol: md.symbol, + decimals, + name: md.name, }); - if (hasTokenCheck.length > 0) { - isOnList = true; - const tModel = { - amount: acc.account.data.parsed.info.tokenAmount.uiAmount, - source: acc.pubkey.toBase58(), - mint: hasTokenCheck[0].address, - symbol: hasTokenCheck[0].symbol, - decimals: acc.account.data.parsed.info.tokenAmount.decimals, - name: hasTokenCheck[0].name - } - usableTokens.push(tModel) - } - if (!isOnList) { - const tModel = { - amount: acc.account.data.parsed.info.tokenAmount.uiAmount, - source: acc.pubkey.toBase58(), - mint: acc.account.data.parsed.info.mint, - symbol: shortenTextEnd(acc.account.data.parsed.info.mint, 4), - decimals: acc.account.data.parsed.info.tokenAmount.decimals, - name: "UNKNOWN" - } - usableTokens.push(tModel) - } + return; + } catch { + // fall through to token list / unknown } } - } + + // Fall back to the public SPL token registry. + const listEntry = tokenListMap.get(mintStr); + if (listEntry) { + usableTokens.push({ + amount, source, mint: listEntry.address, + symbol: listEntry.symbol, decimals, + name: listEntry.name, + }); + return; + } + + // Unknown token — show a truncated mint as the symbol. + usableTokens.push({ + amount, source, mint: mintStr, + symbol: shortenTextEnd(mintStr, 4), + decimals, name: "UNKNOWN", + }); + }); } - // console.log(usableTokens) - let displayTokens = usableTokens.map(a => { - // let out = a; - // out.account = a.source; - // out.mint = (a.mint && a.mint.length > 0) ? shortenTextEnd(a.mint, 16) : a.mint; - return { - "Amount": a.amount, - "Account": a.source, - "Mint": a.mint, - "Symbol": a.symbol, - "Name": a.name, - }; - }); - return {usableTokens, displayTokens}; -} + + const displayTokens = usableTokens.map(a => ({ + Amount: a.amount, + Account: a.source, + Mint: a.mint, + Symbol: a.symbol, + Name: a.name, + })); + return { usableTokens, displayTokens }; +}; diff --git a/src/lib/inq/main.js b/src/lib/inq/main.js index 41ff3ea..a4996ef 100644 --- a/src/lib/inq/main.js +++ b/src/lib/inq/main.js @@ -1,17 +1,18 @@ import inquirer from "inquirer"; +import { TOP } from "../menuActions.js"; export default () => { const questions = [ - { - type: 'list', - name: 'action', - message: 'Welcome to SQUADS - what would you like to do?', - choices: [ - "View my Multisigs", - "Create a new Multisig", - "Exit", - ], - } + { + type: 'list', + name: 'action', + message: 'Welcome to SQUADS - what would you like to do?', + choices: [ + { name: "View my Multisigs", value: TOP.VIEW }, + { name: "Create a new Multisig", value: TOP.CREATE }, + { name: "Exit", value: TOP.EXIT }, + ], + }, ]; return inquirer.prompt(questions); - }; \ No newline at end of file +}; diff --git a/src/lib/inq/multisigTop.js b/src/lib/inq/multisigTop.js index d98aabe..fddccfc 100644 --- a/src/lib/inq/multisigTop.js +++ b/src/lib/inq/multisigTop.js @@ -1,4 +1,5 @@ import inquirer from "inquirer"; +import { MULTISIG } from "../menuActions.js"; export default (multisig) => { const questions = [ @@ -7,17 +8,17 @@ export default (multisig) => { name: 'action', message: `What would you like to do?`, choices: [ - "Transactions", - "Create new Transaction", - "Vault", - "Settings", - "Create new ATA", - "Program Authority Transfer", - "Bulk NFT Operations", - "Validator", - "<- Go back" + { name: "Transactions", value: MULTISIG.TRANSACTIONS }, + { name: "Create new Transaction", value: MULTISIG.CREATE_TX }, + { name: "Vault", value: MULTISIG.VAULT }, + { name: "Settings", value: MULTISIG.SETTINGS }, + { name: "Create new ATA", value: MULTISIG.CREATE_ATA }, + { name: "Program Authority Transfer", value: MULTISIG.PROGRAM_AUTHORITY }, + { name: "Bulk NFT Operations", value: MULTISIG.BULK_NFT }, + { name: "Validator", value: MULTISIG.VALIDATOR }, + { name: "<- Go back", value: MULTISIG.BACK }, ], - } + }, ]; return inquirer.prompt(questions); }; diff --git a/src/lib/inq/settings.js b/src/lib/inq/settings.js index c6e177b..a3ccc4c 100644 --- a/src/lib/inq/settings.js +++ b/src/lib/inq/settings.js @@ -1,18 +1,19 @@ import inquirer from "inquirer"; +import { SETTINGS } from "../menuActions.js"; -export default () => { +export default () => { const questions = [ { type: 'list', name: 'action', message: 'What would you like to do?', choices: [ - "Add a key", - "Remove a key", - "Change threshold", - "<- Go back" + { name: "Add a key", value: SETTINGS.ADD_KEY }, + { name: "Remove a key", value: SETTINGS.REMOVE_KEY }, + { name: "Change threshold", value: SETTINGS.CHANGE_THRESHOLD }, + { name: "<- Go back", value: SETTINGS.BACK }, ], - } + }, ]; return inquirer.prompt(questions); -}; \ No newline at end of file +}; diff --git a/src/lib/inq/transaction.js b/src/lib/inq/transaction.js index 103eb77..665bf58 100644 --- a/src/lib/inq/transaction.js +++ b/src/lib/inq/transaction.js @@ -1,29 +1,36 @@ import inquirer from "inquirer"; +import { TX_ACTION } from "../menuActions.js"; export default (tx) => { let choices = []; - if(tx.status.active) { - choices = ["Approve", "Reject"]; + if (tx.status.active) { + choices = [ + { name: "Approve", value: TX_ACTION.APPROVE }, + { name: "Reject", value: TX_ACTION.REJECT }, + ]; } - if(tx.status.executeReady){ - choices = ["Execute", "Submit to cancel"]; + if (tx.status.executeReady) { + choices = [ + { name: "Execute", value: TX_ACTION.EXECUTE }, + { name: "Submit to cancel", value: TX_ACTION.CANCEL }, + ]; } - if (tx.status.draft){ - choices = ["Add Instruction"]; - if(tx.instructionIndex > 0){ - choices.push("Activate"); + if (tx.status.draft) { + choices = [{ name: "Add Instruction", value: TX_ACTION.ADD_IX }]; + if (tx.instructionIndex > 0) { + choices.push({ name: "Activate", value: TX_ACTION.ACTIVATE }); } } - choices.push("<- Go back"); + choices.push({ name: "<- Go back", value: TX_ACTION.BACK }); const questions = [ { - type: 'list', - name: 'action', - message: 'What would you like to do?', - choices, - } + type: 'list', + name: 'action', + message: 'What would you like to do?', + choices, + }, ]; return inquirer.prompt(questions); -}; \ No newline at end of file +}; diff --git a/src/lib/inq/transactions.js b/src/lib/inq/transactions.js index 86a1908..6e91869 100644 --- a/src/lib/inq/transactions.js +++ b/src/lib/inq/transactions.js @@ -1,24 +1,26 @@ import inquirer from "inquirer"; -export default (txs, userKey) => { - // console.log(txs); - - const choices = txs.filter((tx) => { - return ((tx.creator.toBase58() === userKey.toBase58() && tx.status.draft ) || tx.status.active || tx.status.executeReady || tx.status.executed || tx.status.rejected || tx.status.cancelled); - }).map(tx => { - return `${tx.publicKey.toBase58()} (${Object.keys(tx.status)[0]})`; +export default (txs, userKey) => { + const visible = txs.filter((tx) => { + return ( + (tx.creator.toBase58() === userKey.toBase58() && tx.status.draft) || + tx.status.active || tx.status.executeReady || + tx.status.executed || tx.status.rejected || tx.status.cancelled + ); }); - if(choices.length < 1){ + if (visible.length < 1) { console.log("No transactions found"); } - choices.push("<- Go back"); - const txList = [ - { + const choices = visible.map((tx) => ({ + name: `${tx.publicKey.toBase58()} (${Object.keys(tx.status)[0]})`, + value: tx.publicKey.toBase58(), + })); + choices.push({ name: "<- Go back", value: null }); + + return inquirer.prompt([{ type: 'list', name: 'action', message: 'Choose a transaction', choices, - } - ]; - return inquirer.prompt(txList); + }]); }; diff --git a/src/lib/menu.ts b/src/lib/menu.ts index 57b85cc..ea45f6a 100644 --- a/src/lib/menu.ts +++ b/src/lib/menu.ts @@ -48,6 +48,7 @@ import API from "./api.js"; import type CliWallet from "./wallet.js"; import type CliConnection from "./connection.js"; import type { MultisigAccount, TransactionAccount, AssetBundle } from "../types.js"; +import { MULTISIG, SETTINGS, TOP, TX_ACTION } from "./menuActions.js"; import { shortenTextEnd } from './utils.js'; import { @@ -72,6 +73,12 @@ const Spinner = CLI.Spinner; // authority changes, large CPI calls) can hit the default 200k budget. const EXECUTE_IX_COMPUTE_UNIT_LIMIT = 1_400_000; +// Each menu method returns a thunk for the next menu (or null to exit). +// The outer run() loop awaits each thunk in sequence, so the parent frame +// is freed before the next menu starts — no stack growth across transitions +// and any thrown error lands in one place we can recover from. +type NextAction = (() => Promise) | null; + class Menu{ programId: PublicKey; programManagerId: PublicKey; @@ -92,6 +99,21 @@ class Menu{ // Balance is fetched on first top() so the initial render doesn't show 0. } + // Entry point. Drives the menu state machine: each menu returns the next + // thunk, errors are caught here and recover by going back to top. + run = async (): Promise => { + let next: NextAction = () => this.top(); + while (next !== null) { + try { + next = await next(); + } catch (e) { + console.error(chalk.red("\nMenu error:"), e); + await continueInq(); + next = () => this.top(); + } + } + }; + header = async (vault?: PublicKey) => { // Refresh balance in the background for the next render. this.api.getWalletBalance((balance) => { this.walletBalance = balance; }); @@ -113,17 +135,17 @@ class Menu{ console.log(""); } - multisigList = async () => { + multisigList = async (): Promise => { const loadAuthorities = async (ms: MultisigAccount[]) => { - return Promise.all(ms.map(async (msObj,i) => { + return Promise.all(ms.map(async (msObj, i) => { const mAuth = await this.api.getVault(msObj.publicKey); return { value: i, - name: `${mAuth.toBase58()} (${shortenTextEnd(msObj.publicKey.toBase58(),6)})`, - short: shortenTextEnd(mAuth.toBase58(),6) - } + name: `${mAuth.toBase58()} (${shortenTextEnd(msObj.publicKey.toBase58(), 6)})`, + short: shortenTextEnd(mAuth.toBase58(), 6), + }; })); - } + }; this.header(); const spinner = new Spinner("Loading multisigs..."); spinner.start(); @@ -133,25 +155,21 @@ class Menu{ const testList = await loadAuthorities(this.multisigs); const dIndex = testList.length; - testList.push({name:"<- Go back", value: dIndex, short: "Go back"}); + testList.push({ name: "<- Go back", value: dIndex, short: "Go back" }); const {action} = await viewMultisigsMenu(testList, dIndex); - if (action === dIndex) { - this.top(); - }else{ - const chosenMultisig = this.multisigs[action]; - this.multisig(chosenMultisig); - } + if (action === dIndex) return () => this.top(); + return () => this.multisig(this.multisigs[action]); } catch (error) { spinner.stop(); console.log(error); console.log("Try restarting the cli using a different Solana cluster"); await continueInq(); - this.top(); + return () => this.top(); } }; - multisig = async (ms: MultisigAccount) => { + multisig = async (ms: MultisigAccount): Promise => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); console.log("Info"); @@ -160,63 +178,45 @@ class Menu{ console.log("Multisig account: " + chalk.white(ms.publicKey.toBase58())); console.log(" "); const {action} = await multisigMainMenu(ms); - if (action === "Vault") { - // load vault assets - let status = new Spinner("Loading vault"); + if (action === MULTISIG.VAULT) { + const status = new Spinner("Loading vault"); status.start(); const vaultPDA = await this.api.getVault(ms.publicKey); - const vault = await this.api.getVaultAssets(vaultPDA); + const vaultAssets = await this.api.getVaultAssets(vaultPDA); status.stop(); - this.vault(ms,vaultPDA, vault); + return () => this.vault(ms, vaultPDA, vaultAssets); } - else if (action === "Settings") { - this.settings(ms); + else if (action === MULTISIG.SETTINGS) { + return () => this.settings(ms); } - else if (action === "Transactions") { + else if (action === MULTISIG.TRANSACTIONS) { const status = new Spinner("Loading transactions..."); status.start(); // first get/flash the ms to see if the transactionIndex has changed const msState = await this.api.squads.getMultisig(ms.publicKey); const txs = await this.api.getTransactions(msState); status.stop(); - this.transactions(txs, msState); - } - else if (action === "Create new Transaction") { - this.createTransaction(ms); - } - else if (action === "Program Authority Transfer") { - this.program(ms); - } - else if (action === "Create new ATA") { - this.ata(ms); - } - else if (action === "Bulk NFT Operations") { - this.nfts(ms); - } else if (action === "Validator") { - this.validator(ms); - }else{ - this.multisigList(); + return () => this.transactions(txs, msState); } + else if (action === MULTISIG.CREATE_TX) return () => this.createTransaction(ms); + else if (action === MULTISIG.PROGRAM_AUTHORITY) return () => this.program(ms); + else if (action === MULTISIG.CREATE_ATA) return () => this.ata(ms); + else if (action === MULTISIG.BULK_NFT) return () => this.nfts(ms); + else if (action === MULTISIG.VALIDATOR) return () => this.validator(ms); + else return () => this.multisigList(); }; - transactions = async (txs: TransactionAccount[], ms: MultisigAccount) => { + transactions = async (txs: TransactionAccount[], ms: MultisigAccount): Promise => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {action} = await transactionsMenu(txs, this.wallet.publicKey); - if(action === "<- Go back") { - this.multisig(ms); - }else{ - const txKey = action.split(" ")[0]; - const tx = txs.find(t => t.publicKey.toBase58() === txKey); - if (!tx) { - this.multisig(ms); - return; - } - this.transaction(tx, ms, txs); - } + if (action === null) return () => this.multisig(ms); + const tx = txs.find(t => t.publicKey.toBase58() === action); + if (!tx) return () => this.multisig(ms); + return () => this.transaction(tx, ms, txs); }; - createTransaction = async (ms: MultisigAccount) => { + createTransaction = async (ms: MultisigAccount): Promise => { const {assemble} = await inquirer.prompt({ default: "", name: 'assemble', @@ -225,92 +225,78 @@ class Menu{ message: 'How do you want to create the transaction?', }); - if(assemble.indexOf("Assemble") == 0){ + if (assemble.indexOf("Assemble") == 0) { const {authority} = await createTransactionInq(); const authorityPDA = await this.api.getAuthority(ms.publicKey, parseInt(authority, 10)); const status = new Spinner("Creating transaction..."); console.log("This will create a new transaction draft for authority " + chalk.blue(authorityPDA.toBase58())); const {yes} = await basicConfirm("Continue?", false); - if (yes){ - status.start(); - const tx = await this.api.createTransaction(ms.publicKey, parseInt(authority,10)); - status.stop(); - console.log("Transaction created!"); - console.log("Transaction key: " + chalk.blue(tx.publicKey.toBase58())); - await continueInq(); - const txs = await this.api.getTransactions(ms); - this.transactions(txs, ms); - }else { - this.multisig(ms); - } - }else if(assemble.indexOf("Enter") == 0) { + if (!yes) return () => this.multisig(ms); + status.start(); + const tx = await this.api.createTransaction(ms.publicKey, parseInt(authority, 10)); + status.stop(); + console.log("Transaction created!"); + console.log("Transaction key: " + chalk.blue(tx.publicKey.toBase58())); + await continueInq(); + const txs = await this.api.getTransactions(ms); + return () => this.transactions(txs, ms); + } + if (assemble.indexOf("Enter") == 0) { const {authority} = await createTransactionInq(); const authorityPDA = await this.api.getAuthority(ms.publicKey, parseInt(authority, 10)); const {rawIx} = await addTransactionInq(); - if (rawIx.length > 1) { - const status = new Spinner("Creating transaction..."); - const status2 = new Spinner(`Adding instruction...`); - try { - const txBuffer = anchor.utils.bytes.bs58.decode(rawIx); - clear(); - this.header(); - const rawTxMessage = anchor.web3.Message.from(txBuffer); - const tx = anchor.web3.Transaction.populate(rawTxMessage); - const ixes = tx.instructions; - console.log("This will create a new multisig transaction for authority/signer " + chalk.blue(authorityPDA.toBase58())); - const {yes} = await basicConfirm(`Create a transaction with ${ixes.length} instructions?`, false); - if (yes) { - - status.start(); - const tx = await this.api.createTransaction(ms.publicKey, parseInt(authority, 10)); - status.stop(); - console.log(`Transaction ${tx.publicKey.toBase58()} created!`); - // add instructions to transaction - for (let i = 0; i < ixes.length; i++) { - console.log(`attaching instruction ${i + 1}/${ixes.length}`); - status2.start(); - const ix = ixes[i]; - await this.api.addInstruction(tx.publicKey, ix); - status2.stop(); - } - await this.api.activate(tx.publicKey) - await this.api.approveTransaction(tx.publicKey) - console.log("Transaction created!"); - // console.log("Transaction key: " + chalk.blue(tx.publicKey.toBase58())); - await continueInq(); - const txs = await this.api.getTransactions(ms); - this.transactions(txs, ms); - }else{ - this.multisig(ms); - } - }catch (e) { - console.log("Error", e); - status.stop(); + if (rawIx.length <= 1) return () => this.multisig(ms); + const status = new Spinner("Creating transaction..."); + const status2 = new Spinner(`Adding instruction...`); + try { + const txBuffer = anchor.utils.bytes.bs58.decode(rawIx); + clear(); + this.header(); + const rawTxMessage = anchor.web3.Message.from(txBuffer); + const populatedTx = anchor.web3.Transaction.populate(rawTxMessage); + const ixes = populatedTx.instructions; + console.log("This will create a new multisig transaction for authority/signer " + chalk.blue(authorityPDA.toBase58())); + const {yes} = await basicConfirm(`Create a transaction with ${ixes.length} instructions?`, false); + if (!yes) return () => this.multisig(ms); + status.start(); + const tx = await this.api.createTransaction(ms.publicKey, parseInt(authority, 10)); + status.stop(); + console.log(`Transaction ${tx.publicKey.toBase58()} created!`); + for (let i = 0; i < ixes.length; i++) { + console.log(`attaching instruction ${i + 1}/${ixes.length}`); + status2.start(); + await this.api.addInstruction(tx.publicKey, ixes[i]); status2.stop(); - await continueInq(); - this.multisig(ms); } - }else{ - this.multisig(ms); + await this.api.activate(tx.publicKey); + await this.api.approveTransaction(tx.publicKey); + console.log("Transaction created!"); + await continueInq(); + const txs = await this.api.getTransactions(ms); + return () => this.transactions(txs, ms); + } catch (e) { + console.log("Error", e); + status.stop(); + status2.stop(); + await continueInq(); + return () => this.multisig(ms); } - }else{ - this.multisig(ms); } + return () => this.multisig(ms); }; - // Run a confirm → spinner → api call → splice-and-recurse flow for tx status changes - // (approve/activate/reject/cancel). Errors and the "no" path both recurse with the original tx. + // Run a confirm → spinner → api call → splice-and-return-next flow for tx status changes + // (approve/activate/reject/cancel). Errors and the "no" path both return the user to the + // transaction screen with the original tx. private runTxAction = async ( tx: TransactionAccount, ms: MultisigAccount, txs: TransactionAccount[], apiFn: (txPubkey: PublicKey) => Promise, msgs: { confirm: string; spinner: string; success: string }, - ) => { + ): Promise => { const {yes} = await basicConfirm(msgs.confirm, false); - if (!yes) { - return this.transaction(tx, ms, txs); - } + if (!yes) return () => this.transaction(tx, ms, txs); const status = new Spinner(msgs.spinner); status.start(); try { @@ -320,16 +306,16 @@ class Menu{ txs.splice(newInd, 1, updatedTx); console.log(msgs.success); await continueInq(); - this.transaction(updatedTx, ms, txs); - } catch(e) { + return () => this.transaction(updatedTx, ms, txs); + } catch (e) { status.stop(); console.log("Error!", e); await continueInq(); - this.transaction(tx, ms, txs); + return () => this.transaction(tx, ms, txs); } }; - transaction = async (tx: TransactionAccount, ms: MultisigAccount, txs: TransactionAccount[]) => { + transaction = async (tx: TransactionAccount, ms: MultisigAccount, txs: TransactionAccount[]): Promise => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); const authority = await this.api.getAuthority(ms.publicKey, tx.authorityIndex); @@ -351,344 +337,298 @@ class Menu{ console.log(""); const {action} = await transactionPrompt(tx); - if(action === "<- Go back") { - this.transactions(txs, ms); - }else if (action === "Approve") { - await this.runTxAction(tx, ms, txs, t => this.api.approveTransaction(t), { + if (action === TX_ACTION.BACK) return () => this.transactions(txs, ms); + if (action === TX_ACTION.APPROVE) { + return this.runTxAction(tx, ms, txs, t => this.api.approveTransaction(t), { confirm: "Approve this transaction?", spinner: "Approving transaction...", success: "Transaction approved", }); - }else if (action === "Execute") { - const {yes} = await basicConfirm(`Execute this transaction?`,false); - if (yes) { - const status = new Spinner("Executing transaction..."); - status.start(); - let successfullyExecuted = 0; - const additionalComputeBudgetInstruction = - ComputeBudgetProgram.setComputeUnitLimit({ - units: EXECUTE_IX_COMPUTE_UNIT_LIMIT, - }) - try { - if(tx.instructionIndex > 3) { - for (let ixIndex = tx.executedIndex + 1; ixIndex <= tx.instructionIndex; ixIndex++){ - const [ixPDA] = getIxPDA(tx.publicKey, new anchor.BN(ixIndex), this.api.programId); - console.log("invoking instruction ", ixIndex); - try { - const ix = await this.api.executeInstructionBuilder(tx.publicKey, ixPDA); - const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); - const executeIxTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); - executeIxTx.add(additionalComputeBudgetInstruction,ix); - const signed = await this.wallet.signTransaction(executeIxTx); - const txid = await this.api.connection.sendRawTransaction(signed.serialize(), {skipPreflight: true}); - console.log(`ix ${ixIndex} signature: ${txid}`); - await this.api.connection.confirmTransaction(txid, "confirmed"); - await this.api.squads.getTransaction(tx.publicKey) - }catch(e){ - console.log("Error executing instruction, trying it again"); - await this.api.squads.getTransaction(tx.publicKey); - const ix = await this.api.executeInstructionBuilder(tx.publicKey, ixPDA); - const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); - const executeIxTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); - executeIxTx.add(additionalComputeBudgetInstruction,ix); - const signed = await this.wallet.signTransaction(executeIxTx); - const txid = await this.api.connection.sendRawTransaction(signed.serialize(), {skipPreflight: true}); - console.log(`ix ${ixIndex} retry signature: ${txid}`); - await this.api.connection.confirmTransaction(txid, "confirmed"); - } - await this.api.squads.getTransaction(tx.publicKey); - successfullyExecuted++; - } - } else { - const ix = await this.api.executeTransactionBuilder(tx.publicKey); - const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); - const executeTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); - executeTx.add(additionalComputeBudgetInstruction,ix); - const signed = await this.wallet.signTransaction(executeTx); - const txid = await this.api.connection.sendRawTransaction(signed.serialize()); - await this.api.connection.confirmTransaction(txid, "processed"); - } - status.stop(); - const updatedTx = await this.api.squads.getTransaction(tx.publicKey); - const newInd = txs.findIndex(t => t.publicKey.toBase58() === tx.publicKey.toBase58()); - txs.splice(newInd, 1, updatedTx); - console.log("Transaction executed"); - const updatedMs = await this.api.squads.getMultisig(ms.publicKey); - await continueInq(); - this.transaction(updatedTx, updatedMs, txs); - }catch(e){ - status.stop(); - console.log(`Executed ${successfullyExecuted} instructions`); - console.log(`Terminated remaining execution because of an error: ${JSON.stringify(e)}`); - const updatedTx = await this.api.squads.getTransaction(tx.publicKey); - await continueInq(); - this.transaction(updatedTx, ms, txs); - } - - }else{ - const updatedTx = await this.api.squads.getTransaction(tx.publicKey); - this.transaction(updatedTx, ms, txs); - } - }else if(action === "Add Instruction"){ - const ix = await addInstructionInq(); - if (ix && ix.programId){ - clear(); - this.header(); - console.log("ProgramId: " + chalk.blue(ix.programId.toBase58())); - console.log("Data: ", ix.data); - console.table(ix.keys.map(a => { - return { - "Account": a.pubkey.toBase58(), - "Is signer": a.isSigner, - "Is writable": a.isWritable, - } - })); - const {yes} = await basicConfirm(`Add this instruction?`,false); - if (yes) { - let newTx = tx; - const status = new Spinner("Adding instruction..."); - status.start(); - try { - await this.api.addInstruction(tx.publicKey, ix); - newTx = await this.api.squads.getTransaction(tx.publicKey); - status.stop(); - console.log("Instruction added!"); - await continueInq(); - }catch(e){ - status.stop(); - console.log(e); - await continueInq(); - this.transaction(tx, ms, txs); - } - this.transaction(newTx, ms, txs); - } - }else{ - this.transaction(tx, ms, txs); - } } - else if (action === "Activate") { - await this.runTxAction(tx, ms, txs, t => this.api.activate(t), { + if (action === TX_ACTION.ACTIVATE) { + return this.runTxAction(tx, ms, txs, t => this.api.activate(t), { confirm: "Activate this transaction?", spinner: "Activating transaction...", success: "Activated Transaction", }); } - else if (action === "Reject") { - await this.runTxAction(tx, ms, txs, t => this.api.rejectTransaction(t), { + if (action === TX_ACTION.REJECT) { + return this.runTxAction(tx, ms, txs, t => this.api.rejectTransaction(t), { confirm: "Reject this transaction?", spinner: "Rejecting transaction...", success: "Transaction rejected", }); } - else if (action === "Submit to cancel") { - await this.runTxAction(tx, ms, txs, t => this.api.cancelTransaction(t), { + if (action === TX_ACTION.CANCEL) { + return this.runTxAction(tx, ms, txs, t => this.api.cancelTransaction(t), { confirm: "Cancel this transaction?", spinner: "Cancelling transaction...", success: "Transaction cancel submitted", }); } - else{ - this.transaction(tx, ms, txs); + if (action === TX_ACTION.EXECUTE) { + const {yes} = await basicConfirm(`Execute this transaction?`, false); + if (!yes) { + const updatedTx = await this.api.squads.getTransaction(tx.publicKey); + return () => this.transaction(updatedTx, ms, txs); + } + const status = new Spinner("Executing transaction..."); + status.start(); + let successfullyExecuted = 0; + const additionalComputeBudgetInstruction = ComputeBudgetProgram.setComputeUnitLimit({ + units: EXECUTE_IX_COMPUTE_UNIT_LIMIT, + }); + try { + if (tx.instructionIndex > 3) { + for (let ixIndex = tx.executedIndex + 1; ixIndex <= tx.instructionIndex; ixIndex++) { + const [ixPDA] = getIxPDA(tx.publicKey, new anchor.BN(ixIndex), this.api.programId); + console.log("invoking instruction ", ixIndex); + try { + const ix = await this.api.executeInstructionBuilder(tx.publicKey, ixPDA); + const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); + const executeIxTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); + executeIxTx.add(additionalComputeBudgetInstruction, ix); + const signed = await this.wallet.signTransaction(executeIxTx); + const txid = await this.api.connection.sendRawTransaction(signed.serialize(), {skipPreflight: true}); + console.log(`ix ${ixIndex} signature: ${txid}`); + await this.api.connection.confirmTransaction(txid, "confirmed"); + await this.api.squads.getTransaction(tx.publicKey); + } catch (_e) { + console.log("Error executing instruction, trying it again"); + await this.api.squads.getTransaction(tx.publicKey); + const ix = await this.api.executeInstructionBuilder(tx.publicKey, ixPDA); + const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); + const executeIxTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); + executeIxTx.add(additionalComputeBudgetInstruction, ix); + const signed = await this.wallet.signTransaction(executeIxTx); + const txid = await this.api.connection.sendRawTransaction(signed.serialize(), {skipPreflight: true}); + console.log(`ix ${ixIndex} retry signature: ${txid}`); + await this.api.connection.confirmTransaction(txid, "confirmed"); + } + await this.api.squads.getTransaction(tx.publicKey); + successfullyExecuted++; + } + } else { + const ix = await this.api.executeTransactionBuilder(tx.publicKey); + const {blockhash, lastValidBlockHeight} = await this.api.connection.getLatestBlockhash(); + const executeTx = new Transaction({lastValidBlockHeight, blockhash, feePayer: this.wallet.publicKey}); + executeTx.add(additionalComputeBudgetInstruction, ix); + const signed = await this.wallet.signTransaction(executeTx); + const txid = await this.api.connection.sendRawTransaction(signed.serialize()); + await this.api.connection.confirmTransaction(txid, "processed"); + } + status.stop(); + const updatedTx = await this.api.squads.getTransaction(tx.publicKey); + const newInd = txs.findIndex(t => t.publicKey.toBase58() === tx.publicKey.toBase58()); + txs.splice(newInd, 1, updatedTx); + console.log("Transaction executed"); + const updatedMs = await this.api.squads.getMultisig(ms.publicKey); + await continueInq(); + return () => this.transaction(updatedTx, updatedMs, txs); + } catch (e) { + status.stop(); + console.log(`Executed ${successfullyExecuted} instructions`); + console.log(`Terminated remaining execution because of an error: ${JSON.stringify(e)}`); + const updatedTx = await this.api.squads.getTransaction(tx.publicKey); + await continueInq(); + return () => this.transaction(updatedTx, ms, txs); + } + } + if (action === TX_ACTION.ADD_IX) { + const ix = await addInstructionInq(); + if (!ix || !ix.programId) return () => this.transaction(tx, ms, txs); + clear(); + this.header(); + console.log("ProgramId: " + chalk.blue(ix.programId.toBase58())); + console.log("Data: ", ix.data); + console.table(ix.keys.map(a => ({ + "Account": a.pubkey.toBase58(), + "Is signer": a.isSigner, + "Is writable": a.isWritable, + }))); + const {yes} = await basicConfirm(`Add this instruction?`, false); + if (!yes) return () => this.transaction(tx, ms, txs); + const status = new Spinner("Adding instruction..."); + status.start(); + try { + await this.api.addInstruction(tx.publicKey, ix); + const newTx = await this.api.squads.getTransaction(tx.publicKey); + status.stop(); + console.log("Instruction added!"); + await continueInq(); + return () => this.transaction(newTx, ms, txs); + } catch (e) { + status.stop(); + console.log(e); + await continueInq(); + return () => this.transaction(tx, ms, txs); + } } + return () => this.transaction(tx, ms, txs); }; - vault = async (ms: MultisigAccount, vaultPDA: PublicKey, vd: AssetBundle) => { + vault = async (ms: MultisigAccount, vaultPDA: PublicKey, vd: AssetBundle): Promise => { this.header(); console.log("Vault Address: " + chalk.blue(vaultPDA.toBase58())); console.table(vd.displayTokens); await continueInq(); - this.multisig(ms); - } + return () => this.multisig(ms); + }; - settings = async (ms: MultisigAccount) => { + settings = async (ms: MultisigAccount): Promise => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); - const owners = ms.keys.map((m: PublicKey) => { - return m.toBase58(); - }) - console.table([{"Owners": owners}]); + const owners = ms.keys.map((m: PublicKey) => m.toBase58()); + console.table([{ "Owners": owners }]); console.table([{ "Threshold": ms.threshold, "Members": ms.keys.length, "Vault (Default Authority 1)": vault, }]); const {action} = await multisigSettingsMenu(); - if (action === "Add a key") { - this.addKey(ms); - }else if (action === "Remove a key") { - this.removeKey(ms); - }else if (action === "Change threshold") { - this.changeThreshold(ms); - }else{ - this.multisig(ms); - } - } + if (action === SETTINGS.ADD_KEY) return () => this.addKey(ms); + if (action === SETTINGS.REMOVE_KEY) return () => this.removeKey(ms); + if (action === SETTINGS.CHANGE_THRESHOLD) return () => this.changeThreshold(ms); + return () => this.multisig(ms); + }; - addKey = async (ms: MultisigAccount) => { + addKey = async (ms: MultisigAccount): Promise => { const {memberKey} = await inquirer.prompt({default: "", name: 'memberKey', type: 'input', message: `Enter the public key of the member you want to add (base58):`}); - if (memberKey === "") { - this.settings(ms); - }else { - const {yes} = await basicConfirm(`Create transaction to add ${memberKey}?`, false); - const newKey = new PublicKey(memberKey); - if (yes) { - const status = new Spinner("Creating New Member Transaction..."); - status.start(); - try{ - await this.api.addKeyTransaction(ms.publicKey, newKey); - status.stop(); - console.log("Transaction created!"); - await continueInq(); - const newMs = await this.api.squads.getMultisig(ms.publicKey); - this.multisig(newMs); - }catch(e) { - status.stop(); - console.log("Error!", e); - await continueInq(); - this.settings(ms); - } - }else { - this.addKey(ms); - } + if (memberKey === "") return () => this.settings(ms); + const {yes} = await basicConfirm(`Create transaction to add ${memberKey}?`, false); + if (!yes) return () => this.addKey(ms); + const newKey = new PublicKey(memberKey); + const status = new Spinner("Creating New Member Transaction..."); + status.start(); + try { + await this.api.addKeyTransaction(ms.publicKey, newKey); + status.stop(); + console.log("Transaction created!"); + await continueInq(); + const newMs = await this.api.squads.getMultisig(ms.publicKey); + return () => this.multisig(newMs); + } catch (e) { + status.stop(); + console.log("Error!", e); + await continueInq(); + return () => this.settings(ms); } }; - removeKey = async (ms: MultisigAccount) => { + removeKey = async (ms: MultisigAccount): Promise => { this.header(); const choices = ms.keys.map((k: PublicKey) => k.toBase58()); choices.push("<- Go back"); const {memberKey} = await inquirer.prompt({choices, name: 'memberKey', type: 'list', message: `Which key do you want to remove?`}); - if (memberKey === "<- Go back") { - this.settings(ms); - }else { - const {yes} = await basicConfirm(`Create transaction to remove ${memberKey}?`, false); - if (yes) { - const status = new Spinner("Creating Remove Member Transaction..."); - status.start(); - try { - const exKey = new PublicKey(memberKey); - await this.api.removeKeyTransaction(ms.publicKey, exKey); - status.stop(); - const newMs = await this.api.squads.getMultisig(ms.publicKey); - await continueInq(); - this.multisig(newMs); - }catch(e) { - status.stop(); - console.log("Error!", e); - await continueInq(); - this.settings(ms); - } - }else { - this.removeKey(ms); - } + if (memberKey === "<- Go back") return () => this.settings(ms); + const {yes} = await basicConfirm(`Create transaction to remove ${memberKey}?`, false); + if (!yes) return () => this.removeKey(ms); + const status = new Spinner("Creating Remove Member Transaction..."); + status.start(); + try { + const exKey = new PublicKey(memberKey); + await this.api.removeKeyTransaction(ms.publicKey, exKey); + status.stop(); + const newMs = await this.api.squads.getMultisig(ms.publicKey); + await continueInq(); + return () => this.multisig(newMs); + } catch (e) { + status.stop(); + console.log("Error!", e); + await continueInq(); + return () => this.settings(ms); } }; - changeThreshold = async (ms: MultisigAccount) => { + changeThreshold = async (ms: MultisigAccount): Promise => { this.header(); - const choices = ms.keys.map((k: PublicKey) => k.toBase58()); - choices.push("<- Go back"); const {threshold} = await inquirer.prompt({ default: "", name: 'threshold', type: 'input', message: `Enter the new proposed threshold`, validate: (t) => { - if (parseInt(t,10)>ms.keys.length){ + if (parseInt(t, 10) > ms.keys.length) { return "Threshold cannot be greater than the number of members"; - }else{ - return true; } - } + return true; + }, }); - if (threshold === "") { - this.settings(ms); - }else { - const {yes} = await basicConfirm(`Create transaction to change threshold to ${threshold}?`, false); - if (yes) { - const status = new Spinner("Creating Change Threshold Transaction..."); - status.start(); - try { - await this.api.changeThresholdTransaction(ms.publicKey, threshold); - status.stop(); - const newMs = await this.api.squads.getMultisig(ms.publicKey); - await continueInq(); - this.multisig(newMs); - }catch(e) { - status.stop(); - console.log("Error!", e); - await continueInq(); - this.settings(ms); - } - }else { - this.settings(ms); - } + if (threshold === "") return () => this.settings(ms); + const {yes} = await basicConfirm(`Create transaction to change threshold to ${threshold}?`, false); + if (!yes) return () => this.settings(ms); + const status = new Spinner("Creating Change Threshold Transaction..."); + status.start(); + try { + await this.api.changeThresholdTransaction(ms.publicKey, threshold); + status.stop(); + const newMs = await this.api.squads.getMultisig(ms.publicKey); + await continueInq(); + return () => this.multisig(newMs); + } catch (e) { + status.stop(); + console.log("Error!", e); + await continueInq(); + return () => this.settings(ms); } }; - top = async () => { + top = async (): Promise => { if (!this.balanceFetched) { - // First entry: block on the initial balance so the header shows real data. this.balanceFetched = true; this.walletBalance = await this.api.getWalletBalance(); } this.header(); const {action} = await mainMenu(); - if(action === 'View my Multisigs') { - this.multisigList(); - } else if (action === 'Create a new Multisig') { - this.create(); - } else { - clear(); - console.log(chalk.blue("Goodbye!")); - } - } + if (action === TOP.VIEW) return () => this.multisigList(); + if (action === TOP.CREATE) return () => this.create(); + clear(); + console.log(chalk.blue("Goodbye!")); + return null; + }; - program = async (ms: MultisigAccount) => { + program = async (ms: MultisigAccount): Promise => { this.header(); const vault = await this.api.getVault(ms.publicKey); const {programId} = await promptProgramId(); - if (programId.length < 1) { - this.multisig(ms); - }else{ - const status = new Spinner('Fetching program data...'); - status.start(); - try { - const programAuthority = await this.api.getProgramDataAuthority(new anchor.web3.PublicKey(programId)); - console.log(chalk.blue("Current program data authority: " + programAuthority)); - status.stop(); - if (programAuthority === this.wallet.publicKey.toBase58()) { - this.programAuthorityChange(ms, programAuthority, programId, { - key: vault, - label: "Vault - authority index 1", - direction: "to", - }); - } else if (programAuthority === vault.toBase58()) { - this.programAuthorityChange(ms, programAuthority, programId, { - key: this.wallet.publicKey, - label: "Your connected wallet", - direction: "out of", - }); - } else { - await inquirer.prompt({default: false, name: 'action', type: 'input', message: `Neither the connected wallet nor this Squad have authority over this program - Enter to continue`}); - this.program(ms); - } - }catch(e){ - console.log(e); - status.stop(); - console.log('Program data authority not found'); - await continueInq(); - this.program(ms); + if (programId.length < 1) return () => this.multisig(ms); + const status = new Spinner('Fetching program data...'); + status.start(); + try { + const programAuthority = await this.api.getProgramDataAuthority(new anchor.web3.PublicKey(programId)); + console.log(chalk.blue("Current program data authority: " + programAuthority)); + status.stop(); + if (programAuthority === this.wallet.publicKey.toBase58()) { + return () => this.programAuthorityChange(ms, programAuthority, programId, { + key: vault, + label: "Vault - authority index 1", + direction: "to", + }); + } + if (programAuthority === vault.toBase58()) { + return () => this.programAuthorityChange(ms, programAuthority, programId, { + key: this.wallet.publicKey, + label: "Your connected wallet", + direction: "out of", + }); } + await inquirer.prompt({default: false, name: 'action', type: 'input', message: `Neither the connected wallet nor this Squad have authority over this program - Enter to continue`}); + return () => this.program(ms); + } catch (e) { + console.log(e); + status.stop(); + console.log('Program data authority not found'); + await continueInq(); + return () => this.program(ms); } - } + }; private programAuthorityChange = async ( ms: MultisigAccount, currentAuthority: string, programId: string, destination: { key: PublicKey; label: string; direction: "to" | "out of" }, - ) => { + ): Promise => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); console.log(`This will create a safe upgrade authority transfer transaction of ${programId} ${destination.direction} the Squad vault`); @@ -697,9 +637,7 @@ class Menu{ console.log(`Current Program Authority: ` + chalk.white(`${currentAuthority}`)); console.log(`New Program Upgrade Authority: ` + chalk.green(destination.key.toBase58()) + chalk.white(` (${destination.label})`)); const {action} = await inquirer.prompt({default: false, name: 'action', type: 'confirm', message: `Continue?`}); - if (!action) { - return this.program(ms); - } + if (!action) return () => this.program(ms); const status = new Spinner('Creating transaction...'); status.start(); try { @@ -708,23 +646,21 @@ class Menu{ console.log(chalk.green("Transaction created!")); console.log(chalk.blue("Transaction ID: ") + chalk.white(tx)); await continueInq(); - this.multisig(ms); - } catch(e) { + return () => this.multisig(ms); + } catch (e) { console.log(e); status.stop(); console.log(`Transaction creation failed - Enter to continue`); await continueInq(); - this.program(ms); + return () => this.program(ms); } }; - create = async () => { + create = async (): Promise => { this.header(); let initKey = anchor.web3.Keypair.generate().publicKey.toBase58(); const {createKey} = await createMultisigCreateKeyInq(); - if (createKey.length > 0) { - initKey = createKey; - } + if (createKey.length > 0) initKey = createKey; const members: string[] = []; const walletKey = this.wallet.publicKey.toBase58(); const {member} = await createMultisigMemberInq(); @@ -738,42 +674,36 @@ class Menu{ } const {threshold} = await createMultisigThresholdInq(members.length + 1); const {action} = await createMultisigConfirmInq(initKey, members, threshold); - if (action) { - const createMembers = members.map(m => new anchor.web3.PublicKey(m)); - createMembers.push(this.wallet.publicKey); - const status = new Spinner("Creating multisig..."); - status.start(); - try { - const ms = await this.api.createMultisig( - threshold, - new anchor.web3.PublicKey(initKey), - createMembers - ); - status.stop(); - console.log(`Created new multisig! (${ms.publicKey.toBase58()})`); - await continueInq(); - // const squads = await this.api.getSquads(this.wallet.publicKey); - // this.multisigs = squads; - this.multisigs.push(ms); - this.multisig(ms); - }catch(e) { - status.stop(); - console.log(`Error! (${e})`); - await continueInq(); - this.top(); - } - - }else{ - this.top(); + if (!action) return () => this.top(); + const createMembers = members.map(m => new anchor.web3.PublicKey(m)); + createMembers.push(this.wallet.publicKey); + const status = new Spinner("Creating multisig..."); + status.start(); + try { + const ms = await this.api.createMultisig( + threshold, + new anchor.web3.PublicKey(initKey), + createMembers, + ); + status.stop(); + console.log(`Created new multisig! (${ms.publicKey.toBase58()})`); + await continueInq(); + this.multisigs.push(ms); + return () => this.multisig(ms); + } catch (e) { + status.stop(); + console.log(`Error! (${e})`); + await continueInq(); + return () => this.top(); } } - ata = async (ms: MultisigAccount) => { + ata = async (ms: MultisigAccount): Promise => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); const ataKeys = await createATAInq(vault); - if(ataKeys){ + if (ataKeys) { const {yes} = await basicConfirm(`Create new ATA for mint ${ataKeys.mint} and owner ${ataKeys.owner} ?`); if (yes) { const status = new Spinner("Creating ATA..."); @@ -783,43 +713,35 @@ class Menu{ status.stop(); console.log("Successfully created new ATA at: " + chalk.green(newATA.toBase58())); await continueInq(); - }catch(e) { + } catch (e) { status.stop(); console.log(`Error! (${e})`); await continueInq(); } } } - this.multisig(ms); - } + return () => this.multisig(ms); + }; - nfts = async (ms: MultisigAccount) => { + nfts = async (ms: MultisigAccount): Promise => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {action} = await nftMainInq(); - if (action === 0) { - this.nftAuthorityChange(ms); - } else if (action === 1) { - this.nftValidateMetaAuthorities(ms); - } else if (action === 2) { - this.nftBatchTransfer(ms); - } else { - this.multisig(ms); - } - } + if (action === 0) return () => this.nftAuthorityChange(ms); + if (action === 1) return () => this.nftValidateMetaAuthorities(ms); + if (action === 2) return () => this.nftBatchTransfer(ms); + return () => this.multisig(ms); + }; - validator = async (ms: MultisigAccount) => { - clear() + validator = async (ms: MultisigAccount): Promise => { + clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {action} = await validatorMainInq(); - if (action === 0) { - this.validatorWithdrawAuthorityChange(ms); - } else { - this.multisig(ms); - } - } + if (action === 0) return () => this.validatorWithdrawAuthorityChange(ms); + return () => this.multisig(ms); + }; // Note: this flow is intentionally one-way (vault -> external). Moving a // validator's withdraw authority *into* the vault requires the *current* @@ -827,43 +749,36 @@ class Menu{ // the wallet or the vault. Users who want to delegate authority to a Squad // should run that transfer through a separate tool that holds the current // authority's key. - validatorWithdrawAuthorityChange = async (ms: MultisigAccount) => { + validatorWithdrawAuthorityChange = async (ms: MultisigAccount): Promise => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); const {validatorId} = await validatorWithdrawAuthPrompt(); - if (validatorId.length < 1) { - this.validator(ms); - }else{ - const status = new Spinner('Fetching validator data...'); - status.start(); - try { - const withdrawAuthority = await this.api.getValidatorWithdrawAuth(new anchor.web3.PublicKey(validatorId)); - if (!withdrawAuthority) - throw Error("Not a validator") - console.log(chalk.blue("Current validator withdraw authority: ") + withdrawAuthority); - status.stop(); - if (withdrawAuthority !== vault.toBase58()) { - await inquirer.prompt({default: false, name: 'action', type: 'input', message: `The given validator withdraw auth is not in this squad - Enter to continue`}); - this.validator(ms); - }else{ - const {destination} = await validatorWithdrawAuthDestPrompt(); - if (destination.length < 1) - this.validator(ms); - else - this.transferWithdrawAuthorityOut(ms, withdrawAuthority, validatorId, destination); - } - }catch(e){ - console.log(e) - status.stop(); - console.log('The key used is not a validator one'); - await continueInq(); - this.validator(ms); + if (validatorId.length < 1) return () => this.validator(ms); + const status = new Spinner('Fetching validator data...'); + status.start(); + try { + const withdrawAuthority = await this.api.getValidatorWithdrawAuth(new anchor.web3.PublicKey(validatorId)); + if (!withdrawAuthority) throw Error("Not a validator"); + console.log(chalk.blue("Current validator withdraw authority: ") + withdrawAuthority); + status.stop(); + if (withdrawAuthority !== vault.toBase58()) { + await inquirer.prompt({default: false, name: 'action', type: 'input', message: `The given validator withdraw auth is not in this squad - Enter to continue`}); + return () => this.validator(ms); } + const {destination} = await validatorWithdrawAuthDestPrompt(); + if (destination.length < 1) return () => this.validator(ms); + return () => this.transferWithdrawAuthorityOut(ms, withdrawAuthority, validatorId, destination); + } catch (e) { + console.log(e); + status.stop(); + console.log('The key used is not a validator one'); + await continueInq(); + return () => this.validator(ms); } - } + }; - transferWithdrawAuthorityOut = async (ms: MultisigAccount, withdrawAuthority: string, validatorId: string, destination: string) => { + transferWithdrawAuthorityOut = async (ms: MultisigAccount, withdrawAuthority: string, validatorId: string, destination: string): Promise => { const vault = await this.api.getVault(ms.publicKey); this.header(vault); console.log(`This will create a transaction for the transfer of the validator (${validatorId}) withdraw authority out of the Squad vault`); @@ -871,29 +786,26 @@ class Menu{ console.log(`Withdraw Authority: ` + chalk.white(`${withdrawAuthority}`)); console.log(`New Withdraw Authority: ` + chalk.white(`${destination}`)); const {action} = await inquirer.prompt({default: false, name: 'action', type: 'confirm', message: `Continue?`}); - if (action) { - const status = new Spinner('Creating transaction...'); - status.start(); - try { - const tx = await this.api.createTransferWithdrawAuthTx(ms.publicKey, new PublicKey(validatorId), new PublicKey(withdrawAuthority), new PublicKey(destination)); - status.stop(); - console.log(chalk.green("Transaction created!")); - console.log(chalk.blue("Transaction ID: ") + chalk.white(tx)); - await continueInq(); - this.multisig(ms); - }catch(e){ - console.log(e); - status.stop(); - console.log(`Transaction creation failed - Enter to continue`); - await continueInq(); - this.validator(ms); - } - }else{ - this.validator(ms); + if (!action) return () => this.validator(ms); + const status = new Spinner('Creating transaction...'); + status.start(); + try { + const tx = await this.api.createTransferWithdrawAuthTx(ms.publicKey, new PublicKey(validatorId), new PublicKey(withdrawAuthority), new PublicKey(destination)); + status.stop(); + console.log(chalk.green("Transaction created!")); + console.log(chalk.blue("Transaction ID: ") + chalk.white(tx)); + await continueInq(); + return () => this.multisig(ms); + } catch (e) { + console.log(e); + status.stop(); + console.log(`Transaction creation failed - Enter to continue`); + await continueInq(); + return () => this.validator(ms); } - } + }; - nftAuthorityChange = async (ms: MultisigAccount) => { + nftAuthorityChange = async (ms: MultisigAccount): Promise => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -901,14 +813,13 @@ class Menu{ let newAuthority = vault; let error = false; if (type === 1) { - if(publicKey && publicKey.length > 0) { + if (publicKey && publicKey.length > 0) { newAuthority = new PublicKey(publicKey); - }else { + } else { error = true; } } - // load the mint list from the file path provided let allMints: PublicKey[] = []; try { allMints = loadNFTMints(mintList); @@ -917,27 +828,18 @@ class Menu{ error = true; } - if (error){ + if (error) { await continueInq(); - this.nfts(ms); - } else { - switch(type) { - case 0: - this.nftAuthorityChangeIncoming(ms, allMints, newAuthority); - break; - case 1: - this.nftAuthorityChangeOutgoing(ms, allMints, newAuthority); - break; - default: - await continueInq(); - this.nfts(ms); - break; - } + return () => this.nfts(ms); } - } + if (type === 0) return () => this.nftAuthorityChangeIncoming(ms, allMints, newAuthority); + if (type === 1) return () => this.nftAuthorityChangeOutgoing(ms, allMints, newAuthority); + await continueInq(); + return () => this.nfts(ms); + }; // this can simply be transferred to the vault directly with metaplex program - nftAuthorityChangeIncoming = async (ms: MultisigAccount, mintList: PublicKey[], newAuthority: PublicKey) => { + nftAuthorityChangeIncoming = async (ms: MultisigAccount, mintList: PublicKey[], newAuthority: PublicKey): Promise => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -1025,11 +927,11 @@ class Menu{ await continueInq(); } - this.nfts(ms); + return () => this.nfts(ms); }; // to move the authority out, transaction will need to be created - nftAuthorityChangeOutgoing = async (ms: MultisigAccount, mintList: PublicKey[], newAuthority: PublicKey) => { + nftAuthorityChangeOutgoing = async (ms: MultisigAccount, mintList: PublicKey[], newAuthority: PublicKey): Promise => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -1121,10 +1023,10 @@ class Menu{ console.log(`Output logs written to: ${logFilename}`); await continueInq(); } - this.nfts(ms); + return () => this.nfts(ms); }; - nftValidateMetaAuthorities = async (ms: MultisigAccount) => { + nftValidateMetaAuthorities = async (ms: MultisigAccount): Promise => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -1167,10 +1069,10 @@ class Menu{ await continueInq(); } } - this.nfts(ms); - } + return () => this.nfts(ms); + }; - nftBatchTransfer = async (ms: MultisigAccount) => { + nftBatchTransfer = async (ms: MultisigAccount): Promise => { clear(); const vault = await this.api.getVault(ms.publicKey); this.header(vault); @@ -1248,8 +1150,8 @@ class Menu{ } // this goes back to main nft menu await continueInq(); - this.nfts(ms); - } + return () => this.nfts(ms); + }; } export default Menu; diff --git a/src/lib/menuActions.ts b/src/lib/menuActions.ts new file mode 100644 index 0000000..5abd7fe --- /dev/null +++ b/src/lib/menuActions.ts @@ -0,0 +1,39 @@ +// Action constants for inquirer prompts. The prompt (`inq/*.js`) sets these +// as the `value` of each choice; the handler (`menu.ts`) compares against +// them. This way renaming a user-visible choice label doesn't silently break +// the handler. + +export const TOP = { + VIEW: 'view', + CREATE: 'create', + EXIT: 'exit', +} as const; + +export const MULTISIG = { + TRANSACTIONS: 'transactions', + CREATE_TX: 'create_tx', + VAULT: 'vault', + SETTINGS: 'settings', + CREATE_ATA: 'create_ata', + PROGRAM_AUTHORITY: 'program_authority', + BULK_NFT: 'bulk_nft', + VALIDATOR: 'validator', + BACK: 'back', +} as const; + +export const SETTINGS = { + ADD_KEY: 'add_key', + REMOVE_KEY: 'remove_key', + CHANGE_THRESHOLD: 'change_threshold', + BACK: 'back', +} as const; + +export const TX_ACTION = { + APPROVE: 'approve', + REJECT: 'reject', + EXECUTE: 'execute', + CANCEL: 'cancel', + ADD_IX: 'add_ix', + ACTIVATE: 'activate', + BACK: 'back', +} as const; diff --git a/src/lib/nfts.ts b/src/lib/nfts.ts index aedac47..59a0106 100644 --- a/src/lib/nfts.ts +++ b/src/lib/nfts.ts @@ -1,34 +1,23 @@ -import {NodeWallet, programs} from "@metaplex/js"; import {TOKEN_PROGRAM_ID} from '@solana/spl-token'; import * as anchor from "@coral-xyz/anchor"; -import {AccountInfo, Connection, Keypair, ParsedAccountData, PublicKey} from "@solana/web3.js"; +import {Connection, Keypair, PublicKey} from "@solana/web3.js"; import { + keypairIdentity, lamports, Metaplex, token, toMetadata, toMetadataAccount, - UnparsedMaybeAccount, walletAdapterIdentity + UnparsedMaybeAccount, } from "@metaplex-foundation/js"; import * as fs from "fs"; +import { getMultipleAccountsBatch } from "./utils.js"; import { METAPLEX_PROGRAM_ID, updateMetadataAuthorityIx } from "./metadataInstructions.js"; import {TokenStandard} from '@metaplex-foundation/mpl-token-metadata'; import Squads from "@sqds/sdk"; import type { Mutable, TxMetaPayload } from "../types.js"; -type ParsedTokenAccount = { pubkey: PublicKey; account: AccountInfo }; - -export const checkIsNFT = async (connection: Connection, acc: ParsedTokenAccount) => { - try { - const edition = await programs.metadata.Metadata.getEdition(connection, acc.account.data.parsed.info.mint) - if (edition) - return true; - } catch (_e) { - return acc.account.data.parsed.info.tokenAmount.decimals === 0; - } -} - type BatchTransactionCreationError = 'approval' | 'activation' | 'none'; // can fit 250 ixes export const createAuthorityUpdateTx = async (squadsSdk: Squads, multisig: PublicKey, currentAuthority: PublicKey, newAuthority: PublicKey, mints: PublicKey[], connection: Connection, ws: fs.WriteStream, safeSign?: boolean) => { @@ -154,79 +143,72 @@ export const prepareBulkUpdate = async (mints: PublicKey[]) => { }; export const getMetadataAccount = (mint: PublicKey) => { - // to do - put in real derivation seeds - return PublicKey.findProgramAddressSync([anchor.utils.bytes.utf8.encode('metadata'), METAPLEX_PROGRAM_ID.toBuffer(), mint.toBuffer()], METAPLEX_PROGRAM_ID)[0]; + return PublicKey.findProgramAddressSync( + [anchor.utils.bytes.utf8.encode('metadata'), METAPLEX_PROGRAM_ID.toBuffer(), mint.toBuffer()], + METAPLEX_PROGRAM_ID, + )[0]; }; -export const checkAllMetas = async (connection: Connection, mints: PublicKey[]) => { - const success = []; - const failures = [] - for (const mint of mints) { - const valid = await validateMetadataAccount(connection, getMetadataAccount(mint)); - if (valid) { - success.push(mint); - }else{ - failures.push(mint); - } - } - return { - success, - failures - } -}; - -// check that the metadata account exists and is owned by the metaplex program -export const validateMetadataAccount = async (connection: Connection, metadataAccount: PublicKey) => { - const a = await connection.getAccountInfo(metadataAccount); - // if account is null, or the account lamports is 0, or if the account owner is not the metaplex_program_id, return false - if (!a || a.lamports === 0 || !a.owner.equals(METAPLEX_PROGRAM_ID)) { - return false; - } - return true; +export const getEditionAccount = (mint: PublicKey) => { + return PublicKey.findProgramAddressSync( + [ + anchor.utils.bytes.utf8.encode('metadata'), + METAPLEX_PROGRAM_ID.toBuffer(), + mint.toBuffer(), + anchor.utils.bytes.utf8.encode('edition'), + ], + METAPLEX_PROGRAM_ID, + )[0]; }; -// checks that the current update authority matches the given authority -export const checkMetadataAuthority = async (connection: Connection, metadataAccount: PublicKey, authority: PublicKey) => { - const a = await connection.getAccountInfo(metadataAccount); - if (!a || a.lamports === 0 || !a.owner.equals(METAPLEX_PROGRAM_ID)) { - return false; - } - if (a) { - // parse the account data based on the Metadata struct - const unparsedMaybeAccount = { - ...a, - publicKey: metadataAccount, - exists: true, - lamports: lamports(a.lamports), - } as UnparsedMaybeAccount; - - let metadata = toMetadata(toMetadataAccount(unparsedMaybeAccount)); - if (metadata.updateAuthorityAddress.equals(authority)) { - return true; +// Fetches metadata accounts in batches (100 per RPC, parallelized) and checks +// that each one exists and is owned by the metaplex program. +export const checkAllMetas = async (connection: Connection, mints: PublicKey[]) => { + const metadataAccounts = mints.map(getMetadataAccount); + const fetched = await getMultipleAccountsBatch(connection, metadataAccounts, "confirmed"); + const success: PublicKey[] = []; + const failures: PublicKey[] = []; + fetched.forEach((entry, i) => { + if (entry && entry.account.lamports > 0 && entry.account.owner.equals(METAPLEX_PROGRAM_ID)) { + success.push(mints[i]); + } else { + failures.push(mints[i]); } - } - return false; -} + }); + return { success, failures }; +}; +// Same batching as checkAllMetas, plus decodes the metadata and verifies the +// updateAuthority matches the supplied key. export const checkAllMetasAuthority = async (connection: Connection, mints: PublicKey[], authority: PublicKey) => { - const success = []; - const failures = [] - for (const mint of mints) { + const metadataAccounts = mints.map(getMetadataAccount); + const fetched = await getMultipleAccountsBatch(connection, metadataAccounts, "confirmed"); + const success: PublicKey[] = []; + const failures: PublicKey[] = []; + fetched.forEach((entry, i) => { + const mint = mints[i]; + if (!entry || entry.account.lamports === 0 || !entry.account.owner.equals(METAPLEX_PROGRAM_ID)) { + failures.push(mint); + return; + } try { - const valid = await checkMetadataAuthority(connection, getMetadataAccount(mint), authority); - if (valid) { + const unparsed = { + ...entry.account, + publicKey: metadataAccounts[i], + exists: true, + lamports: lamports(entry.account.lamports), + } as UnparsedMaybeAccount; + const metadata = toMetadata(toMetadataAccount(unparsed)); + if (metadata.updateAuthorityAddress.equals(authority)) { success.push(mint); - }else{ + } else { failures.push(mint); } - }catch(e) { + } catch { failures.push(mint); } - } - return { - success, - failures - } + }); + return { success, failures }; }; // loads the mint json and maps the mints to publickey. The file must contain @@ -358,15 +340,10 @@ export const createWithdrawNftTx = async (squadsSdk: Squads, multisig: PublicKey let hasError = false; const failures = []; - const keypair = new Keypair({ - publicKey: vault.toBytes(), - secretKey: new Keypair().secretKey, - }) - const garbageWallet = new NodeWallet(keypair) - - const metaplex = Metaplex.make(connection).use( - walletAdapterIdentity(garbageWallet) - ) + // The metaplex SDK needs *some* identity to derive PDAs, but the actual + // signing happens via Squads. A throwaway keypair is fine here. + const throwawayKeypair = Keypair.generate(); + const metaplex = Metaplex.make(connection).use(keypairIdentity(throwawayKeypair)); while (queue.length > 0) { const mint = queue.shift(); From f82adf20108d3e92ebd4b07b994a12781bba9190 Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 17:03:23 -0400 Subject: [PATCH 09/10] feat(balance): check low balance on sign and send --- src/lib/api.ts | 42 ++++++++++++++++++++++++++++++++++++++---- src/lib/menu.ts | 4 ++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/lib/api.ts b/src/lib/api.ts index 8c47411..02f6591 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1,6 +1,7 @@ import Squads, { getTxPDA, getAuthorityPDA } from "@sqds/sdk"; import * as anchor from "@coral-xyz/anchor"; import BN from "bn.js"; +import chalk from "chalk"; import { getProgramData, upgradeSetAuthorityIx } from "./program.js"; import { getAssets } from "./assets.js"; import {getAssociatedTokenAddress,createAssociatedTokenAccountInstruction} from "@solana/spl-token"; @@ -11,6 +12,19 @@ import {Connection, LAMPORTS_PER_SOL, PublicKey, VoteProgram} from "@solana/web3 import type CliConnection from "./connection.js"; import type { AnchorWallet, MultisigAccount, SquadsTxBuilder, TransactionAccount } from "../types.js"; +// Below this balance, warn the user that the fee-paying wallet may not have +// enough SOL to cover the next tx's fees + rent. Heuristic, not a hard floor. +export const LOW_BALANCE_SOL = 0.1; + +// Match the various ways Solana surfaces insufficient-funds errors: +// - "Attempt to debit an account but found no record of a prior credit" +// - "insufficient funds" +// - InstructionError on the system program with Custom: 1 +const looksLikeInsufficientFunds = (e: unknown): boolean => { + const msg = e instanceof Error ? e.message : JSON.stringify(e); + return /insufficient|debit an account but found no record/i.test(msg); +}; + class API{ squads; wallet; @@ -31,20 +45,40 @@ class API{ this.program = new anchor.Program(idl as anchor.Idl, this.programId, this.provider); } + // Logs a yellow warning when the fee-paying wallet is below LOW_BALANCE_SOL. + // Returns the current balance so callers can include it in their own messages. + warnIfLowBalance = async (): Promise => { + const balance = await this.getWalletBalance(); + if (balance < LOW_BALANCE_SOL) { + console.log(chalk.yellow( + `\nWarning: fee-paying wallet ${this.wallet.publicKey.toBase58()} has ${balance.toFixed(4)} SOL (below ${LOW_BALANCE_SOL} SOL). Transaction may fail to cover fees/rent.`, + )); + } + return balance; + }; + private sendAndConfirm = async ( ixes: anchor.web3.TransactionInstruction[], opts: { confirm?: boolean } = {}, ): Promise => { const { confirm = true } = opts; + const balance = await this.warnIfLowBalance(); const { blockhash, lastValidBlockHeight } = await this.connection.getLatestBlockhash(); const tx = new anchor.web3.Transaction({ blockhash, lastValidBlockHeight, feePayer: this.wallet.publicKey }); tx.add(...ixes); const signed = await this.wallet.signTransaction(tx); - const sig = await this.connection.sendRawTransaction(signed.serialize(), { skipPreflight: true }); - if (confirm) { - await this.connection.confirmTransaction(sig, "confirmed"); + try { + const sig = await this.connection.sendRawTransaction(signed.serialize(), { skipPreflight: true }); + if (confirm) { + await this.connection.confirmTransaction(sig, "confirmed"); + } + return sig; + } catch (e) { + if (looksLikeInsufficientFunds(e)) { + throw new Error(`Transaction failed: wallet ${this.wallet.publicKey.toBase58()} has insufficient SOL (current: ${balance.toFixed(4)} SOL).`); + } + throw e; } - return sig; }; // Builder-driven multisig config changes (auth index 0): add/remove member, change threshold. diff --git a/src/lib/menu.ts b/src/lib/menu.ts index ea45f6a..c0e8765 100644 --- a/src/lib/menu.ts +++ b/src/lib/menu.ts @@ -372,6 +372,7 @@ class Menu{ const updatedTx = await this.api.squads.getTransaction(tx.publicKey); return () => this.transaction(updatedTx, ms, txs); } + await this.api.warnIfLowBalance(); const status = new Spinner("Executing transaction..."); status.start(); let successfullyExecuted = 0; @@ -871,6 +872,7 @@ class Menu{ } } if (continueProcessing) { + await this.api.warnIfLowBalance(); await continueInq(); console.log("Transfering metadata update authority to the vault, this may take some time depending on the number of mints and your internet connection speed."); const status = new Spinner("Updating authority of the metadata accounts..."); @@ -979,6 +981,7 @@ class Menu{ } if (continueProcessing) { const {safeSign} = await nftSafeSigningInq(); + await this.api.warnIfLowBalance(); const successfullyStagedMetas: PublicKey[] = []; console.log("Creating the multisig transactions, this may take some time depending on the number of mints and your internet connection speed."); const status = new Spinner("Initializing metadata authority update multisig transactions..."); @@ -1117,6 +1120,7 @@ class Menu{ } } if (continueProcessing) { + await this.api.warnIfLowBalance(); const successfullyStagedMetas: PublicKey[] = []; console.log("Creating the multisig transactions, this may take some time depending on the number of mints and your internet connection speed."); const status = new Spinner("Initializing NFTs transfer multisig transactions..."); From 9c399a78e44c8766ba9f4d9dc505e6508b2c2602 Mon Sep 17 00:00:00 2001 From: sean-sqds Date: Fri, 22 May 2026 17:09:23 -0400 Subject: [PATCH 10/10] chore(deps): update deps --- package.json | 2 +- yarn.lock | 128 +++------------------------------------------------ 2 files changed, 7 insertions(+), 123 deletions(-) diff --git a/package.json b/package.json index 9f2837f..929d2b8 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/figlet": "1.5.5", "@types/lodash": "4.14.191", "axios": "1.15.2", - "bn.js": "5.2.1", + "bn.js": "5.2.3", "bs58": "5.0.0", "chalk": "4.1.2", "clear": "^0.1.0", diff --git a/yarn.lock b/yarn.lock index f485cd4..d772b82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -681,15 +681,6 @@ "@solana/web3.js" "^1.56.2" bn.js "^5.2.0" -"@metaplex-foundation/mpl-auction@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-auction/-/mpl-auction-0.0.2.tgz#3de3c982e88d6a88f0ef05be73453cf3cfaccf26" - integrity sha512-4UDDi8OiQr+D6KrCNTRrqf/iDD6vi5kzRtMRtuNpywTyhX9hnbr1Zkc6Ncncbh9GZhbhcn+/h5wHgzh+xA6TnQ== - dependencies: - "@metaplex-foundation/mpl-core" "^0.0.2" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.31.0" - "@metaplex-foundation/mpl-bubblegum@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-bubblegum/-/mpl-bubblegum-0.6.2.tgz#e1b098ccef10899b0d759a03e3d4b1ae7bdc9f0c" @@ -738,26 +729,6 @@ "@solana/spl-token" "^0.3.6" "@solana/web3.js" "^1.66.2" -"@metaplex-foundation/mpl-core@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-core/-/mpl-core-0.0.2.tgz#17ee2cc216e17629d6df1dbba75964625ebbd603" - integrity sha512-UUJ4BlYiWdDegAWmjsNQiNehwYU3QfSFWs3sv4VX0J6/ZrQ28zqosGhQ+I2ZCTEy216finJ82sZWNjuwSWCYyQ== - dependencies: - "@solana/web3.js" "^1.31.0" - bs58 "^4.0.1" - -"@metaplex-foundation/mpl-metaplex@^0.0.5": - version "0.0.5" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-metaplex/-/mpl-metaplex-0.0.5.tgz#f4b94582831824d134337453a8556c6c1ea13642" - integrity sha512-VRt3fiO/7/jcHwN+gWvTtpp+7wYhIcEDzMG1lOeV3yYyhz9fAT0E3LqEl2moifNTAopGCE4zYa84JA/OW+1YvA== - dependencies: - "@metaplex-foundation/mpl-auction" "^0.0.2" - "@metaplex-foundation/mpl-core" "^0.0.2" - "@metaplex-foundation/mpl-token-metadata" "^0.0.2" - "@metaplex-foundation/mpl-token-vault" "^0.0.2" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.31.0" - "@metaplex-foundation/mpl-token-metadata@2.13.0", "@metaplex-foundation/mpl-token-metadata@^2.11.0", "@metaplex-foundation/mpl-token-metadata@^2.5.2": version "2.13.0" resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz#ea498190ad4ed1d4c0b8218a72d03bd17a883d11" @@ -771,54 +742,6 @@ bn.js "^5.2.0" debug "^4.3.4" -"@metaplex-foundation/mpl-token-metadata@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-0.0.2.tgz#02058970320459e2550e90caf54c58bcacbe6bb2" - integrity sha512-yKJPhFlX8MkNbSCi1iwHn4xKmguLK/xFhYa+RuYdL2seuT4CKXHj2CnR2AkcdQj46Za4/nR3jZcRFKq7QlnvBw== - dependencies: - "@metaplex-foundation/mpl-core" "^0.0.2" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.31.0" - -"@metaplex-foundation/mpl-token-metadata@^1.1.0": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-1.2.5.tgz#1a927b1c7d30cd634a1e4782022712a02f6865c2" - integrity sha512-pxRG53JsTSwXpiJJMHNulJhH8kO3hHztQ3QxslUoKw2hBYKXsg9TGsiHgNIhN2MPZGBJ2pDeK6kNGv0sd54HhA== - dependencies: - "@metaplex-foundation/mpl-core" "^0.0.2" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.31.0" - -"@metaplex-foundation/mpl-token-vault@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-vault/-/mpl-token-vault-0.0.2.tgz#84d2fc86f750f8413acd9e9c24f4b3c016a12c47" - integrity sha512-JiVcow8OzUGW0KTs/E1QrAdmYGqE9EGKE6cc2gxNNBYqDeVdjYlgEa64IiGvNF9rvbI2g2Z3jw0mYuA9LD9S/A== - dependencies: - "@metaplex-foundation/mpl-core" "^0.0.2" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.31.0" - -"@metaplex/js@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@metaplex/js/-/js-4.12.0.tgz#1190767a4e69d4e5613002aab3f4c1fb8de07896" - integrity sha512-rIUTMXo5gIXFIZt08AEHyqH4oVoLL2dMYiNePQluw9pydesRym4jDayJ5POxEmKmyc6KGqVKw/YWUIivmUY5zg== - dependencies: - "@metaplex-foundation/mpl-auction" "^0.0.2" - "@metaplex-foundation/mpl-core" "^0.0.2" - "@metaplex-foundation/mpl-metaplex" "^0.0.5" - "@metaplex-foundation/mpl-token-metadata" "^1.1.0" - "@metaplex-foundation/mpl-token-vault" "^0.0.2" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.30.2" - "@types/bs58" "^4.0.1" - axios "^0.25.0" - bn.js "^5.2.0" - borsh "^0.4.0" - bs58 "^4.0.1" - buffer "^6.0.3" - crypto-hash "^1.3.0" - form-data "^4.0.0" - "@near-js/crypto@0.0.3", "@near-js/crypto@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@near-js/crypto/-/crypto-0.0.3.tgz#4a33e526ab5fa75b703427067985694a279ff8bd" @@ -1313,7 +1236,7 @@ "@solana/buffer-layout-utils" "^0.2.0" buffer "^6.0.3" -"@solana/web3.js@1.66.2", "@solana/web3.js@^1.30.2", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.66.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2": +"@solana/web3.js@1.66.2", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.66.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2": version "1.66.2" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.66.2.tgz#80b43c5868b846124fe3ebac7d3943930c3fa60c" integrity sha512-RyaHMR2jGmaesnYP045VLeBGfR/gAW3cvZHzMFGg7bkO+WOYOYp1nEllf0/la4U4qsYGKCsO9eEevR5fhHiVHg== @@ -1403,21 +1326,6 @@ dependencies: "@types/node" "*" -"@types/bn.js@^4.11.5": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bs58@^4.0.1": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/bs58/-/bs58-4.0.4.tgz#49fbcb0c7db5f7cea26f0e0f61dc4a41a2445aab" - integrity sha512-0IEpMFXXQi2zXaXl9GJ3sRwQo0uEkD+yFOv+FnAU5lkPtcu6h61xb7jc2CFPEZ5BUOaiP13ThuGc9HD4R8lR5g== - dependencies: - "@types/node" "*" - base-x "^3.0.6" - "@types/btoa-lite@^1.0.0": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.2.tgz#82bb6aab00abf7cff3ca2825abe010c0cd536ae5" @@ -1849,13 +1757,6 @@ axios@1.15.2: form-data "^4.0.5" proxy-from-env "^2.1.0" -axios@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" - integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== - dependencies: - follow-redirects "^1.14.7" - axios@^1.4.0: version "1.16.1" resolved "https://registry.yarnpkg.com/axios/-/axios-1.16.1.tgz#517e29291d19d6e8cf919ff264f4fe157261ba12" @@ -1878,13 +1779,6 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" -base-x@^3.0.6: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - base-x@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.1.tgz#817fb7b57143c501f649805cb247617ad016a885" @@ -1985,6 +1879,11 @@ bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +bn.js@5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.3.tgz#16a9e409616b23fef3ccbedb8d42f13bff80295e" + integrity sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w== + bn.js@^4.0.0: version "4.12.3" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.3.tgz#2cc2c679188eb35b006f2d0d4710bed8437a769e" @@ -1995,16 +1894,6 @@ bn.js@^4.11.9: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -borsh@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.4.0.tgz#9dd6defe741627f1315eac2a73df61421f6ddb9f" - integrity sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g== - dependencies: - "@types/bn.js" "^4.11.5" - bn.js "^5.0.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - borsh@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" @@ -3008,11 +2897,6 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== -follow-redirects@^1.14.7: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== - follow-redirects@^1.14.9, follow-redirects@^1.15.11, follow-redirects@^1.16.0: version "1.16.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc"