├── .env.copy ├── .gitignore ├── .prettierrc ├── README.md ├── constants ├── constants.ts └── index.ts ├── dist.bat ├── executor ├── jito.ts └── legacy.ts ├── gather.bat ├── gather.ts ├── index.html ├── index.ts ├── package-lock.json ├── package.json ├── sell.ts ├── status.ts ├── tsconfig.json ├── types ├── index.ts └── mint.ts ├── utils ├── getPoolInfo.ts ├── getPoolKeys.ts ├── index.ts ├── logger.ts ├── swapOnlyAmm.ts └── utils.ts └── yarn.lock /.env.copy: -------------------------------------------------------------------------------- 1 | // Environment Variables for Raydium Volume Bot 2 | PRIVATE_KEY= // Private key for the main wallet - Raydium volume bot 3 | RPC_ENDPOINT= // Solana RPC endpoint for Raydium volume bot 4 | RPC_WEBSOCKET_ENDPOINT= // WebSocket endpoint for real-time updates 5 | 6 | 7 | ####### BUY SETTING ####### 8 | IS_RANDOM=true 9 | DISTRIBUTION_AMOUNT=0.01 10 | BUY_AMOUNT=0.01 11 | BUY_UPPER_AMOUNT=0.002 12 | BUY_LOWER_AMOUNT=0.001 13 | 14 | BUY_INTERVAL_MAX=2000 15 | BUY_INTERVAL_MIN=4000 16 | 17 | CHECK_BAL_INTERVAL=3000 18 | DISTRIBUTE_WALLET_NUM=8 19 | 20 | SWAP_ROUTING=true 21 | 22 | ###### FOR MASSIVE BUY ##### 23 | WALLET_NUM=8 24 | 25 | ########## FOR SELL MODE ########## 26 | SELL_ALL_BY_TIMES=20 # how many time it will take to sell all tokens in subwallets through small buy and sell 27 | SELL_PERCENT=100 # how many percent of token in main wallet will be sold gradually 28 | 29 | #### TOKEN PAIR SETTING #### 30 | #TOKEN_MINT=tgw7RiFwLUsM9dHNGj2mdAZjuivdsk8FH9RESxFX8LX 31 | TOKEN_MINT=6VbEGuqwhjdgV9NxhMhvRkrFqXVNk53CvD7hK3C3yQS9 32 | POOL_ID=null 33 | 34 | TX_FEE=10 35 | ADDITIONAL_FEE=0.006 # should be larger than 0.006SOL 36 | JITO_KEY= 37 | JITO_FEE=120000 38 | BLOCKENGINE_URL=ny.mainnet.block-engine.jito.wtf 39 | 40 | 41 | ###### GENERAL SETTING ###### 42 | LOG_LEVEL=info 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # PNPM 126 | pnpm-lock.yaml 127 | 128 | # yarn v2 129 | .yarn/cache 130 | .yarn/unplugged 131 | .yarn/build-state.yml 132 | .yarn/install-state.gz 133 | .pnp.* 134 | 135 | # JetBrains 136 | .idea 137 | 138 | # Visual Studio Code 139 | *.code-workspace 140 | 141 | data.json -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 120 5 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Raydium Volume Bot: Automated Trading and Volume Generation for Raydium DEX 2 | Raydium Volume Bot is an advanced tool designed to automate trading and generate volume for specific tokens on the Raydium DEX platform. This bot enables the automated distribution of SOL across multiple wallets and performs simultaneous buy and sell swaps, helping users take full advantage of Solana’s fast blockchain technology for optimized performance. 3 | 4 | ## Features of Raydium Volume Bot 5 | 6 | - **Automated SOL Distribution**: Automatically distributes SOL to new wallets, making it easy to scale trading operations. 7 | - **Endless Buy and Sell Swaps**: Executes non-stop buy and sell swap transactions across wallets for efficient volume generation. 8 | - **Configurable Parameters**: Customize buy amounts, intervals, and distribution settings to fit your specific strategy. 9 | - **Massive Buy Mode**: Set up large-scale buy operations by configuring multiple wallets for heavy buy orders. 10 | - **Sell Mode**: Gradually sell tokens in sub-wallets through small transactions to reduce slippage and optimize sales. 11 | - **Token Pair Settings**: Flexible configuration of token mint addresses and pool IDs for any swap operations on Raydium. 12 | - **Logging**: Comprehensive and adjustable logging levels to monitor the bot’s operations, debug errors, and track progress. 13 | ## How It Works 14 | Raydium Volume Bot is built to help DeFi traders increase the trading volume of specific tokens on Raydium. By leveraging Solana's blockchain infrastructure, this bot executes automated buy and sell transactions and massive buy modes across multiple wallets. It uses various configurations, from buy intervals to sell percentages, ensuring flexibility in how traders can operate. 15 | 16 | ## Environment Variables 17 | The bot uses the following environment variables, which should be defined in a .env file: 18 | 19 | - **PRIVATE_KEY**: Private key for the main wallet 20 | - **RPC_ENDPOINT**: RPC endpoint for Solana network connection 21 | - **RPC_WEBSOCKET_ENDPOINT**: WebSocket endpoint for real-time data on Solana 22 | ### Buy Settings 23 | - **IS_RANDOM=true** : Enable random buy amounts 24 | - **DISTRIBUTION_AMOUNT=0.01** : SOL amount to distribute to each wallet 25 | - **BUY_AMOUNT=0.01** : Fixed buy amount 26 | - **BUY_UPPER_AMOUNT=0.002** : Max limit for random buy amounts 27 | - **BUY_LOWER_AMOUNT=0.001** : Min limit for random buy amounts 28 | - **BUY_INTERVAL_MAX=2000** : Max interval between buy transactions (ms) 29 | - **BUY_INTERVAL_MIN=4000** : Min interval between buy transactions (ms) 30 | - **CHECK_BAL_INTERVAL=3000** : Balance check interval (ms) 31 | - **DISTRIBUTE_WALLET_NUM=8** : Number of wallets for SOL distribution 32 | ### Massive Buy Mode Settings 33 | - **WALLET_NUM=8** : Number of wallets for massive buy mode 34 | ### Sell Mode Settings 35 | - **SELL_ALL_BY_TIMES=20** : Number of sell attempts 36 | - **SELL_PERCENT=100** : Percent of tokens to sell in each sub-wallet 37 | ### Token Pair Settings 38 | - **TOKEN_MINT=6VbEGuqwhjdgV9NxhMhvRkrFqXVNk53CvD7hK3C3yQS9** : Token mint address 39 | - **POOL_ID=null** : Pool ID for token pair swaps 40 | ### Transaction Fee Settings 41 | - **TX_FEE=10** : Transaction fee per swap 42 | - **ADDITIONAL_FEE=0.006** : Additional fee (above 0.006 SOL) 43 | - **JITO_KEY=** : Jito key for MEV optimization 44 | - **JITO_FEE=120000** : Jito fee for block inclusion 45 | - **BLOCKENGINE_URL=ny.mainnet.block-engine.jito.wtf** : Jito Block engine URL 46 | ### Logging and General Settings 47 | - **LOG_LEVEL=info** : Logging level (info, debug, error) 48 | ## Installation and Usage 49 | 1. Clone the Repository: 50 | git clone https://github.com/yourusername/raydium-volume-bot.git 51 | cd raydium-volume-bot 52 | 2. Install Dependencies: Install the necessary dependencies by running: 53 | npm install 54 | 3. Configure .env: Set up your .env file with the required environment variables mentioned above. 55 | 4. Run the Bot: After setup, run the bot by executing: 56 | node bot.js 57 | ## Why Use Raydium Volume Bot? 58 | By using Raydium Volume Bot, traders can efficiently increase token volume on Raydium DEX, one of the leading decentralized exchanges on the Solana blockchain. This tool is ideal for market makers, liquidity providers, and automated traders looking to maximize trading activity, capture arbitrage opportunities, and engage in large-scale trading operations with ease. 59 | 60 | ## Conclusion 61 | Raydium Volume Bot is a powerful, automated tool for executing volume trading and generating liquidity on the Raydium platform. Its robust set of features makes it perfect for DeFi traders who want to optimize trading across multiple wallets on Solana's fast and scalable blockchain. 62 | 63 | ## Author 64 | 65 | Telegram: [@g0drlc](https://t.me/g0drlc) 66 | 67 | This is old version of volume bot. I am updating new volume bot that has high quality and speed. 68 | You can always find me here, for help, or for other projects. 69 | -------------------------------------------------------------------------------- /constants/constants.ts: -------------------------------------------------------------------------------- 1 | import { logger, retrieveEnvVariable } from "../utils" 2 | 3 | export const PRIVATE_KEY = retrieveEnvVariable('PRIVATE_KEY', logger) 4 | export const RPC_ENDPOINT = retrieveEnvVariable('RPC_ENDPOINT', logger) 5 | export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable('RPC_WEBSOCKET_ENDPOINT', logger) 6 | 7 | export const IS_RANDOM = retrieveEnvVariable('IS_RANDOM', logger) === 'true' 8 | export const SWAP_ROUTING = retrieveEnvVariable('SWAP_ROUTING', logger) === 'true' 9 | export const DISTRIBUTION_AMOUNT = Number(retrieveEnvVariable('DISTRIBUTION_AMOUNT', logger)) 10 | export const BUY_AMOUNT = Number(retrieveEnvVariable('BUY_AMOUNT', logger)) 11 | export const BUY_UPPER_AMOUNT = Number(retrieveEnvVariable('BUY_UPPER_AMOUNT', logger)) 12 | export const BUY_LOWER_AMOUNT = Number(retrieveEnvVariable('BUY_LOWER_AMOUNT', logger)) 13 | 14 | export const BUY_INTERVAL_MIN = Number(retrieveEnvVariable('BUY_INTERVAL_MIN', logger)) 15 | export const BUY_INTERVAL_MAX = Number(retrieveEnvVariable('BUY_INTERVAL_MAX', logger)) 16 | 17 | export const SELL_ALL_BY_TIMES = Number(retrieveEnvVariable('SELL_ALL_BY_TIMES', logger)) 18 | export const SELL_PERCENT = Number(retrieveEnvVariable('SELL_PERCENT', logger)) 19 | 20 | export const DISTRIBUTE_WALLET_NUM = Number(retrieveEnvVariable('DISTRIBUTE_WALLET_NUM', logger)) 21 | // export const CHECK_BAL_INTERVAL = Number(retrieveEnvVariable('CHECK_BAL_INTERVAL', logger)) 22 | 23 | export const WALLET_NUM = Number(retrieveEnvVariable('WALLET_NUM', logger)) 24 | 25 | export const TX_FEE = Number(retrieveEnvVariable('TX_FEE', logger)) 26 | 27 | export const TOKEN_MINT = retrieveEnvVariable('TOKEN_MINT', logger) 28 | export const POOL_ID = retrieveEnvVariable('POOL_ID', logger) 29 | 30 | export const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger) 31 | 32 | export const ADDITIONAL_FEE = Number(retrieveEnvVariable('ADDITIONAL_FEE', logger)) 33 | // export const JITO_KEY = retrieveEnvVariable('JITO_KEY', logger) 34 | // export const BLOCKENGINE_URL = retrieveEnvVariable('BLOCKENGINE_URL', logger) 35 | // export const JITO_FEE = Number(retrieveEnvVariable('JITO_FEE', logger)) 36 | 37 | 38 | -------------------------------------------------------------------------------- /constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; -------------------------------------------------------------------------------- /dist.bat: -------------------------------------------------------------------------------- 1 | npm start -------------------------------------------------------------------------------- /executor/jito.ts: -------------------------------------------------------------------------------- 1 | 2 | // Jito Bundling part 3 | 4 | import { Connection, Keypair, PublicKey, VersionedTransaction } from "@solana/web3.js" 5 | import { BLOCKENGINE_URL, JITO_FEE, JITO_KEY, RPC_ENDPOINT, RPC_WEBSOCKET_ENDPOINT } from "../constants" 6 | import base58 from "bs58" 7 | import { SearcherClient, searcherClient } from "jito-ts/dist/sdk/block-engine/searcher" 8 | import { Bundle } from "jito-ts/dist/sdk/block-engine/types" 9 | import { isError } from "jito-ts/dist/sdk/block-engine/utils" 10 | 11 | const solanaConnection = new Connection(RPC_ENDPOINT, { 12 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, 13 | }) 14 | 15 | export async function bundle(txs: VersionedTransaction[], keypair: Keypair) { 16 | try { 17 | const txNum = Math.ceil(txs.length / 3) 18 | let successNum = 0 19 | for (let i = 0; i < txNum; i++) { 20 | const upperIndex = (i + 1) * 3 21 | const downIndex = i * 3 22 | const newTxs = [] 23 | for (let j = downIndex; j < upperIndex; j++) { 24 | if (txs[j]) newTxs.push(txs[j]) 25 | } 26 | let success = await bull_dozer(newTxs, keypair) 27 | return success 28 | } 29 | if (successNum == txNum) return true 30 | else return false 31 | } catch (error) { 32 | return false 33 | } 34 | } 35 | 36 | export async function bull_dozer(txs: VersionedTransaction[], keypair: Keypair) { 37 | try { 38 | const bundleTransactionLimit = parseInt('4') 39 | const jitoKey = Keypair.fromSecretKey(base58.decode(JITO_KEY)) 40 | const search = searcherClient(BLOCKENGINE_URL, jitoKey) 41 | 42 | await build_bundle( 43 | search, 44 | bundleTransactionLimit, 45 | txs, 46 | keypair 47 | ) 48 | const bundle_result = await onBundleResult(search) 49 | return bundle_result 50 | } catch (error) { 51 | return 0 52 | } 53 | } 54 | 55 | 56 | async function build_bundle( 57 | search: SearcherClient, 58 | bundleTransactionLimit: number, 59 | txs: VersionedTransaction[], 60 | keypair: Keypair 61 | ) { 62 | 63 | const accounts = await search.getTipAccounts() 64 | const _tipAccount = accounts[Math.min(Math.floor(Math.random() * accounts.length), 3)] 65 | const tipAccount = new PublicKey(_tipAccount) 66 | 67 | const bund = new Bundle([], bundleTransactionLimit) 68 | const resp = await solanaConnection.getLatestBlockhash("processed") 69 | bund.addTransactions(...txs) 70 | 71 | let maybeBundle = bund.addTipTx( 72 | keypair, 73 | JITO_FEE, 74 | tipAccount, 75 | resp.blockhash 76 | ) 77 | 78 | if (isError(maybeBundle)) { 79 | throw maybeBundle 80 | } 81 | try { 82 | await search.sendBundle(maybeBundle) 83 | } catch (e) { } 84 | return maybeBundle 85 | } 86 | 87 | export const onBundleResult = (c: SearcherClient): Promise => { 88 | let first = 0 89 | let isResolved = false 90 | 91 | return new Promise((resolve) => { 92 | // Set a timeout to reject the promise if no bundle is accepted within 5 seconds 93 | setTimeout(() => { 94 | resolve(first) 95 | isResolved = true 96 | }, 30000) 97 | 98 | c.onBundleResult( 99 | (result: any) => { 100 | if (isResolved) return first 101 | // clearTimeout(timeout) // Clear the timeout if a bundle is accepted 102 | const isAccepted = result.accepted 103 | const isRejected = result.rejected 104 | if (isResolved == false) { 105 | 106 | if (isAccepted) { 107 | // console.log(`bundle accepted, ID: ${result.bundleId} | Slot: ${result.accepted!.slot}`) 108 | first += 1 109 | isResolved = true 110 | resolve(first) // Resolve with 'first' when a bundle is accepted 111 | } 112 | if (isRejected) { 113 | // Do not resolve or reject the promise here 114 | } 115 | } 116 | }, 117 | (e: any) => { 118 | // Do not reject the promise here 119 | } 120 | ) 121 | }) 122 | } 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | -------------------------------------------------------------------------------- /executor/legacy.ts: -------------------------------------------------------------------------------- 1 | import { Connection, VersionedTransaction } from "@solana/web3.js"; 2 | import { RPC_ENDPOINT, RPC_WEBSOCKET_ENDPOINT } from "../constants"; 3 | import { logger } from "../utils"; 4 | 5 | 6 | interface Blockhash { 7 | blockhash: string; 8 | lastValidBlockHeight: number; 9 | } 10 | 11 | export const execute = async (transaction: VersionedTransaction, latestBlockhash: Blockhash, isBuy: boolean = true) => { 12 | const solanaConnection = new Connection(RPC_ENDPOINT, { 13 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, 14 | }) 15 | 16 | const signature = await solanaConnection.sendRawTransaction(transaction.serialize(), { skipPreflight: true }) 17 | const confirmation = await solanaConnection.confirmTransaction( 18 | { 19 | signature, 20 | lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, 21 | blockhash: latestBlockhash.blockhash, 22 | } 23 | ); 24 | 25 | if (confirmation.value.err) { 26 | console.log("Confrimtaion error") 27 | return "" 28 | } else { 29 | if (isBuy) 30 | console.log(`Success in buy transaction: https://solscan.io/tx/${signature}`) 31 | else 32 | console.log(`Success in Sell transaction: https://solscan.io/tx/${signature}`) 33 | } 34 | return signature 35 | } 36 | -------------------------------------------------------------------------------- /gather.bat: -------------------------------------------------------------------------------- 1 | npm run gather -------------------------------------------------------------------------------- /gather.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Keypair, 3 | Connection, 4 | Transaction, 5 | SystemProgram, 6 | sendAndConfirmTransaction, 7 | ComputeBudgetProgram, 8 | } from '@solana/web3.js' 9 | import { 10 | PRIVATE_KEY, 11 | RPC_ENDPOINT, 12 | RPC_WEBSOCKET_ENDPOINT, 13 | } from './constants' 14 | import { Data, readJson } from './utils' 15 | import base58 from 'bs58' 16 | 17 | export const solanaConnection = new Connection(RPC_ENDPOINT, { 18 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, 19 | }) 20 | const mainKp = Keypair.fromSecretKey(base58.decode(PRIVATE_KEY)) 21 | 22 | const gather = async () => { 23 | const data: Data[] = readJson() 24 | if (data.length == 0) { 25 | console.log("No wallet to gather") 26 | return 27 | } 28 | for (let i = 0; i < data.length; i++) { 29 | try { 30 | const wallet = Keypair.fromSecretKey(base58.decode(data[i].privateKey)) 31 | const balance = await solanaConnection.getBalance(wallet.publicKey) 32 | if (balance == 0) { 33 | console.log("sol balance is 0, skip this wallet") 34 | continue 35 | } 36 | const rent = await solanaConnection.getMinimumBalanceForRentExemption(32); 37 | console.log("🚀 ~ gather ~ minBalance:", rent) 38 | 39 | const transaction = new Transaction().add( 40 | ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 600_000 }), 41 | ComputeBudgetProgram.setComputeUnitLimit({ units: 20_000}), 42 | SystemProgram.transfer({ 43 | fromPubkey: wallet.publicKey, 44 | toPubkey: mainKp.publicKey, 45 | lamports: balance - 13 * 10 ** 3 - rent 46 | }) 47 | ) 48 | 49 | transaction.recentBlockhash = (await solanaConnection.getLatestBlockhash()).blockhash 50 | transaction.feePayer = wallet.publicKey 51 | console.log(await solanaConnection.simulateTransaction(transaction)) 52 | const sig = await sendAndConfirmTransaction(solanaConnection, transaction, [wallet], { skipPreflight: true }) 53 | console.log({ sig }) 54 | } catch (error) { 55 | console.log("Failed to gather sol in a wallet") 56 | } 57 | } 58 | } 59 | 60 | gather() -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Raydium Volume Bot 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |

Welcome to Raydium Volume Bot

20 |

Automate your token trading volume with this powerful bot, built on the Solana blockchain.

21 |
22 | 23 |
24 |

About Raydium Volume Bot

25 |

The Raydium Volume Bot is a tool that automates SOL distribution across multiple wallets for efficient trading volume generation on the Raydium platform.

26 |
27 | 28 |
29 |

Features

30 | 36 |
37 | 38 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | NATIVE_MINT, 3 | getAssociatedTokenAddress, 4 | } from '@solana/spl-token' 5 | import { 6 | Keypair, 7 | Connection, 8 | PublicKey, 9 | LAMPORTS_PER_SOL, 10 | SystemProgram, 11 | VersionedTransaction, 12 | TransactionInstruction, 13 | TransactionMessage, 14 | ComputeBudgetProgram, 15 | Transaction 16 | } from '@solana/web3.js' 17 | import { 18 | ADDITIONAL_FEE, 19 | BUY_AMOUNT, 20 | BUY_INTERVAL_MAX, 21 | BUY_INTERVAL_MIN, 22 | BUY_LOWER_AMOUNT, 23 | BUY_UPPER_AMOUNT, 24 | DISTRIBUTE_WALLET_NUM, 25 | DISTRIBUTION_AMOUNT, 26 | IS_RANDOM, 27 | PRIVATE_KEY, 28 | RPC_ENDPOINT, 29 | RPC_WEBSOCKET_ENDPOINT, 30 | TOKEN_MINT, 31 | } from './constants' 32 | import { Data, editJson, readJson, saveDataToFile, sleep } from './utils' 33 | import base58 from 'bs58' 34 | import { getBuyTx, getBuyTxWithJupiter, getSellTx, getSellTxWithJupiter } from './utils/swapOnlyAmm' 35 | import { execute } from './executor/legacy' 36 | import { bundle } from './executor/jito' 37 | import { getPoolKeys } from './utils/getPoolInfo' 38 | import { SWAP_ROUTING } from './constants' 39 | 40 | export const solanaConnection = new Connection(RPC_ENDPOINT, { 41 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, 42 | }) 43 | 44 | export const mainKp = Keypair.fromSecretKey(base58.decode(PRIVATE_KEY)) 45 | const baseMint = new PublicKey(TOKEN_MINT) 46 | const distritbutionNum = DISTRIBUTE_WALLET_NUM > 10 ? 10 : DISTRIBUTE_WALLET_NUM 47 | let quoteVault: PublicKey | null = null 48 | let vaultAmount: number = 0 49 | let poolId: PublicKey 50 | let poolKeys = null 51 | let sold: number = 0 52 | let bought: number = 0 53 | let totalSolPut: number = 0 54 | let changeAmount = 0 55 | let buyNum = 0 56 | let sellNum = 0 57 | 58 | 59 | const main = async () => { 60 | 61 | const solBalance = (await solanaConnection.getBalance(mainKp.publicKey)) / LAMPORTS_PER_SOL 62 | console.log(`Volume bot is running`) 63 | console.log(`Wallet address: ${mainKp.publicKey.toBase58()}`) 64 | console.log(`Pool token mint: ${baseMint.toBase58()}`) 65 | console.log(`Wallet SOL balance: ${solBalance.toFixed(3)}SOL`) 66 | console.log(`Buying interval max: ${BUY_INTERVAL_MAX}ms`) 67 | console.log(`Buying interval min: ${BUY_INTERVAL_MIN}ms`) 68 | console.log(`Buy upper limit amount: ${BUY_UPPER_AMOUNT}SOL`) 69 | console.log(`Buy lower limit amount: ${BUY_LOWER_AMOUNT}SOL`) 70 | console.log(`Distribute SOL to ${distritbutionNum} wallets`) 71 | 72 | } 73 | 74 | /** 75 | * Distributes SOL to multiple wallets for Raydium volume bot operations. 76 | * 77 | * This function helps scale Raydium volume bot operations by distributing SOL to each wallet. 78 | * 79 | * @param wallets - Array of wallet addresses to distribute SOL. 80 | */ 81 | main() 82 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "raydium-volume-bot", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "raydium-volume-bot", 8 | "dependencies": { 9 | "@metaplex-foundation/mpl-token-metadata": "^3.2.1", 10 | "@metaplex-foundation/umi": "^0.9.1", 11 | "@raydium-io/raydium-sdk": "^1.3.1-beta.47", 12 | "@solana/spl-token": "^0.4.0", 13 | "@solana/web3.js": "^1.89.1", 14 | "axios": "^1.6.8", 15 | "bigint-buffer": "^1.1.5", 16 | "bn.js": "^5.2.1", 17 | "bs58": "^5.0.0", 18 | "dotenv": "^16.4.1", 19 | "jito-ts": "^3.0.1", 20 | "pino": "^8.18.0", 21 | "pino-pretty": "^10.3.1", 22 | "pino-std-serializers": "^6.2.2" 23 | }, 24 | "devDependencies": { 25 | "@types/bn.js": "^5.1.5", 26 | "prettier": "^3.2.4", 27 | "ts-node": "^10.9.2", 28 | "typescript": "^5.3.3" 29 | } 30 | }, 31 | "node_modules/@babel/runtime": { 32 | "version": "7.24.4", 33 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", 34 | "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", 35 | "dependencies": { 36 | "regenerator-runtime": "^0.14.0" 37 | }, 38 | "engines": { 39 | "node": ">=6.9.0" 40 | } 41 | }, 42 | "node_modules/@cspotcode/source-map-support": { 43 | "version": "0.8.1", 44 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 45 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 46 | "dev": true, 47 | "dependencies": { 48 | "@jridgewell/trace-mapping": "0.3.9" 49 | }, 50 | "engines": { 51 | "node": ">=12" 52 | } 53 | }, 54 | "node_modules/@grpc/grpc-js": { 55 | "version": "1.10.6", 56 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.6.tgz", 57 | "integrity": "sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA==", 58 | "dependencies": { 59 | "@grpc/proto-loader": "^0.7.10", 60 | "@js-sdsl/ordered-map": "^4.4.2" 61 | }, 62 | "engines": { 63 | "node": ">=12.10.0" 64 | } 65 | }, 66 | "node_modules/@grpc/proto-loader": { 67 | "version": "0.7.12", 68 | "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.12.tgz", 69 | "integrity": "sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q==", 70 | "dependencies": { 71 | "lodash.camelcase": "^4.3.0", 72 | "long": "^5.0.0", 73 | "protobufjs": "^7.2.4", 74 | "yargs": "^17.7.2" 75 | }, 76 | "bin": { 77 | "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" 78 | }, 79 | "engines": { 80 | "node": ">=6" 81 | } 82 | }, 83 | "node_modules/@jridgewell/resolve-uri": { 84 | "version": "3.1.2", 85 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 86 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 87 | "dev": true, 88 | "engines": { 89 | "node": ">=6.0.0" 90 | } 91 | }, 92 | "node_modules/@jridgewell/sourcemap-codec": { 93 | "version": "1.4.15", 94 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 95 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 96 | "dev": true 97 | }, 98 | "node_modules/@jridgewell/trace-mapping": { 99 | "version": "0.3.9", 100 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 101 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 102 | "dev": true, 103 | "dependencies": { 104 | "@jridgewell/resolve-uri": "^3.0.3", 105 | "@jridgewell/sourcemap-codec": "^1.4.10" 106 | } 107 | }, 108 | "node_modules/@js-sdsl/ordered-map": { 109 | "version": "4.4.2", 110 | "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", 111 | "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", 112 | "funding": { 113 | "type": "opencollective", 114 | "url": "https://opencollective.com/js-sdsl" 115 | } 116 | }, 117 | "node_modules/@metaplex-foundation/mpl-token-metadata": { 118 | "version": "3.2.1", 119 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-3.2.1.tgz", 120 | "integrity": "sha512-26W1NhQwDWmLOg/pBRYut7x/vEs/5kFS2sWVEY5/X0f2jJOLhnd4NaZQcq+5u+XZsXvm1jq2AtrRGPNK43oqWQ==", 121 | "dependencies": { 122 | "@metaplex-foundation/mpl-toolbox": "^0.9.4" 123 | }, 124 | "peerDependencies": { 125 | "@metaplex-foundation/umi": ">= 0.8.2 < 1" 126 | } 127 | }, 128 | "node_modules/@metaplex-foundation/mpl-toolbox": { 129 | "version": "0.9.4", 130 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-toolbox/-/mpl-toolbox-0.9.4.tgz", 131 | "integrity": "sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ==", 132 | "peerDependencies": { 133 | "@metaplex-foundation/umi": ">= 0.8.2 < 1" 134 | } 135 | }, 136 | "node_modules/@metaplex-foundation/umi": { 137 | "version": "0.9.1", 138 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi/-/umi-0.9.1.tgz", 139 | "integrity": "sha512-IhHoOvp4vfO/++YL+78+iVuLM53+FDwUOZDYgH6lx0jYXyQ27BeaieeR5i+q3A9dz4KxQo5Nzc5aCA1109QGCQ==", 140 | "dependencies": { 141 | "@metaplex-foundation/umi-options": "^0.8.9", 142 | "@metaplex-foundation/umi-public-keys": "^0.8.9", 143 | "@metaplex-foundation/umi-serializers": "^0.9.0" 144 | } 145 | }, 146 | "node_modules/@metaplex-foundation/umi-options": { 147 | "version": "0.8.9", 148 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-options/-/umi-options-0.8.9.tgz", 149 | "integrity": "sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==" 150 | }, 151 | "node_modules/@metaplex-foundation/umi-public-keys": { 152 | "version": "0.8.9", 153 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-public-keys/-/umi-public-keys-0.8.9.tgz", 154 | "integrity": "sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==", 155 | "dependencies": { 156 | "@metaplex-foundation/umi-serializers-encodings": "^0.8.9" 157 | } 158 | }, 159 | "node_modules/@metaplex-foundation/umi-serializers": { 160 | "version": "0.9.0", 161 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers/-/umi-serializers-0.9.0.tgz", 162 | "integrity": "sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==", 163 | "dependencies": { 164 | "@metaplex-foundation/umi-options": "^0.8.9", 165 | "@metaplex-foundation/umi-public-keys": "^0.8.9", 166 | "@metaplex-foundation/umi-serializers-core": "^0.8.9", 167 | "@metaplex-foundation/umi-serializers-encodings": "^0.8.9", 168 | "@metaplex-foundation/umi-serializers-numbers": "^0.8.9" 169 | } 170 | }, 171 | "node_modules/@metaplex-foundation/umi-serializers-core": { 172 | "version": "0.8.9", 173 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-0.8.9.tgz", 174 | "integrity": "sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==" 175 | }, 176 | "node_modules/@metaplex-foundation/umi-serializers-encodings": { 177 | "version": "0.8.9", 178 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-0.8.9.tgz", 179 | "integrity": "sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==", 180 | "dependencies": { 181 | "@metaplex-foundation/umi-serializers-core": "^0.8.9" 182 | } 183 | }, 184 | "node_modules/@metaplex-foundation/umi-serializers-numbers": { 185 | "version": "0.8.9", 186 | "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-0.8.9.tgz", 187 | "integrity": "sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==", 188 | "dependencies": { 189 | "@metaplex-foundation/umi-serializers-core": "^0.8.9" 190 | } 191 | }, 192 | "node_modules/@noble/curves": { 193 | "version": "1.4.0", 194 | "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", 195 | "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", 196 | "dependencies": { 197 | "@noble/hashes": "1.4.0" 198 | }, 199 | "funding": { 200 | "url": "https://paulmillr.com/funding/" 201 | } 202 | }, 203 | "node_modules/@noble/ed25519": { 204 | "version": "1.7.3", 205 | "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", 206 | "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==", 207 | "funding": [ 208 | { 209 | "type": "individual", 210 | "url": "https://paulmillr.com/funding/" 211 | } 212 | ] 213 | }, 214 | "node_modules/@noble/hashes": { 215 | "version": "1.4.0", 216 | "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", 217 | "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", 218 | "engines": { 219 | "node": ">= 16" 220 | }, 221 | "funding": { 222 | "url": "https://paulmillr.com/funding/" 223 | } 224 | }, 225 | "node_modules/@protobufjs/aspromise": { 226 | "version": "1.1.2", 227 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 228 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" 229 | }, 230 | "node_modules/@protobufjs/base64": { 231 | "version": "1.1.2", 232 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 233 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 234 | }, 235 | "node_modules/@protobufjs/codegen": { 236 | "version": "2.0.4", 237 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 238 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 239 | }, 240 | "node_modules/@protobufjs/eventemitter": { 241 | "version": "1.1.0", 242 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 243 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" 244 | }, 245 | "node_modules/@protobufjs/fetch": { 246 | "version": "1.1.0", 247 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 248 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 249 | "dependencies": { 250 | "@protobufjs/aspromise": "^1.1.1", 251 | "@protobufjs/inquire": "^1.1.0" 252 | } 253 | }, 254 | "node_modules/@protobufjs/float": { 255 | "version": "1.0.2", 256 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 257 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" 258 | }, 259 | "node_modules/@protobufjs/inquire": { 260 | "version": "1.1.0", 261 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 262 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" 263 | }, 264 | "node_modules/@protobufjs/path": { 265 | "version": "1.1.2", 266 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 267 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" 268 | }, 269 | "node_modules/@protobufjs/pool": { 270 | "version": "1.1.0", 271 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 272 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" 273 | }, 274 | "node_modules/@protobufjs/utf8": { 275 | "version": "1.1.0", 276 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 277 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" 278 | }, 279 | "node_modules/@raydium-io/raydium-sdk": { 280 | "version": "1.3.1-beta.51", 281 | "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.51.tgz", 282 | "integrity": "sha512-HtZqK7NBHZLDnuhR9VFrtTM2E7QEtRKIzBI59ZOph+iaU4olgMyoMFYPU279LTip0fRUEO5LLh/8VHXVEKT2uw==", 283 | "dependencies": { 284 | "@solana/buffer-layout": "^4.0.1", 285 | "@solana/spl-token": "^0.3.9", 286 | "axios": "^1.6.2", 287 | "big.js": "^6.2.1", 288 | "bn.js": "^5.2.1", 289 | "decimal.js": "^10.4.3", 290 | "decimal.js-light": "^2.5.1", 291 | "fecha": "^4.2.3", 292 | "lodash": "^4.17.21", 293 | "toformat": "^2.0.0" 294 | }, 295 | "peerDependencies": { 296 | "@solana/web3.js": "^1.73.0" 297 | } 298 | }, 299 | "node_modules/@raydium-io/raydium-sdk/node_modules/@solana/spl-token": { 300 | "version": "0.3.11", 301 | "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", 302 | "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", 303 | "dependencies": { 304 | "@solana/buffer-layout": "^4.0.0", 305 | "@solana/buffer-layout-utils": "^0.2.0", 306 | "@solana/spl-token-metadata": "^0.1.2", 307 | "buffer": "^6.0.3" 308 | }, 309 | "engines": { 310 | "node": ">=16" 311 | }, 312 | "peerDependencies": { 313 | "@solana/web3.js": "^1.88.0" 314 | } 315 | }, 316 | "node_modules/@solana/buffer-layout": { 317 | "version": "4.0.1", 318 | "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", 319 | "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", 320 | "dependencies": { 321 | "buffer": "~6.0.3" 322 | }, 323 | "engines": { 324 | "node": ">=5.10" 325 | } 326 | }, 327 | "node_modules/@solana/buffer-layout-utils": { 328 | "version": "0.2.0", 329 | "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", 330 | "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", 331 | "dependencies": { 332 | "@solana/buffer-layout": "^4.0.0", 333 | "@solana/web3.js": "^1.32.0", 334 | "bigint-buffer": "^1.1.5", 335 | "bignumber.js": "^9.0.1" 336 | }, 337 | "engines": { 338 | "node": ">= 10" 339 | } 340 | }, 341 | "node_modules/@solana/codecs": { 342 | "version": "2.0.0-preview.2", 343 | "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-preview.2.tgz", 344 | "integrity": "sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==", 345 | "dependencies": { 346 | "@solana/codecs-core": "2.0.0-preview.2", 347 | "@solana/codecs-data-structures": "2.0.0-preview.2", 348 | "@solana/codecs-numbers": "2.0.0-preview.2", 349 | "@solana/codecs-strings": "2.0.0-preview.2", 350 | "@solana/options": "2.0.0-preview.2" 351 | } 352 | }, 353 | "node_modules/@solana/codecs-core": { 354 | "version": "2.0.0-preview.2", 355 | "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-preview.2.tgz", 356 | "integrity": "sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==", 357 | "dependencies": { 358 | "@solana/errors": "2.0.0-preview.2" 359 | } 360 | }, 361 | "node_modules/@solana/codecs-data-structures": { 362 | "version": "2.0.0-preview.2", 363 | "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.2.tgz", 364 | "integrity": "sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==", 365 | "dependencies": { 366 | "@solana/codecs-core": "2.0.0-preview.2", 367 | "@solana/codecs-numbers": "2.0.0-preview.2", 368 | "@solana/errors": "2.0.0-preview.2" 369 | } 370 | }, 371 | "node_modules/@solana/codecs-numbers": { 372 | "version": "2.0.0-preview.2", 373 | "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.2.tgz", 374 | "integrity": "sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==", 375 | "dependencies": { 376 | "@solana/codecs-core": "2.0.0-preview.2", 377 | "@solana/errors": "2.0.0-preview.2" 378 | } 379 | }, 380 | "node_modules/@solana/codecs-strings": { 381 | "version": "2.0.0-preview.2", 382 | "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.2.tgz", 383 | "integrity": "sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==", 384 | "dependencies": { 385 | "@solana/codecs-core": "2.0.0-preview.2", 386 | "@solana/codecs-numbers": "2.0.0-preview.2", 387 | "@solana/errors": "2.0.0-preview.2" 388 | }, 389 | "peerDependencies": { 390 | "fastestsmallesttextencoderdecoder": "^1.0.22" 391 | } 392 | }, 393 | "node_modules/@solana/errors": { 394 | "version": "2.0.0-preview.2", 395 | "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-preview.2.tgz", 396 | "integrity": "sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==", 397 | "dependencies": { 398 | "chalk": "^5.3.0", 399 | "commander": "^12.0.0" 400 | }, 401 | "bin": { 402 | "errors": "bin/cli.js" 403 | } 404 | }, 405 | "node_modules/@solana/options": { 406 | "version": "2.0.0-preview.2", 407 | "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-preview.2.tgz", 408 | "integrity": "sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==", 409 | "dependencies": { 410 | "@solana/codecs-core": "2.0.0-preview.2", 411 | "@solana/codecs-numbers": "2.0.0-preview.2" 412 | } 413 | }, 414 | "node_modules/@solana/spl-token": { 415 | "version": "0.4.3", 416 | "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.3.tgz", 417 | "integrity": "sha512-mRjJJE9CIBejsg9WAmDp369pWeObm42K2fwsZ4dkJAMCt1KBPb5Eb1vzM5+AYfV/BUTy3QP2oFx8kV+8Doa1xQ==", 418 | "dependencies": { 419 | "@solana/buffer-layout": "^4.0.0", 420 | "@solana/buffer-layout-utils": "^0.2.0", 421 | "@solana/spl-token-group": "^0.0.2", 422 | "@solana/spl-token-metadata": "^0.1.2", 423 | "buffer": "^6.0.3" 424 | }, 425 | "engines": { 426 | "node": ">=16" 427 | }, 428 | "peerDependencies": { 429 | "@solana/web3.js": "^1.91.1" 430 | } 431 | }, 432 | "node_modules/@solana/spl-token-group": { 433 | "version": "0.0.2", 434 | "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.2.tgz", 435 | "integrity": "sha512-vLePrFvT9+PfK2KZaddPebTWtRykXUR+060gqomFUcBk/2UPpZtsJGW+xshI9z9Ryrx7FieprZEUCApw34BwrQ==", 436 | "dependencies": { 437 | "@solana/codecs": "2.0.0-preview.2", 438 | "@solana/spl-type-length-value": "0.1.0" 439 | }, 440 | "engines": { 441 | "node": ">=16" 442 | }, 443 | "peerDependencies": { 444 | "@solana/web3.js": "^1.91.1" 445 | } 446 | }, 447 | "node_modules/@solana/spl-token-metadata": { 448 | "version": "0.1.2", 449 | "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.2.tgz", 450 | "integrity": "sha512-hJYnAJNkDrtkE2Q41YZhCpeOGU/0JgRFXbtrtOuGGeKc3pkEUHB9DDoxZAxx+XRno13GozUleyBi0qypz4c3bw==", 451 | "dependencies": { 452 | "@solana/codecs-core": "2.0.0-experimental.8618508", 453 | "@solana/codecs-data-structures": "2.0.0-experimental.8618508", 454 | "@solana/codecs-numbers": "2.0.0-experimental.8618508", 455 | "@solana/codecs-strings": "2.0.0-experimental.8618508", 456 | "@solana/options": "2.0.0-experimental.8618508", 457 | "@solana/spl-type-length-value": "0.1.0" 458 | }, 459 | "engines": { 460 | "node": ">=16" 461 | }, 462 | "peerDependencies": { 463 | "@solana/web3.js": "^1.87.6" 464 | } 465 | }, 466 | "node_modules/@solana/spl-token-metadata/node_modules/@solana/codecs-core": { 467 | "version": "2.0.0-experimental.8618508", 468 | "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-experimental.8618508.tgz", 469 | "integrity": "sha512-JCz7mKjVKtfZxkuDtwMAUgA7YvJcA2BwpZaA1NOLcted4OMC4Prwa3DUe3f3181ixPYaRyptbF0Ikq2MbDkYEA==" 470 | }, 471 | "node_modules/@solana/spl-token-metadata/node_modules/@solana/codecs-data-structures": { 472 | "version": "2.0.0-experimental.8618508", 473 | "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-experimental.8618508.tgz", 474 | "integrity": "sha512-sLpjL9sqzaDdkloBPV61Rht1tgaKq98BCtIKRuyscIrmVPu3wu0Bavk2n/QekmUzaTsj7K1pVSniM0YqCdnEBw==", 475 | "dependencies": { 476 | "@solana/codecs-core": "2.0.0-experimental.8618508", 477 | "@solana/codecs-numbers": "2.0.0-experimental.8618508" 478 | } 479 | }, 480 | "node_modules/@solana/spl-token-metadata/node_modules/@solana/codecs-numbers": { 481 | "version": "2.0.0-experimental.8618508", 482 | "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-experimental.8618508.tgz", 483 | "integrity": "sha512-EXQKfzFr3CkKKNzKSZPOOOzchXsFe90TVONWsSnVkonO9z+nGKALE0/L9uBmIFGgdzhhU9QQVFvxBMclIDJo2Q==", 484 | "dependencies": { 485 | "@solana/codecs-core": "2.0.0-experimental.8618508" 486 | } 487 | }, 488 | "node_modules/@solana/spl-token-metadata/node_modules/@solana/codecs-strings": { 489 | "version": "2.0.0-experimental.8618508", 490 | "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-experimental.8618508.tgz", 491 | "integrity": "sha512-b2yhinr1+oe+JDmnnsV0641KQqqDG8AQ16Z/x7GVWO+AWHMpRlHWVXOq8U1yhPMA4VXxl7i+D+C6ql0VGFp0GA==", 492 | "dependencies": { 493 | "@solana/codecs-core": "2.0.0-experimental.8618508", 494 | "@solana/codecs-numbers": "2.0.0-experimental.8618508" 495 | }, 496 | "peerDependencies": { 497 | "fastestsmallesttextencoderdecoder": "^1.0.22" 498 | } 499 | }, 500 | "node_modules/@solana/spl-token-metadata/node_modules/@solana/options": { 501 | "version": "2.0.0-experimental.8618508", 502 | "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-experimental.8618508.tgz", 503 | "integrity": "sha512-fy/nIRAMC3QHvnKi63KEd86Xr/zFBVxNW4nEpVEU2OT0gCEKwHY4Z55YHf7XujhyuM3PNpiBKg/YYw5QlRU4vg==", 504 | "dependencies": { 505 | "@solana/codecs-core": "2.0.0-experimental.8618508", 506 | "@solana/codecs-numbers": "2.0.0-experimental.8618508" 507 | } 508 | }, 509 | "node_modules/@solana/spl-type-length-value": { 510 | "version": "0.1.0", 511 | "resolved": "https://registry.npmjs.org/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz", 512 | "integrity": "sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==", 513 | "dependencies": { 514 | "buffer": "^6.0.3" 515 | }, 516 | "engines": { 517 | "node": ">=16" 518 | } 519 | }, 520 | "node_modules/@solana/web3.js": { 521 | "version": "1.91.4", 522 | "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.91.4.tgz", 523 | "integrity": "sha512-zconqecIcBqEF6JiM4xYF865Xc4aas+iWK5qnu7nwKPq9ilRYcn+2GiwpYXqUqqBUe0XCO17w18KO0F8h+QATg==", 524 | "dependencies": { 525 | "@babel/runtime": "^7.23.4", 526 | "@noble/curves": "^1.2.0", 527 | "@noble/hashes": "^1.3.3", 528 | "@solana/buffer-layout": "^4.0.1", 529 | "agentkeepalive": "^4.5.0", 530 | "bigint-buffer": "^1.1.5", 531 | "bn.js": "^5.2.1", 532 | "borsh": "^0.7.0", 533 | "bs58": "^4.0.1", 534 | "buffer": "6.0.3", 535 | "fast-stable-stringify": "^1.0.0", 536 | "jayson": "^4.1.0", 537 | "node-fetch": "^2.7.0", 538 | "rpc-websockets": "^7.5.1", 539 | "superstruct": "^0.14.2" 540 | } 541 | }, 542 | "node_modules/@solana/web3.js/node_modules/base-x": { 543 | "version": "3.0.9", 544 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 545 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 546 | "dependencies": { 547 | "safe-buffer": "^5.0.1" 548 | } 549 | }, 550 | "node_modules/@solana/web3.js/node_modules/bs58": { 551 | "version": "4.0.1", 552 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 553 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 554 | "dependencies": { 555 | "base-x": "^3.0.2" 556 | } 557 | }, 558 | "node_modules/@tsconfig/node10": { 559 | "version": "1.0.11", 560 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 561 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 562 | "dev": true 563 | }, 564 | "node_modules/@tsconfig/node12": { 565 | "version": "1.0.11", 566 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 567 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 568 | "dev": true 569 | }, 570 | "node_modules/@tsconfig/node14": { 571 | "version": "1.0.3", 572 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 573 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 574 | "dev": true 575 | }, 576 | "node_modules/@tsconfig/node16": { 577 | "version": "1.0.4", 578 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 579 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 580 | "dev": true 581 | }, 582 | "node_modules/@types/bn.js": { 583 | "version": "5.1.5", 584 | "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", 585 | "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", 586 | "dev": true, 587 | "dependencies": { 588 | "@types/node": "*" 589 | } 590 | }, 591 | "node_modules/@types/connect": { 592 | "version": "3.4.38", 593 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", 594 | "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", 595 | "dependencies": { 596 | "@types/node": "*" 597 | } 598 | }, 599 | "node_modules/@types/node": { 600 | "version": "20.12.7", 601 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", 602 | "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", 603 | "dependencies": { 604 | "undici-types": "~5.26.4" 605 | } 606 | }, 607 | "node_modules/@types/ws": { 608 | "version": "7.4.7", 609 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", 610 | "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", 611 | "dependencies": { 612 | "@types/node": "*" 613 | } 614 | }, 615 | "node_modules/abort-controller": { 616 | "version": "3.0.0", 617 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 618 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 619 | "dependencies": { 620 | "event-target-shim": "^5.0.0" 621 | }, 622 | "engines": { 623 | "node": ">=6.5" 624 | } 625 | }, 626 | "node_modules/acorn": { 627 | "version": "8.11.3", 628 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 629 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 630 | "dev": true, 631 | "bin": { 632 | "acorn": "bin/acorn" 633 | }, 634 | "engines": { 635 | "node": ">=0.4.0" 636 | } 637 | }, 638 | "node_modules/acorn-walk": { 639 | "version": "8.3.2", 640 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", 641 | "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", 642 | "dev": true, 643 | "engines": { 644 | "node": ">=0.4.0" 645 | } 646 | }, 647 | "node_modules/agentkeepalive": { 648 | "version": "4.5.0", 649 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", 650 | "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", 651 | "dependencies": { 652 | "humanize-ms": "^1.2.1" 653 | }, 654 | "engines": { 655 | "node": ">= 8.0.0" 656 | } 657 | }, 658 | "node_modules/ansi-regex": { 659 | "version": "5.0.1", 660 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 661 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 662 | "engines": { 663 | "node": ">=8" 664 | } 665 | }, 666 | "node_modules/ansi-styles": { 667 | "version": "4.3.0", 668 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 669 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 670 | "dependencies": { 671 | "color-convert": "^2.0.1" 672 | }, 673 | "engines": { 674 | "node": ">=8" 675 | }, 676 | "funding": { 677 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 678 | } 679 | }, 680 | "node_modules/arg": { 681 | "version": "4.1.3", 682 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 683 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 684 | "dev": true 685 | }, 686 | "node_modules/asynckit": { 687 | "version": "0.4.0", 688 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 689 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 690 | }, 691 | "node_modules/atomic-sleep": { 692 | "version": "1.0.0", 693 | "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 694 | "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", 695 | "engines": { 696 | "node": ">=8.0.0" 697 | } 698 | }, 699 | "node_modules/axios": { 700 | "version": "1.6.8", 701 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", 702 | "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", 703 | "dependencies": { 704 | "follow-redirects": "^1.15.6", 705 | "form-data": "^4.0.0", 706 | "proxy-from-env": "^1.1.0" 707 | } 708 | }, 709 | "node_modules/base-x": { 710 | "version": "4.0.0", 711 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", 712 | "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" 713 | }, 714 | "node_modules/base64-js": { 715 | "version": "1.5.1", 716 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 717 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 718 | "funding": [ 719 | { 720 | "type": "github", 721 | "url": "https://github.com/sponsors/feross" 722 | }, 723 | { 724 | "type": "patreon", 725 | "url": "https://www.patreon.com/feross" 726 | }, 727 | { 728 | "type": "consulting", 729 | "url": "https://feross.org/support" 730 | } 731 | ] 732 | }, 733 | "node_modules/big.js": { 734 | "version": "6.2.1", 735 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", 736 | "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==", 737 | "engines": { 738 | "node": "*" 739 | }, 740 | "funding": { 741 | "type": "opencollective", 742 | "url": "https://opencollective.com/bigjs" 743 | } 744 | }, 745 | "node_modules/bigint-buffer": { 746 | "version": "1.1.5", 747 | "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", 748 | "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", 749 | "hasInstallScript": true, 750 | "dependencies": { 751 | "bindings": "^1.3.0" 752 | }, 753 | "engines": { 754 | "node": ">= 10.0.0" 755 | } 756 | }, 757 | "node_modules/bignumber.js": { 758 | "version": "9.1.2", 759 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", 760 | "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", 761 | "engines": { 762 | "node": "*" 763 | } 764 | }, 765 | "node_modules/bindings": { 766 | "version": "1.5.0", 767 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 768 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 769 | "dependencies": { 770 | "file-uri-to-path": "1.0.0" 771 | } 772 | }, 773 | "node_modules/bn.js": { 774 | "version": "5.2.1", 775 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", 776 | "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" 777 | }, 778 | "node_modules/borsh": { 779 | "version": "0.7.0", 780 | "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", 781 | "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", 782 | "dependencies": { 783 | "bn.js": "^5.2.0", 784 | "bs58": "^4.0.0", 785 | "text-encoding-utf-8": "^1.0.2" 786 | } 787 | }, 788 | "node_modules/borsh/node_modules/base-x": { 789 | "version": "3.0.9", 790 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 791 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 792 | "dependencies": { 793 | "safe-buffer": "^5.0.1" 794 | } 795 | }, 796 | "node_modules/borsh/node_modules/bs58": { 797 | "version": "4.0.1", 798 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 799 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 800 | "dependencies": { 801 | "base-x": "^3.0.2" 802 | } 803 | }, 804 | "node_modules/bs58": { 805 | "version": "5.0.0", 806 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", 807 | "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", 808 | "dependencies": { 809 | "base-x": "^4.0.0" 810 | } 811 | }, 812 | "node_modules/buffer": { 813 | "version": "6.0.3", 814 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 815 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 816 | "funding": [ 817 | { 818 | "type": "github", 819 | "url": "https://github.com/sponsors/feross" 820 | }, 821 | { 822 | "type": "patreon", 823 | "url": "https://www.patreon.com/feross" 824 | }, 825 | { 826 | "type": "consulting", 827 | "url": "https://feross.org/support" 828 | } 829 | ], 830 | "dependencies": { 831 | "base64-js": "^1.3.1", 832 | "ieee754": "^1.2.1" 833 | } 834 | }, 835 | "node_modules/bufferutil": { 836 | "version": "4.0.8", 837 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", 838 | "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", 839 | "hasInstallScript": true, 840 | "optional": true, 841 | "dependencies": { 842 | "node-gyp-build": "^4.3.0" 843 | }, 844 | "engines": { 845 | "node": ">=6.14.2" 846 | } 847 | }, 848 | "node_modules/chalk": { 849 | "version": "5.3.0", 850 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 851 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 852 | "engines": { 853 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 854 | }, 855 | "funding": { 856 | "url": "https://github.com/chalk/chalk?sponsor=1" 857 | } 858 | }, 859 | "node_modules/cliui": { 860 | "version": "8.0.1", 861 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 862 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 863 | "dependencies": { 864 | "string-width": "^4.2.0", 865 | "strip-ansi": "^6.0.1", 866 | "wrap-ansi": "^7.0.0" 867 | }, 868 | "engines": { 869 | "node": ">=12" 870 | } 871 | }, 872 | "node_modules/color-convert": { 873 | "version": "2.0.1", 874 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 875 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 876 | "dependencies": { 877 | "color-name": "~1.1.4" 878 | }, 879 | "engines": { 880 | "node": ">=7.0.0" 881 | } 882 | }, 883 | "node_modules/color-name": { 884 | "version": "1.1.4", 885 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 886 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 887 | }, 888 | "node_modules/colorette": { 889 | "version": "2.0.20", 890 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 891 | "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" 892 | }, 893 | "node_modules/combined-stream": { 894 | "version": "1.0.8", 895 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 896 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 897 | "dependencies": { 898 | "delayed-stream": "~1.0.0" 899 | }, 900 | "engines": { 901 | "node": ">= 0.8" 902 | } 903 | }, 904 | "node_modules/commander": { 905 | "version": "12.0.0", 906 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", 907 | "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", 908 | "engines": { 909 | "node": ">=18" 910 | } 911 | }, 912 | "node_modules/create-require": { 913 | "version": "1.1.1", 914 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 915 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 916 | "dev": true 917 | }, 918 | "node_modules/dateformat": { 919 | "version": "4.6.3", 920 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", 921 | "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", 922 | "engines": { 923 | "node": "*" 924 | } 925 | }, 926 | "node_modules/decimal.js": { 927 | "version": "10.4.3", 928 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", 929 | "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" 930 | }, 931 | "node_modules/decimal.js-light": { 932 | "version": "2.5.1", 933 | "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", 934 | "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" 935 | }, 936 | "node_modules/delay": { 937 | "version": "5.0.0", 938 | "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", 939 | "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", 940 | "engines": { 941 | "node": ">=10" 942 | }, 943 | "funding": { 944 | "url": "https://github.com/sponsors/sindresorhus" 945 | } 946 | }, 947 | "node_modules/delayed-stream": { 948 | "version": "1.0.0", 949 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 950 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 951 | "engines": { 952 | "node": ">=0.4.0" 953 | } 954 | }, 955 | "node_modules/diff": { 956 | "version": "4.0.2", 957 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 958 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 959 | "dev": true, 960 | "engines": { 961 | "node": ">=0.3.1" 962 | } 963 | }, 964 | "node_modules/dotenv": { 965 | "version": "16.4.5", 966 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", 967 | "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", 968 | "engines": { 969 | "node": ">=12" 970 | }, 971 | "funding": { 972 | "url": "https://dotenvx.com" 973 | } 974 | }, 975 | "node_modules/emoji-regex": { 976 | "version": "8.0.0", 977 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 978 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 979 | }, 980 | "node_modules/end-of-stream": { 981 | "version": "1.4.4", 982 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 983 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 984 | "dependencies": { 985 | "once": "^1.4.0" 986 | } 987 | }, 988 | "node_modules/es6-promise": { 989 | "version": "4.2.8", 990 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 991 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" 992 | }, 993 | "node_modules/es6-promisify": { 994 | "version": "5.0.0", 995 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 996 | "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", 997 | "dependencies": { 998 | "es6-promise": "^4.0.3" 999 | } 1000 | }, 1001 | "node_modules/escalade": { 1002 | "version": "3.1.2", 1003 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 1004 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 1005 | "engines": { 1006 | "node": ">=6" 1007 | } 1008 | }, 1009 | "node_modules/event-target-shim": { 1010 | "version": "5.0.1", 1011 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1012 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 1013 | "engines": { 1014 | "node": ">=6" 1015 | } 1016 | }, 1017 | "node_modules/eventemitter3": { 1018 | "version": "4.0.7", 1019 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 1020 | "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" 1021 | }, 1022 | "node_modules/events": { 1023 | "version": "3.3.0", 1024 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 1025 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 1026 | "engines": { 1027 | "node": ">=0.8.x" 1028 | } 1029 | }, 1030 | "node_modules/eyes": { 1031 | "version": "0.1.8", 1032 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 1033 | "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", 1034 | "engines": { 1035 | "node": "> 0.1.90" 1036 | } 1037 | }, 1038 | "node_modules/fast-copy": { 1039 | "version": "3.0.2", 1040 | "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", 1041 | "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" 1042 | }, 1043 | "node_modules/fast-redact": { 1044 | "version": "3.5.0", 1045 | "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", 1046 | "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", 1047 | "engines": { 1048 | "node": ">=6" 1049 | } 1050 | }, 1051 | "node_modules/fast-safe-stringify": { 1052 | "version": "2.1.1", 1053 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 1054 | "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" 1055 | }, 1056 | "node_modules/fast-stable-stringify": { 1057 | "version": "1.0.0", 1058 | "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", 1059 | "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" 1060 | }, 1061 | "node_modules/fastestsmallesttextencoderdecoder": { 1062 | "version": "1.0.22", 1063 | "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", 1064 | "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", 1065 | "peer": true 1066 | }, 1067 | "node_modules/fecha": { 1068 | "version": "4.2.3", 1069 | "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", 1070 | "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" 1071 | }, 1072 | "node_modules/file-uri-to-path": { 1073 | "version": "1.0.0", 1074 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 1075 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 1076 | }, 1077 | "node_modules/follow-redirects": { 1078 | "version": "1.15.6", 1079 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", 1080 | "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", 1081 | "funding": [ 1082 | { 1083 | "type": "individual", 1084 | "url": "https://github.com/sponsors/RubenVerborgh" 1085 | } 1086 | ], 1087 | "engines": { 1088 | "node": ">=4.0" 1089 | }, 1090 | "peerDependenciesMeta": { 1091 | "debug": { 1092 | "optional": true 1093 | } 1094 | } 1095 | }, 1096 | "node_modules/form-data": { 1097 | "version": "4.0.0", 1098 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 1099 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 1100 | "dependencies": { 1101 | "asynckit": "^0.4.0", 1102 | "combined-stream": "^1.0.8", 1103 | "mime-types": "^2.1.12" 1104 | }, 1105 | "engines": { 1106 | "node": ">= 6" 1107 | } 1108 | }, 1109 | "node_modules/get-caller-file": { 1110 | "version": "2.0.5", 1111 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1112 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1113 | "engines": { 1114 | "node": "6.* || 8.* || >= 10.*" 1115 | } 1116 | }, 1117 | "node_modules/help-me": { 1118 | "version": "5.0.0", 1119 | "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", 1120 | "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" 1121 | }, 1122 | "node_modules/humanize-ms": { 1123 | "version": "1.2.1", 1124 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 1125 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 1126 | "dependencies": { 1127 | "ms": "^2.0.0" 1128 | } 1129 | }, 1130 | "node_modules/ieee754": { 1131 | "version": "1.2.1", 1132 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1133 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1134 | "funding": [ 1135 | { 1136 | "type": "github", 1137 | "url": "https://github.com/sponsors/feross" 1138 | }, 1139 | { 1140 | "type": "patreon", 1141 | "url": "https://www.patreon.com/feross" 1142 | }, 1143 | { 1144 | "type": "consulting", 1145 | "url": "https://feross.org/support" 1146 | } 1147 | ] 1148 | }, 1149 | "node_modules/is-fullwidth-code-point": { 1150 | "version": "3.0.0", 1151 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1152 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1153 | "engines": { 1154 | "node": ">=8" 1155 | } 1156 | }, 1157 | "node_modules/isomorphic-ws": { 1158 | "version": "4.0.1", 1159 | "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", 1160 | "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", 1161 | "peerDependencies": { 1162 | "ws": "*" 1163 | } 1164 | }, 1165 | "node_modules/jayson": { 1166 | "version": "4.1.0", 1167 | "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz", 1168 | "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==", 1169 | "dependencies": { 1170 | "@types/connect": "^3.4.33", 1171 | "@types/node": "^12.12.54", 1172 | "@types/ws": "^7.4.4", 1173 | "commander": "^2.20.3", 1174 | "delay": "^5.0.0", 1175 | "es6-promisify": "^5.0.0", 1176 | "eyes": "^0.1.8", 1177 | "isomorphic-ws": "^4.0.1", 1178 | "json-stringify-safe": "^5.0.1", 1179 | "JSONStream": "^1.3.5", 1180 | "uuid": "^8.3.2", 1181 | "ws": "^7.4.5" 1182 | }, 1183 | "bin": { 1184 | "jayson": "bin/jayson.js" 1185 | }, 1186 | "engines": { 1187 | "node": ">=8" 1188 | } 1189 | }, 1190 | "node_modules/jayson/node_modules/@types/node": { 1191 | "version": "12.20.55", 1192 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", 1193 | "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" 1194 | }, 1195 | "node_modules/jayson/node_modules/commander": { 1196 | "version": "2.20.3", 1197 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1198 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 1199 | }, 1200 | "node_modules/jito-ts": { 1201 | "version": "3.0.1", 1202 | "resolved": "https://registry.npmjs.org/jito-ts/-/jito-ts-3.0.1.tgz", 1203 | "integrity": "sha512-TSofF7KqcwyaWGjPaSYC8RDoNBY1TPRNBHdrw24bdIi7mQ5bFEDdYK3D//llw/ml8YDvcZlgd644WxhjLTS9yg==", 1204 | "dependencies": { 1205 | "@grpc/grpc-js": "^1.8.13", 1206 | "@noble/ed25519": "^1.7.1", 1207 | "@solana/web3.js": "~1.77.3", 1208 | "agentkeepalive": "^4.3.0", 1209 | "dotenv": "^16.0.3", 1210 | "jayson": "^4.0.0", 1211 | "node-fetch": "^2.6.7", 1212 | "superstruct": "^1.0.3" 1213 | } 1214 | }, 1215 | "node_modules/jito-ts/node_modules/@solana/web3.js": { 1216 | "version": "1.77.4", 1217 | "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.77.4.tgz", 1218 | "integrity": "sha512-XdN0Lh4jdY7J8FYMyucxCwzn6Ga2Sr1DHDWRbqVzk7ZPmmpSPOVWHzO67X1cVT+jNi1D6gZi2tgjHgDPuj6e9Q==", 1219 | "dependencies": { 1220 | "@babel/runtime": "^7.12.5", 1221 | "@noble/curves": "^1.0.0", 1222 | "@noble/hashes": "^1.3.0", 1223 | "@solana/buffer-layout": "^4.0.0", 1224 | "agentkeepalive": "^4.2.1", 1225 | "bigint-buffer": "^1.1.5", 1226 | "bn.js": "^5.0.0", 1227 | "borsh": "^0.7.0", 1228 | "bs58": "^4.0.1", 1229 | "buffer": "6.0.3", 1230 | "fast-stable-stringify": "^1.0.0", 1231 | "jayson": "^4.1.0", 1232 | "node-fetch": "^2.6.7", 1233 | "rpc-websockets": "^7.5.1", 1234 | "superstruct": "^0.14.2" 1235 | } 1236 | }, 1237 | "node_modules/jito-ts/node_modules/@solana/web3.js/node_modules/superstruct": { 1238 | "version": "0.14.2", 1239 | "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", 1240 | "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" 1241 | }, 1242 | "node_modules/jito-ts/node_modules/base-x": { 1243 | "version": "3.0.9", 1244 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1245 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1246 | "dependencies": { 1247 | "safe-buffer": "^5.0.1" 1248 | } 1249 | }, 1250 | "node_modules/jito-ts/node_modules/bs58": { 1251 | "version": "4.0.1", 1252 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1253 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1254 | "dependencies": { 1255 | "base-x": "^3.0.2" 1256 | } 1257 | }, 1258 | "node_modules/jito-ts/node_modules/superstruct": { 1259 | "version": "1.0.4", 1260 | "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", 1261 | "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", 1262 | "engines": { 1263 | "node": ">=14.0.0" 1264 | } 1265 | }, 1266 | "node_modules/joycon": { 1267 | "version": "3.1.1", 1268 | "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", 1269 | "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", 1270 | "engines": { 1271 | "node": ">=10" 1272 | } 1273 | }, 1274 | "node_modules/json-stringify-safe": { 1275 | "version": "5.0.1", 1276 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1277 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" 1278 | }, 1279 | "node_modules/jsonparse": { 1280 | "version": "1.3.1", 1281 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 1282 | "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", 1283 | "engines": [ 1284 | "node >= 0.2.0" 1285 | ] 1286 | }, 1287 | "node_modules/JSONStream": { 1288 | "version": "1.3.5", 1289 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 1290 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 1291 | "dependencies": { 1292 | "jsonparse": "^1.2.0", 1293 | "through": ">=2.2.7 <3" 1294 | }, 1295 | "bin": { 1296 | "JSONStream": "bin.js" 1297 | }, 1298 | "engines": { 1299 | "node": "*" 1300 | } 1301 | }, 1302 | "node_modules/lodash": { 1303 | "version": "4.17.21", 1304 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1305 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1306 | }, 1307 | "node_modules/lodash.camelcase": { 1308 | "version": "4.3.0", 1309 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 1310 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" 1311 | }, 1312 | "node_modules/long": { 1313 | "version": "5.2.3", 1314 | "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", 1315 | "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" 1316 | }, 1317 | "node_modules/make-error": { 1318 | "version": "1.3.6", 1319 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1320 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1321 | "dev": true 1322 | }, 1323 | "node_modules/mime-db": { 1324 | "version": "1.52.0", 1325 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1326 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1327 | "engines": { 1328 | "node": ">= 0.6" 1329 | } 1330 | }, 1331 | "node_modules/mime-types": { 1332 | "version": "2.1.35", 1333 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1334 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1335 | "dependencies": { 1336 | "mime-db": "1.52.0" 1337 | }, 1338 | "engines": { 1339 | "node": ">= 0.6" 1340 | } 1341 | }, 1342 | "node_modules/minimist": { 1343 | "version": "1.2.8", 1344 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1345 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1346 | "funding": { 1347 | "url": "https://github.com/sponsors/ljharb" 1348 | } 1349 | }, 1350 | "node_modules/ms": { 1351 | "version": "2.1.3", 1352 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1353 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1354 | }, 1355 | "node_modules/node-fetch": { 1356 | "version": "2.7.0", 1357 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 1358 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 1359 | "dependencies": { 1360 | "whatwg-url": "^5.0.0" 1361 | }, 1362 | "engines": { 1363 | "node": "4.x || >=6.0.0" 1364 | }, 1365 | "peerDependencies": { 1366 | "encoding": "^0.1.0" 1367 | }, 1368 | "peerDependenciesMeta": { 1369 | "encoding": { 1370 | "optional": true 1371 | } 1372 | } 1373 | }, 1374 | "node_modules/node-gyp-build": { 1375 | "version": "4.8.0", 1376 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", 1377 | "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", 1378 | "optional": true, 1379 | "bin": { 1380 | "node-gyp-build": "bin.js", 1381 | "node-gyp-build-optional": "optional.js", 1382 | "node-gyp-build-test": "build-test.js" 1383 | } 1384 | }, 1385 | "node_modules/on-exit-leak-free": { 1386 | "version": "2.1.2", 1387 | "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", 1388 | "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", 1389 | "engines": { 1390 | "node": ">=14.0.0" 1391 | } 1392 | }, 1393 | "node_modules/once": { 1394 | "version": "1.4.0", 1395 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1396 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1397 | "dependencies": { 1398 | "wrappy": "1" 1399 | } 1400 | }, 1401 | "node_modules/pino": { 1402 | "version": "8.20.0", 1403 | "resolved": "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz", 1404 | "integrity": "sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==", 1405 | "dependencies": { 1406 | "atomic-sleep": "^1.0.0", 1407 | "fast-redact": "^3.1.1", 1408 | "on-exit-leak-free": "^2.1.0", 1409 | "pino-abstract-transport": "^1.1.0", 1410 | "pino-std-serializers": "^6.0.0", 1411 | "process-warning": "^3.0.0", 1412 | "quick-format-unescaped": "^4.0.3", 1413 | "real-require": "^0.2.0", 1414 | "safe-stable-stringify": "^2.3.1", 1415 | "sonic-boom": "^3.7.0", 1416 | "thread-stream": "^2.0.0" 1417 | }, 1418 | "bin": { 1419 | "pino": "bin.js" 1420 | } 1421 | }, 1422 | "node_modules/pino-abstract-transport": { 1423 | "version": "1.1.0", 1424 | "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", 1425 | "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", 1426 | "dependencies": { 1427 | "readable-stream": "^4.0.0", 1428 | "split2": "^4.0.0" 1429 | } 1430 | }, 1431 | "node_modules/pino-pretty": { 1432 | "version": "10.3.1", 1433 | "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz", 1434 | "integrity": "sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==", 1435 | "dependencies": { 1436 | "colorette": "^2.0.7", 1437 | "dateformat": "^4.6.3", 1438 | "fast-copy": "^3.0.0", 1439 | "fast-safe-stringify": "^2.1.1", 1440 | "help-me": "^5.0.0", 1441 | "joycon": "^3.1.1", 1442 | "minimist": "^1.2.6", 1443 | "on-exit-leak-free": "^2.1.0", 1444 | "pino-abstract-transport": "^1.0.0", 1445 | "pump": "^3.0.0", 1446 | "readable-stream": "^4.0.0", 1447 | "secure-json-parse": "^2.4.0", 1448 | "sonic-boom": "^3.0.0", 1449 | "strip-json-comments": "^3.1.1" 1450 | }, 1451 | "bin": { 1452 | "pino-pretty": "bin.js" 1453 | } 1454 | }, 1455 | "node_modules/pino-std-serializers": { 1456 | "version": "6.2.2", 1457 | "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", 1458 | "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" 1459 | }, 1460 | "node_modules/prettier": { 1461 | "version": "3.2.5", 1462 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", 1463 | "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", 1464 | "dev": true, 1465 | "bin": { 1466 | "prettier": "bin/prettier.cjs" 1467 | }, 1468 | "engines": { 1469 | "node": ">=14" 1470 | }, 1471 | "funding": { 1472 | "url": "https://github.com/prettier/prettier?sponsor=1" 1473 | } 1474 | }, 1475 | "node_modules/process": { 1476 | "version": "0.11.10", 1477 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1478 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 1479 | "engines": { 1480 | "node": ">= 0.6.0" 1481 | } 1482 | }, 1483 | "node_modules/process-warning": { 1484 | "version": "3.0.0", 1485 | "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", 1486 | "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" 1487 | }, 1488 | "node_modules/protobufjs": { 1489 | "version": "7.2.6", 1490 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", 1491 | "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", 1492 | "hasInstallScript": true, 1493 | "dependencies": { 1494 | "@protobufjs/aspromise": "^1.1.2", 1495 | "@protobufjs/base64": "^1.1.2", 1496 | "@protobufjs/codegen": "^2.0.4", 1497 | "@protobufjs/eventemitter": "^1.1.0", 1498 | "@protobufjs/fetch": "^1.1.0", 1499 | "@protobufjs/float": "^1.0.2", 1500 | "@protobufjs/inquire": "^1.1.0", 1501 | "@protobufjs/path": "^1.1.2", 1502 | "@protobufjs/pool": "^1.1.0", 1503 | "@protobufjs/utf8": "^1.1.0", 1504 | "@types/node": ">=13.7.0", 1505 | "long": "^5.0.0" 1506 | }, 1507 | "engines": { 1508 | "node": ">=12.0.0" 1509 | } 1510 | }, 1511 | "node_modules/proxy-from-env": { 1512 | "version": "1.1.0", 1513 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1514 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 1515 | }, 1516 | "node_modules/pump": { 1517 | "version": "3.0.0", 1518 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1519 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1520 | "dependencies": { 1521 | "end-of-stream": "^1.1.0", 1522 | "once": "^1.3.1" 1523 | } 1524 | }, 1525 | "node_modules/quick-format-unescaped": { 1526 | "version": "4.0.4", 1527 | "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 1528 | "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" 1529 | }, 1530 | "node_modules/readable-stream": { 1531 | "version": "4.5.2", 1532 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", 1533 | "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", 1534 | "dependencies": { 1535 | "abort-controller": "^3.0.0", 1536 | "buffer": "^6.0.3", 1537 | "events": "^3.3.0", 1538 | "process": "^0.11.10", 1539 | "string_decoder": "^1.3.0" 1540 | }, 1541 | "engines": { 1542 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1543 | } 1544 | }, 1545 | "node_modules/real-require": { 1546 | "version": "0.2.0", 1547 | "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", 1548 | "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", 1549 | "engines": { 1550 | "node": ">= 12.13.0" 1551 | } 1552 | }, 1553 | "node_modules/regenerator-runtime": { 1554 | "version": "0.14.1", 1555 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", 1556 | "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" 1557 | }, 1558 | "node_modules/require-directory": { 1559 | "version": "2.1.1", 1560 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1561 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1562 | "engines": { 1563 | "node": ">=0.10.0" 1564 | } 1565 | }, 1566 | "node_modules/rpc-websockets": { 1567 | "version": "7.9.0", 1568 | "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.9.0.tgz", 1569 | "integrity": "sha512-DwKewQz1IUA5wfLvgM8wDpPRcr+nWSxuFxx5CbrI2z/MyyZ4nXLM86TvIA+cI1ZAdqC8JIBR1mZR55dzaLU+Hw==", 1570 | "dependencies": { 1571 | "@babel/runtime": "^7.17.2", 1572 | "eventemitter3": "^4.0.7", 1573 | "uuid": "^8.3.2", 1574 | "ws": "^8.5.0" 1575 | }, 1576 | "funding": { 1577 | "type": "paypal", 1578 | "url": "https://paypal.me/kozjak" 1579 | }, 1580 | "optionalDependencies": { 1581 | "bufferutil": "^4.0.1", 1582 | "utf-8-validate": "^5.0.2" 1583 | } 1584 | }, 1585 | "node_modules/rpc-websockets/node_modules/ws": { 1586 | "version": "8.16.0", 1587 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", 1588 | "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", 1589 | "engines": { 1590 | "node": ">=10.0.0" 1591 | }, 1592 | "peerDependencies": { 1593 | "bufferutil": "^4.0.1", 1594 | "utf-8-validate": ">=5.0.2" 1595 | }, 1596 | "peerDependenciesMeta": { 1597 | "bufferutil": { 1598 | "optional": true 1599 | }, 1600 | "utf-8-validate": { 1601 | "optional": true 1602 | } 1603 | } 1604 | }, 1605 | "node_modules/safe-buffer": { 1606 | "version": "5.2.1", 1607 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1608 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1609 | "funding": [ 1610 | { 1611 | "type": "github", 1612 | "url": "https://github.com/sponsors/feross" 1613 | }, 1614 | { 1615 | "type": "patreon", 1616 | "url": "https://www.patreon.com/feross" 1617 | }, 1618 | { 1619 | "type": "consulting", 1620 | "url": "https://feross.org/support" 1621 | } 1622 | ] 1623 | }, 1624 | "node_modules/safe-stable-stringify": { 1625 | "version": "2.4.3", 1626 | "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", 1627 | "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", 1628 | "engines": { 1629 | "node": ">=10" 1630 | } 1631 | }, 1632 | "node_modules/secure-json-parse": { 1633 | "version": "2.7.0", 1634 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", 1635 | "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" 1636 | }, 1637 | "node_modules/sonic-boom": { 1638 | "version": "3.8.1", 1639 | "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", 1640 | "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", 1641 | "dependencies": { 1642 | "atomic-sleep": "^1.0.0" 1643 | } 1644 | }, 1645 | "node_modules/split2": { 1646 | "version": "4.2.0", 1647 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", 1648 | "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", 1649 | "engines": { 1650 | "node": ">= 10.x" 1651 | } 1652 | }, 1653 | "node_modules/string_decoder": { 1654 | "version": "1.3.0", 1655 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1656 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1657 | "dependencies": { 1658 | "safe-buffer": "~5.2.0" 1659 | } 1660 | }, 1661 | "node_modules/string-width": { 1662 | "version": "4.2.3", 1663 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1664 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1665 | "dependencies": { 1666 | "emoji-regex": "^8.0.0", 1667 | "is-fullwidth-code-point": "^3.0.0", 1668 | "strip-ansi": "^6.0.1" 1669 | }, 1670 | "engines": { 1671 | "node": ">=8" 1672 | } 1673 | }, 1674 | "node_modules/strip-ansi": { 1675 | "version": "6.0.1", 1676 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1677 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1678 | "dependencies": { 1679 | "ansi-regex": "^5.0.1" 1680 | }, 1681 | "engines": { 1682 | "node": ">=8" 1683 | } 1684 | }, 1685 | "node_modules/strip-json-comments": { 1686 | "version": "3.1.1", 1687 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1688 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1689 | "engines": { 1690 | "node": ">=8" 1691 | }, 1692 | "funding": { 1693 | "url": "https://github.com/sponsors/sindresorhus" 1694 | } 1695 | }, 1696 | "node_modules/superstruct": { 1697 | "version": "0.14.2", 1698 | "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", 1699 | "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" 1700 | }, 1701 | "node_modules/text-encoding-utf-8": { 1702 | "version": "1.0.2", 1703 | "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", 1704 | "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" 1705 | }, 1706 | "node_modules/thread-stream": { 1707 | "version": "2.4.1", 1708 | "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", 1709 | "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", 1710 | "dependencies": { 1711 | "real-require": "^0.2.0" 1712 | } 1713 | }, 1714 | "node_modules/through": { 1715 | "version": "2.3.8", 1716 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1717 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" 1718 | }, 1719 | "node_modules/toformat": { 1720 | "version": "2.0.0", 1721 | "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", 1722 | "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" 1723 | }, 1724 | "node_modules/tr46": { 1725 | "version": "0.0.3", 1726 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1727 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1728 | }, 1729 | "node_modules/ts-node": { 1730 | "version": "10.9.2", 1731 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 1732 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 1733 | "dev": true, 1734 | "dependencies": { 1735 | "@cspotcode/source-map-support": "^0.8.0", 1736 | "@tsconfig/node10": "^1.0.7", 1737 | "@tsconfig/node12": "^1.0.7", 1738 | "@tsconfig/node14": "^1.0.0", 1739 | "@tsconfig/node16": "^1.0.2", 1740 | "acorn": "^8.4.1", 1741 | "acorn-walk": "^8.1.1", 1742 | "arg": "^4.1.0", 1743 | "create-require": "^1.1.0", 1744 | "diff": "^4.0.1", 1745 | "make-error": "^1.1.1", 1746 | "v8-compile-cache-lib": "^3.0.1", 1747 | "yn": "3.1.1" 1748 | }, 1749 | "bin": { 1750 | "ts-node": "dist/bin.js", 1751 | "ts-node-cwd": "dist/bin-cwd.js", 1752 | "ts-node-esm": "dist/bin-esm.js", 1753 | "ts-node-script": "dist/bin-script.js", 1754 | "ts-node-transpile-only": "dist/bin-transpile.js", 1755 | "ts-script": "dist/bin-script-deprecated.js" 1756 | }, 1757 | "peerDependencies": { 1758 | "@swc/core": ">=1.2.50", 1759 | "@swc/wasm": ">=1.2.50", 1760 | "@types/node": "*", 1761 | "typescript": ">=2.7" 1762 | }, 1763 | "peerDependenciesMeta": { 1764 | "@swc/core": { 1765 | "optional": true 1766 | }, 1767 | "@swc/wasm": { 1768 | "optional": true 1769 | } 1770 | } 1771 | }, 1772 | "node_modules/typescript": { 1773 | "version": "5.4.5", 1774 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", 1775 | "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", 1776 | "dev": true, 1777 | "bin": { 1778 | "tsc": "bin/tsc", 1779 | "tsserver": "bin/tsserver" 1780 | }, 1781 | "engines": { 1782 | "node": ">=14.17" 1783 | } 1784 | }, 1785 | "node_modules/undici-types": { 1786 | "version": "5.26.5", 1787 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 1788 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 1789 | }, 1790 | "node_modules/utf-8-validate": { 1791 | "version": "5.0.10", 1792 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", 1793 | "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", 1794 | "hasInstallScript": true, 1795 | "optional": true, 1796 | "dependencies": { 1797 | "node-gyp-build": "^4.3.0" 1798 | }, 1799 | "engines": { 1800 | "node": ">=6.14.2" 1801 | } 1802 | }, 1803 | "node_modules/uuid": { 1804 | "version": "8.3.2", 1805 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1806 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 1807 | "bin": { 1808 | "uuid": "dist/bin/uuid" 1809 | } 1810 | }, 1811 | "node_modules/v8-compile-cache-lib": { 1812 | "version": "3.0.1", 1813 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 1814 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 1815 | "dev": true 1816 | }, 1817 | "node_modules/webidl-conversions": { 1818 | "version": "3.0.1", 1819 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1820 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1821 | }, 1822 | "node_modules/whatwg-url": { 1823 | "version": "5.0.0", 1824 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1825 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1826 | "dependencies": { 1827 | "tr46": "~0.0.3", 1828 | "webidl-conversions": "^3.0.0" 1829 | } 1830 | }, 1831 | "node_modules/wrap-ansi": { 1832 | "version": "7.0.0", 1833 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1834 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1835 | "dependencies": { 1836 | "ansi-styles": "^4.0.0", 1837 | "string-width": "^4.1.0", 1838 | "strip-ansi": "^6.0.0" 1839 | }, 1840 | "engines": { 1841 | "node": ">=10" 1842 | }, 1843 | "funding": { 1844 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1845 | } 1846 | }, 1847 | "node_modules/wrappy": { 1848 | "version": "1.0.2", 1849 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1850 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1851 | }, 1852 | "node_modules/ws": { 1853 | "version": "7.5.9", 1854 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 1855 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 1856 | "engines": { 1857 | "node": ">=8.3.0" 1858 | }, 1859 | "peerDependencies": { 1860 | "bufferutil": "^4.0.1", 1861 | "utf-8-validate": "^5.0.2" 1862 | }, 1863 | "peerDependenciesMeta": { 1864 | "bufferutil": { 1865 | "optional": true 1866 | }, 1867 | "utf-8-validate": { 1868 | "optional": true 1869 | } 1870 | } 1871 | }, 1872 | "node_modules/y18n": { 1873 | "version": "5.0.8", 1874 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1875 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1876 | "engines": { 1877 | "node": ">=10" 1878 | } 1879 | }, 1880 | "node_modules/yargs": { 1881 | "version": "17.7.2", 1882 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 1883 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 1884 | "dependencies": { 1885 | "cliui": "^8.0.1", 1886 | "escalade": "^3.1.1", 1887 | "get-caller-file": "^2.0.5", 1888 | "require-directory": "^2.1.1", 1889 | "string-width": "^4.2.3", 1890 | "y18n": "^5.0.5", 1891 | "yargs-parser": "^21.1.1" 1892 | }, 1893 | "engines": { 1894 | "node": ">=12" 1895 | } 1896 | }, 1897 | "node_modules/yargs-parser": { 1898 | "version": "21.1.1", 1899 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 1900 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 1901 | "engines": { 1902 | "node": ">=12" 1903 | } 1904 | }, 1905 | "node_modules/yn": { 1906 | "version": "3.1.1", 1907 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 1908 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 1909 | "dev": true, 1910 | "engines": { 1911 | "node": ">=6" 1912 | } 1913 | } 1914 | } 1915 | } 1916 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "raydium-volume-bot", 3 | "scripts": { 4 | "start": "ts-node index.ts", 5 | "sell": "ts-node sell.ts", 6 | "tsc": "tsc --noEmit", 7 | "gather": "ts-node gather.ts", 8 | "status": "ts-node status.ts", 9 | "massive": "ts-node massiveBuy.ts" 10 | }, 11 | "dependencies": { 12 | "@metaplex-foundation/mpl-token-metadata": "^3.2.1", 13 | "@metaplex-foundation/umi": "^0.9.1", 14 | "@raydium-io/raydium-sdk": "^1.3.1-beta.47", 15 | "@solana/spl-token": "^0.4.0", 16 | "@solana/web3.js": "^1.89.1", 17 | "axios": "^1.6.8", 18 | "bigint-buffer": "^1.1.5", 19 | "bn.js": "^5.2.1", 20 | "bs58": "^5.0.0", 21 | "dotenv": "^16.4.1", 22 | "jito-ts": "^3.0.1", 23 | "pino": "^8.18.0", 24 | "pino-pretty": "^10.3.1", 25 | "pino-std-serializers": "^6.2.2" 26 | }, 27 | "devDependencies": { 28 | "@types/bn.js": "^5.1.5", 29 | "prettier": "^3.2.4", 30 | "ts-node": "^10.9.2", 31 | "typescript": "^5.3.3" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /sell.ts: -------------------------------------------------------------------------------- 1 | import { 2 | NATIVE_MINT, 3 | createAssociatedTokenAccountInstruction, 4 | createTransferInstruction, 5 | getAssociatedTokenAddress, 6 | transfer, 7 | } from '@solana/spl-token' 8 | import { 9 | Keypair, 10 | Connection, 11 | PublicKey, 12 | LAMPORTS_PER_SOL, 13 | SystemProgram, 14 | VersionedTransaction, 15 | TransactionInstruction, 16 | TransactionMessage, 17 | ComputeBudgetProgram, 18 | Transaction 19 | } from '@solana/web3.js' 20 | import { 21 | ADDITIONAL_FEE, 22 | BUY_AMOUNT, 23 | BUY_INTERVAL_MAX, 24 | BUY_INTERVAL_MIN, 25 | BUY_LOWER_AMOUNT, 26 | BUY_UPPER_AMOUNT, 27 | DISTRIBUTE_WALLET_NUM, 28 | DISTRIBUTION_AMOUNT, 29 | IS_RANDOM, 30 | PRIVATE_KEY, 31 | RPC_ENDPOINT, 32 | RPC_WEBSOCKET_ENDPOINT, 33 | TOKEN_MINT, 34 | WALLET_NUM, 35 | SELL_ALL_BY_TIMES, 36 | SELL_PERCENT 37 | } from './constants' 38 | import { Data, editJson, readJson, saveDataToFile, sleep } from './utils' 39 | import base58 from 'bs58' 40 | import { getBuyTx, getBuyTxWithJupiter, getSellTx, getSellTxWithJupiter } from './utils/swapOnlyAmm' 41 | import { execute } from './executor/legacy' 42 | import { bundle } from './executor/jito' 43 | import { getPoolKeys } from './utils/getPoolInfo' 44 | import { SWAP_ROUTING } from './constants' 45 | import { ApiPoolInfoV4 } from '@raydium-io/raydium-sdk' 46 | import { BN } from 'bn.js' 47 | 48 | export const solanaConnection = new Connection(RPC_ENDPOINT, { 49 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, 50 | }) 51 | 52 | export const mainKp = Keypair.fromSecretKey(base58.decode(PRIVATE_KEY)) 53 | const baseMint = new PublicKey(TOKEN_MINT) 54 | const distritbutionNum = DISTRIBUTE_WALLET_NUM > 10 ? 10 : DISTRIBUTE_WALLET_NUM 55 | let quoteVault: PublicKey | null = null 56 | let vaultAmount: number = 0 57 | let poolId: PublicKey 58 | let poolKeys: null | ApiPoolInfoV4 = null 59 | let sold: number = 0 60 | let bought: number = 0 61 | let totalSolPut: number = 0 62 | let changeAmount = 0 63 | let buyNum = 0 64 | let sellNum = 0 65 | 66 | const main = async () => { 67 | 68 | const solBalance = (await solanaConnection.getBalance(mainKp.publicKey)) / LAMPORTS_PER_SOL 69 | console.log(`Volume bot is running`) 70 | console.log(`Wallet address: ${mainKp.publicKey.toBase58()}`) 71 | console.log(`Pool token mint: ${baseMint.toBase58()}`) 72 | console.log(`Wallet SOL balance: ${solBalance.toFixed(3)}SOL`) 73 | console.log(`Buying interval max: ${BUY_INTERVAL_MAX}ms`) 74 | console.log(`Buying interval min: ${BUY_INTERVAL_MIN}ms`) 75 | console.log(`Buy upper limit amount: ${BUY_UPPER_AMOUNT}SOL`) 76 | console.log(`Buy lower limit amount: ${BUY_LOWER_AMOUNT}SOL`) 77 | console.log(`Distribute SOL to ${distritbutionNum} wallets`) 78 | 79 | if (SWAP_ROUTING) { 80 | console.log("Buy and sell with jupiter swap v6 routing") 81 | } else { 82 | poolKeys = await getPoolKeys(solanaConnection, baseMint) 83 | if (poolKeys == null) { 84 | return 85 | } 86 | // poolKeys = await PoolKeys.fetchPoolKeyInfo(solanaConnection, baseMint, NATIVE_MINT) 87 | poolId = new PublicKey(poolKeys.id) 88 | quoteVault = new PublicKey(poolKeys.quoteVault) 89 | console.log(`Successfully fetched pool info`) 90 | console.log(`Pool id: ${poolId.toBase58()}`) 91 | } 92 | 93 | let data: { 94 | kp: Keypair; 95 | buyAmount: number; 96 | }[] | null = null 97 | 98 | if (solBalance < (BUY_LOWER_AMOUNT + ADDITIONAL_FEE) * distritbutionNum) { 99 | console.log("Sol balance is not enough for distribution") 100 | } 101 | 102 | data = await distributeSolAndToken(mainKp, distritbutionNum, baseMint) 103 | if (data === null) { 104 | console.log("Distribution failed") 105 | return 106 | } 107 | 108 | data.map(async ({ kp }, i) => { 109 | await sleep((BUY_INTERVAL_MAX + BUY_INTERVAL_MIN) * i / 2) 110 | 111 | const ata = await getAssociatedTokenAddress(baseMint, kp.publicKey) 112 | const initBalance = (await solanaConnection.getTokenAccountBalance(ata)).value.uiAmount 113 | if(!initBalance || initBalance == 0){ 114 | console.log("Error, distribution didn't work") 115 | return null 116 | } 117 | 118 | let soldIndex = 1 119 | while (true) { 120 | // buy part 121 | const BUY_INTERVAL = Math.round(Math.random() * (BUY_INTERVAL_MAX - BUY_INTERVAL_MIN) + BUY_INTERVAL_MIN) 122 | 123 | const solBalance = await solanaConnection.getBalance(kp.publicKey) / LAMPORTS_PER_SOL 124 | 125 | let buyAmount: number 126 | if (IS_RANDOM) 127 | buyAmount = Number((Math.random() * (BUY_UPPER_AMOUNT - BUY_LOWER_AMOUNT) + BUY_LOWER_AMOUNT).toFixed(6)) 128 | else 129 | buyAmount = BUY_AMOUNT 130 | 131 | if (solBalance < ADDITIONAL_FEE) { 132 | console.log("Balance is not enough: ", solBalance, "SOL") 133 | return 134 | } 135 | 136 | // try buying until success 137 | let i = 0 138 | while (true) { 139 | if (i > 10) { 140 | console.log("Error in buy transaction") 141 | return 142 | } 143 | 144 | const result = await buy(kp, baseMint, buyAmount, poolId) 145 | if (result) { 146 | break 147 | } else { 148 | i++ 149 | console.log("Buy failed, try again") 150 | await sleep(2000) 151 | } 152 | } 153 | 154 | await sleep(1000) 155 | 156 | // try selling until success 157 | let j = 0 158 | while (true) { 159 | if (j > 10) { 160 | console.log("Error in sell transaction") 161 | return 162 | } 163 | const result = await sell(poolId, baseMint, kp, soldIndex, initBalance) 164 | if (result) { 165 | soldIndex++ 166 | break 167 | } else { 168 | j++ 169 | console.log("Sell failed, try again") 170 | await sleep(2000) 171 | } 172 | } 173 | await sleep(5000 + distritbutionNum * BUY_INTERVAL) 174 | } 175 | }) 176 | } 177 | 178 | interface WalletData { 179 | kp: Keypair, 180 | buyAmount: number 181 | } 182 | 183 | const distributeSolAndToken = async (mainKp: Keypair, distritbutionNum: number, baseMint: PublicKey) => { 184 | const data: Data[] = [] 185 | const wallets: WalletData[] = [] 186 | const mainAta = await getAssociatedTokenAddress(baseMint, mainKp.publicKey) 187 | let mainTokenBalance: string | null = null 188 | try { 189 | mainTokenBalance = (await solanaConnection.getTokenAccountBalance(mainAta)).value.amount 190 | } catch (error) { 191 | console.log("Error getting token balance of the main wallet\n Can't continue this mode without token in main wallet") 192 | return null 193 | } 194 | if(!mainTokenBalance || mainTokenBalance == "0" ){ 195 | console.log("Error getting token balance of the main wallet\n Can't continue this mode without token in main wallet") 196 | return null 197 | } 198 | console.log("Main wallet's tokenbalance is ", mainTokenBalance) 199 | try { 200 | let tokenAmountPerWallet = 201 | new BN(mainTokenBalance).div(new BN(WALLET_NUM).mul(new BN(Math.floor(SELL_PERCENT))).div(new BN(100))).toString() 202 | const distributionIx: TransactionInstruction[] = [] 203 | distributionIx.push( 204 | ComputeBudgetProgram.setComputeUnitLimit({units: 800_000}), 205 | ComputeBudgetProgram.setComputeUnitPrice({microLamports: 250_000}) 206 | ) 207 | for (let i = 0; i < distritbutionNum; i++) { 208 | let solAmount = DISTRIBUTION_AMOUNT 209 | if (DISTRIBUTION_AMOUNT < ADDITIONAL_FEE + BUY_UPPER_AMOUNT) 210 | solAmount = ADDITIONAL_FEE + BUY_UPPER_AMOUNT 211 | 212 | const wallet = Keypair.generate() 213 | wallets.push({ kp: wallet, buyAmount: solAmount }) 214 | const destAta = await getAssociatedTokenAddress(baseMint, wallet.publicKey) 215 | 216 | distributionIx.push( 217 | SystemProgram.transfer({ 218 | fromPubkey: mainKp.publicKey, 219 | toPubkey: wallet.publicKey, 220 | lamports: solAmount * LAMPORTS_PER_SOL 221 | }), 222 | createAssociatedTokenAccountInstruction(mainKp.publicKey, destAta, wallet.publicKey, baseMint), 223 | createTransferInstruction(mainAta, destAta, mainKp.publicKey, BigInt(tokenAmountPerWallet)) 224 | ) 225 | } 226 | let index = 0 227 | while (true) { 228 | try { 229 | if (index > 3) { 230 | console.log("Error in distribution") 231 | return null 232 | } 233 | 234 | console.log(tokenAmountPerWallet) 235 | console.log("object") 236 | const transaction1 = new Transaction().add(...distributionIx) 237 | transaction1.feePayer = mainKp.publicKey 238 | transaction1.recentBlockhash = (await solanaConnection.getLatestBlockhash()).blockhash 239 | console.log(await solanaConnection.simulateTransaction(transaction1)) 240 | 241 | const siTx = new Transaction().add(...distributionIx) 242 | const latestBlockhash = await solanaConnection.getLatestBlockhash() 243 | siTx.feePayer = mainKp.publicKey 244 | siTx.recentBlockhash = latestBlockhash.blockhash 245 | const messageV0 = new TransactionMessage({ 246 | payerKey: mainKp.publicKey, 247 | recentBlockhash: latestBlockhash.blockhash, 248 | instructions: distributionIx, 249 | }).compileToV0Message() 250 | const transaction = new VersionedTransaction(messageV0) 251 | transaction.sign([mainKp]) 252 | const txSig = await execute(transaction, latestBlockhash) 253 | const tokenBuyTx = txSig ? `https://solscan.io/tx/${txSig}` : '' 254 | console.log("SOL and token distributed ", tokenBuyTx) 255 | break 256 | } catch (error) { 257 | index++ 258 | console.log(error) 259 | } 260 | } 261 | 262 | wallets.map((wallet) => { 263 | data.push({ 264 | privateKey: base58.encode(wallet.kp.secretKey), 265 | pubkey: wallet.kp.publicKey.toBase58(), 266 | solBalance: wallet.buyAmount + ADDITIONAL_FEE, 267 | tokenBuyTx: null, 268 | tokenSellTx: null 269 | }) 270 | }) 271 | try { 272 | saveDataToFile(data) 273 | } catch (error) { 274 | 275 | } 276 | console.log("Success in transferring sol") 277 | return wallets 278 | } catch (error) { 279 | console.log(`Failed to transfer SOL`) 280 | return null 281 | } 282 | } 283 | 284 | 285 | const buy = async (newWallet: Keypair, baseMint: PublicKey, buyAmount: number, poolId: PublicKey) => { 286 | let solBalance: number = 0 287 | try { 288 | solBalance = await solanaConnection.getBalance(newWallet.publicKey) 289 | } catch (error) { 290 | console.log("Error getting balance of wallet") 291 | return null 292 | } 293 | if (solBalance == 0) { 294 | return null 295 | } 296 | try { 297 | let tx; 298 | if (SWAP_ROUTING) 299 | tx = await getBuyTxWithJupiter(newWallet, baseMint, buyAmount) 300 | else 301 | tx = await getBuyTx(solanaConnection, newWallet, baseMint, NATIVE_MINT, buyAmount, poolId.toBase58()) 302 | if (tx == null) { 303 | console.log(`Error getting buy transaction`) 304 | return null 305 | } 306 | const latestBlockhash = await solanaConnection.getLatestBlockhash() 307 | const txSig = await execute(tx, latestBlockhash) 308 | const tokenBuyTx = txSig ? `https://solscan.io/tx/${txSig}` : '' 309 | editJson({ 310 | tokenBuyTx, 311 | pubkey: newWallet.publicKey.toBase58(), 312 | solBalance: solBalance / 10 ** 9 - buyAmount, 313 | }) 314 | return tokenBuyTx 315 | } catch (error) { 316 | return null 317 | } 318 | } 319 | 320 | const sell = async (poolId: PublicKey, baseMint: PublicKey, wallet: Keypair, index: number, initBalance: number) => { 321 | const amount = initBalance * (SELL_ALL_BY_TIMES - index) / SELL_ALL_BY_TIMES 322 | 323 | try { 324 | const data: Data[] = readJson() 325 | if (data.length == 0) { 326 | await sleep(1000) 327 | return null 328 | } 329 | 330 | const tokenAta = await getAssociatedTokenAddress(baseMint, wallet.publicKey) 331 | const tokenBalInfo = await solanaConnection.getTokenAccountBalance(tokenAta) 332 | if (!tokenBalInfo) { 333 | console.log("Balance incorrect") 334 | return null 335 | } 336 | const tokenBalance = tokenBalInfo.value.uiAmount 337 | if(!tokenBalance) return null 338 | const tokenToSell = new BN(tokenBalance - amount).mul(new BN(10 ** tokenBalInfo.value.decimals)).toString() 339 | try { 340 | let sellTx; 341 | if (SWAP_ROUTING) 342 | sellTx = await getSellTxWithJupiter(wallet, baseMint, tokenToSell) 343 | else 344 | sellTx = await getSellTx(solanaConnection, wallet, baseMint, NATIVE_MINT, tokenToSell, poolId.toBase58()) 345 | 346 | if (sellTx == null) { 347 | console.log(`Error getting buy transaction`) 348 | return null 349 | } 350 | 351 | const latestBlockhashForSell = await solanaConnection.getLatestBlockhash() 352 | const txSellSig = await execute(sellTx, latestBlockhashForSell, false) 353 | const tokenSellTx = txSellSig ? `https://solscan.io/tx/${txSellSig}` : '' 354 | const solBalance = await solanaConnection.getBalance(wallet.publicKey) 355 | editJson({ 356 | pubkey: wallet.publicKey.toBase58(), 357 | tokenSellTx, 358 | solBalance 359 | }) 360 | return tokenSellTx 361 | } catch (error) { 362 | return null 363 | } 364 | } catch (error) { 365 | return null 366 | } 367 | } 368 | 369 | 370 | main() 371 | 372 | -------------------------------------------------------------------------------- /status.ts: -------------------------------------------------------------------------------- 1 | import { 2 | LiquidityPoolKeysV4, 3 | } from '@raydium-io/raydium-sdk' 4 | import { 5 | NATIVE_MINT, 6 | } from '@solana/spl-token' 7 | import { 8 | Keypair, 9 | Connection, 10 | PublicKey, 11 | LAMPORTS_PER_SOL, 12 | } from '@solana/web3.js' 13 | import { 14 | BUY_LOWER_AMOUNT, 15 | BUY_UPPER_AMOUNT, 16 | CHECK_BAL_INTERVAL, 17 | DISTRIBUTE_WALLET_NUM, 18 | LOG_LEVEL, 19 | PRIVATE_KEY, 20 | RPC_ENDPOINT, 21 | RPC_WEBSOCKET_ENDPOINT, 22 | TOKEN_MINT, 23 | } from './constants' 24 | import { deleteConsoleLines, logger, PoolKeys, readJson, sleep } from './utils' 25 | import base58 from 'bs58' 26 | 27 | export const solanaConnection = new Connection(RPC_ENDPOINT, { 28 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, 29 | }) 30 | 31 | export const mainKp = Keypair.fromSecretKey(base58.decode(PRIVATE_KEY)) 32 | const baseMint = new PublicKey(TOKEN_MINT) 33 | const distritbutionNum = DISTRIBUTE_WALLET_NUM > 20 ? 20 : DISTRIBUTE_WALLET_NUM 34 | let quoteVault: PublicKey | null = null 35 | let poolKeys: LiquidityPoolKeysV4 36 | let sold: number = 0 37 | let bought: number = 0 38 | let totalSolPut: number = 0 39 | let changeAmount = 0 40 | let buyNum = 0 41 | let sellNum = 0 42 | logger.level = LOG_LEVEL 43 | 44 | interface Data { 45 | privateKey: string; 46 | pubkey: string; 47 | solBalance: number | null; 48 | tokenBuyTx: string | null, 49 | tokenSellTx: string | null, 50 | } 51 | 52 | const data: Data[] = readJson() 53 | const walletPks = data.map(data => data.pubkey) 54 | console.log("🚀 ~ walletPks:", walletPks) 55 | 56 | 57 | const main = async () => { 58 | 59 | const solBalance = (await solanaConnection.getBalance(mainKp.publicKey)) / LAMPORTS_PER_SOL 60 | console.log(`Wallet address: ${mainKp.publicKey.toBase58()}`) 61 | console.log(`Pool token mint: ${baseMint.toBase58()}`) 62 | console.log(`Wallet SOL balance: ${solBalance.toFixed(3)}SOL`) 63 | console.log("Check interval: ", CHECK_BAL_INTERVAL, "ms") 64 | 65 | let poolId: PublicKey 66 | poolKeys = await PoolKeys.fetchPoolKeyInfo(solanaConnection, baseMint, NATIVE_MINT) 67 | poolId = poolKeys.id 68 | quoteVault = poolKeys.quoteVault 69 | console.log(`Successfully fetched pool info`) 70 | console.log(`Pool id: ${poolId.toBase58()}`) 71 | 72 | trackWalletOnLog(solanaConnection, quoteVault) 73 | } 74 | 75 | const getPoolStatus = async (poolId: PublicKey) => { 76 | while (true) { 77 | try { 78 | const res = await fetch(`https://api.dexscreener.com/latest/dex/pairs/solana/${poolId?.toBase58()}`, { 79 | method: 'GET', 80 | headers: { 81 | Accept: 'application/json', 82 | 'Content-Type': 'application/json' 83 | } 84 | }) 85 | const data = await res.json() 86 | 87 | const { url, priceNative, priceUsd, txns, volume, priceChange } = data.pair 88 | 89 | // console.log(`\t url: ${url}`) 90 | // console.log(`\t price: ${priceNative} SOL / ${priceUsd} usd`) 91 | // console.log(`\t Volume status => m5: $${volume.m5}\t|\th1: $${volume.h1}\t|\th6: $${volume.h6}\t|\t h24: $${volume.h24}`) 92 | // console.log(`\t Recent buy status (buy / sell) => m5: ${txns.m5.buys} / ${txns.m5.sells}\t\t|\th1: ${txns.h1.buys} / ${txns.h1.sells}\t|\th6: ${txns.h6.buys} / ${txns.h6.sells}\t|\t h24: ${txns.h24.buys} / ${txns.h24.sells}`) 93 | // console.log(`\t volume price change => m5: ${priceChange.m5}%\t\t|\th1: ${priceChange.h1}%\t|\th6: ${priceChange.h6}%\t|\t h24: ${priceChange.h24}%`) 94 | 95 | await sleep(5000) 96 | } catch (error) { 97 | console.log("Error fetching ") 98 | await sleep(2000) 99 | } 100 | } 101 | } 102 | 103 | async function trackWalletOnLog(connection: Connection, quoteVault: PublicKey): Promise { 104 | 105 | const initialWsolBal = (await connection.getTokenAccountBalance(quoteVault)).value.uiAmount 106 | if (!initialWsolBal) { 107 | console.log("Quote vault mismatch") 108 | return 109 | } 110 | 111 | const checkBal = setInterval(async () => { 112 | const bal = (await connection.getTokenAccountBalance(quoteVault)).value.uiAmount 113 | if (!bal) { 114 | console.log("Quote vault mismatch") 115 | return 116 | } 117 | changeAmount = bal - initialWsolBal 118 | deleteConsoleLines(1) 119 | console.log(`Other users bought ${buyNum - bought} times and sold ${sellNum - sold} times, total SOL change is ${changeAmount - totalSolPut}SOL`) 120 | }, CHECK_BAL_INTERVAL) 121 | try { 122 | connection.onLogs( 123 | quoteVault, 124 | async ({ logs, err, signature }) => { 125 | if (err) { } 126 | else { 127 | 128 | const parsedData = await connection.getParsedTransaction(signature, { maxSupportedTransactionVersion: 0, commitment: "confirmed" }) 129 | const signer = parsedData?.transaction.message.accountKeys.filter((elem: any) => { 130 | return elem.signer == true 131 | })[0].pubkey.toBase58() 132 | 133 | // console.log(`\nTransaction success: https://solscan.io/tx/${signature}\n`) 134 | if(!walletPks.includes(signer!)){ 135 | if (Number(parsedData?.meta?.preBalances[0]) > Number(parsedData?.meta?.postBalances[0])) { 136 | buyNum++ 137 | } else { 138 | sellNum++ 139 | } 140 | } 141 | 142 | 143 | } 144 | }, 145 | "confirmed" 146 | ); 147 | } catch (error) { } 148 | } 149 | 150 | 151 | main() -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 83 | 84 | /* Type Checking */ 85 | "strict": true, /* Enable all strict type-checking options. */ 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './mint'; -------------------------------------------------------------------------------- /types/mint.ts: -------------------------------------------------------------------------------- 1 | import { struct, u32, u8 } from '@solana/buffer-layout'; 2 | import { bool, publicKey, u64 } from '@solana/buffer-layout-utils'; 3 | import { Commitment, Connection, PublicKey } from '@solana/web3.js'; 4 | 5 | /** Information about a mint */ 6 | export interface Mint { 7 | /** Address of the mint */ 8 | address: PublicKey; 9 | /** 10 | * Optional authority used to mint new tokens. The mint authority may only be provided during mint creation. 11 | * If no mint authority is present then the mint has a fixed supply and no further tokens may be minted. 12 | */ 13 | mintAuthority: PublicKey | null; 14 | /** Total supply of tokens */ 15 | supply: bigint; 16 | /** Number of base 10 digits to the right of the decimal place */ 17 | decimals: number; 18 | /** Is this mint initialized */ 19 | isInitialized: boolean; 20 | /** Optional authority to freeze token accounts */ 21 | freezeAuthority: PublicKey | null; 22 | } 23 | 24 | /** Mint as stored by the program */ 25 | export interface RawMint { 26 | mintAuthorityOption: 1 | 0; 27 | mintAuthority: PublicKey; 28 | supply: bigint; 29 | decimals: number; 30 | isInitialized: boolean; 31 | freezeAuthorityOption: 1 | 0; 32 | freezeAuthority: PublicKey; 33 | } 34 | 35 | /** Buffer layout for de/serializing a mint */ 36 | export const MintLayout = struct([ 37 | u32('mintAuthorityOption'), 38 | publicKey('mintAuthority'), 39 | u64('supply'), 40 | u8('decimals'), 41 | bool('isInitialized'), 42 | u32('freezeAuthorityOption'), 43 | publicKey('freezeAuthority'), 44 | ]); -------------------------------------------------------------------------------- /utils/getPoolInfo.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import { 4 | Liquidity, 5 | LIQUIDITY_STATE_LAYOUT_V4, 6 | MARKET_STATE_LAYOUT_V3, 7 | SPL_MINT_LAYOUT, 8 | ApiPoolInfoV4, 9 | Market, 10 | } from '@raydium-io/raydium-sdk' 11 | import { NATIVE_MINT } from '@solana/spl-token' 12 | import { 13 | Connection, 14 | PublicKey, 15 | } from '@solana/web3.js' 16 | 17 | async function _formatAmmKeysById(id: string, connection: Connection): Promise { 18 | const account = await connection.getAccountInfo(new PublicKey(id)) 19 | if (account === null) throw Error(' get id info error ') 20 | const info = LIQUIDITY_STATE_LAYOUT_V4.decode(account.data) 21 | 22 | const marketId = info.marketId 23 | const marketAccount = await connection.getAccountInfo(marketId) 24 | if (marketAccount === null) throw Error(' get market info error') 25 | const marketInfo = MARKET_STATE_LAYOUT_V3.decode(marketAccount.data) 26 | 27 | const lpMint = info.lpMint 28 | const lpMintAccount = await connection.getAccountInfo(lpMint) 29 | if (lpMintAccount === null) throw Error(' get lp mint info error') 30 | const lpMintInfo = SPL_MINT_LAYOUT.decode(lpMintAccount.data) 31 | 32 | return { 33 | id, 34 | baseMint: info.baseMint.toString(), 35 | quoteMint: info.quoteMint.toString(), 36 | lpMint: info.lpMint.toString(), 37 | baseDecimals: info.baseDecimal.toNumber(), 38 | quoteDecimals: info.quoteDecimal.toNumber(), 39 | lpDecimals: lpMintInfo.decimals, 40 | version: 4, 41 | programId: account.owner.toString(), 42 | authority: Liquidity.getAssociatedAuthority({ programId: account.owner }).publicKey.toString(), 43 | openOrders: info.openOrders.toString(), 44 | targetOrders: info.targetOrders.toString(), 45 | baseVault: info.baseVault.toString(), 46 | quoteVault: info.quoteVault.toString(), 47 | withdrawQueue: info.withdrawQueue.toString(), 48 | lpVault: info.lpVault.toString(), 49 | marketVersion: 3, 50 | marketProgramId: info.marketProgramId.toString(), 51 | marketId: info.marketId.toString(), 52 | marketAuthority: Market.getAssociatedAuthority({ programId: info.marketProgramId, marketId: info.marketId }).publicKey.toString(), 53 | marketBaseVault: marketInfo.baseVault.toString(), 54 | marketQuoteVault: marketInfo.quoteVault.toString(), 55 | marketBids: marketInfo.bids.toString(), 56 | marketAsks: marketInfo.asks.toString(), 57 | marketEventQueue: marketInfo.eventQueue.toString(), 58 | lookupTableAccount: PublicKey.default.toString() 59 | } 60 | } 61 | 62 | export const getPoolKeys = async (connection: Connection, baseMint: PublicKey) => { 63 | try { 64 | const res = await fetch(`https://api.dexscreener.com/latest/dex/tokens/${baseMint.toBase58()}`, { 65 | method: 'GET', 66 | headers: { 67 | Accept: 'application/json', 68 | 'Content-Type': 'application/json' 69 | } 70 | }) 71 | const data = await res.clone().json() 72 | if (data.pairs.length == 0) { 73 | return null 74 | } else { 75 | const raydiumPairId = data.pairs.filter((pair: any) => pair.dexId === "raydium" && pair.quoteToken.address == NATIVE_MINT.toBase58())[0].pairAddress 76 | const poolState = await _formatAmmKeysById(raydiumPairId, connection) 77 | return poolState 78 | } 79 | } catch (e) { 80 | console.log("error in fetching price of pool", e) 81 | return null 82 | } 83 | } 84 | 85 | -------------------------------------------------------------------------------- /utils/getPoolKeys.ts: -------------------------------------------------------------------------------- 1 | import { Liquidity, LiquidityPoolKeysV4, MARKET_STATE_LAYOUT_V3, Market } from "@raydium-io/raydium-sdk"; 2 | import { Commitment, Connection, PublicKey } from "@solana/web3.js"; 3 | 4 | import dotenv from 'dotenv' 5 | dotenv.config(); 6 | 7 | export class PoolKeys { 8 | static SOLANA_ADDRESS = 'So11111111111111111111111111111111111111112' 9 | static RAYDIUM_POOL_V4_PROGRAM_ID = '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8'; 10 | static OPENBOOK_ADDRESS = 'srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX'; 11 | static SOL_DECIMALS = 9 12 | 13 | static async fetchMarketId(connection: Connection, baseMint: PublicKey, quoteMint: PublicKey, commitment: Commitment) { 14 | let accounts = await connection.getProgramAccounts( 15 | new PublicKey('srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX'), 16 | { 17 | commitment, 18 | filters: [ 19 | { dataSize: MARKET_STATE_LAYOUT_V3.span }, 20 | { 21 | memcmp: { 22 | offset: MARKET_STATE_LAYOUT_V3.offsetOf("baseMint"), 23 | bytes: baseMint.toBase58(), 24 | }, 25 | }, 26 | { 27 | memcmp: { 28 | offset: MARKET_STATE_LAYOUT_V3.offsetOf("quoteMint"), 29 | bytes: quoteMint.toBase58(), 30 | }, 31 | }, 32 | ], 33 | } 34 | ); 35 | if(!accounts) 36 | accounts = await connection.getProgramAccounts( 37 | new PublicKey('srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX'), 38 | { 39 | commitment, 40 | filters: [ 41 | { dataSize: MARKET_STATE_LAYOUT_V3.span }, 42 | { 43 | memcmp: { 44 | offset: MARKET_STATE_LAYOUT_V3.offsetOf("quoteMint"), 45 | bytes: baseMint.toBase58(), 46 | }, 47 | }, 48 | { 49 | memcmp: { 50 | offset: MARKET_STATE_LAYOUT_V3.offsetOf("baseMint"), 51 | bytes: quoteMint.toBase58(), 52 | }, 53 | }, 54 | ], 55 | } 56 | ); 57 | console.log(accounts) 58 | return accounts.map(({ account }) => MARKET_STATE_LAYOUT_V3.decode(account.data))[0].ownAddress 59 | } 60 | 61 | static async fetchMarketInfo(connection: Connection, marketId: PublicKey) { 62 | const marketAccountInfo = await connection.getAccountInfo(marketId, "processed"); 63 | if (!marketAccountInfo) { 64 | throw new Error('Failed to fetch market info for market id ' + marketId.toBase58()); 65 | } 66 | 67 | return MARKET_STATE_LAYOUT_V3.decode(marketAccountInfo.data); 68 | } 69 | 70 | static async generateV4PoolInfo(baseMint: PublicKey, quoteMint: PublicKey, marketID: PublicKey) { 71 | const poolInfo = Liquidity.getAssociatedPoolKeys({ 72 | version: 4, 73 | marketVersion: 3, 74 | baseMint: baseMint, 75 | quoteMint: quoteMint, 76 | baseDecimals: 0, 77 | quoteDecimals: this.SOL_DECIMALS, 78 | programId: new PublicKey('675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8'), 79 | marketId: marketID, 80 | marketProgramId: new PublicKey('srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX'), 81 | }); 82 | 83 | return { poolInfo } 84 | } 85 | 86 | static async fetchPoolKeyInfo(connection: Connection, baseMint: PublicKey, quoteMint: PublicKey) { 87 | const marketId = await this.fetchMarketId(connection, baseMint, quoteMint, 'confirmed') 88 | 89 | // const marketInfo = await this.fetchMarketInfo(connection, marketId); 90 | // const baseMintInfo = await connection.getParsedAccountInfo(baseMint, "confirmed") as MintInfo; 91 | // const baseDecimals = baseMintInfo.value.data.parsed.info.decimals 92 | 93 | const V4PoolInfo = await this.generateV4PoolInfo(baseMint, quoteMint, marketId) 94 | const lpMintInfo = await connection.getParsedAccountInfo(V4PoolInfo.poolInfo.lpMint, "confirmed") as MintInfo; 95 | 96 | return { 97 | id: V4PoolInfo.poolInfo.id, 98 | marketId: marketId, 99 | baseMint: baseMint, 100 | quoteMint: quoteMint, 101 | baseVault: V4PoolInfo.poolInfo.baseVault, 102 | quoteVault: V4PoolInfo.poolInfo.quoteVault, 103 | lpMint: V4PoolInfo.poolInfo.lpMint, 104 | // baseDecimals: baseDecimals, 105 | quoteDecimals: this.SOL_DECIMALS, 106 | lpDecimals: lpMintInfo.value.data.parsed.info.decimals, 107 | version: 4, 108 | programId: new PublicKey(this.RAYDIUM_POOL_V4_PROGRAM_ID), 109 | authority: V4PoolInfo.poolInfo.authority, 110 | openOrders: V4PoolInfo.poolInfo.openOrders, 111 | targetOrders: V4PoolInfo.poolInfo.targetOrders, 112 | withdrawQueue: new PublicKey("11111111111111111111111111111111"), 113 | lpVault: new PublicKey("11111111111111111111111111111111"), 114 | marketVersion: 3, 115 | marketProgramId: new PublicKey(this.OPENBOOK_ADDRESS), 116 | marketAuthority: Market.getAssociatedAuthority({ programId: new PublicKey(this.OPENBOOK_ADDRESS), marketId: marketId }).publicKey, 117 | // marketBaseVault: marketInfo.baseVault, 118 | // marketQuoteVault: marketInfo.quoteVault, 119 | // marketBids: marketInfo.bids, 120 | // marketAsks: marketInfo.asks, 121 | // marketEventQueue: marketInfo.eventQueue, 122 | lookupTableAccount: PublicKey.default 123 | } 124 | } 125 | } 126 | 127 | interface MintInfo { 128 | value: { 129 | data: { 130 | parsed: { 131 | info: { 132 | decimals: number 133 | } 134 | } 135 | } 136 | } 137 | } -------------------------------------------------------------------------------- /utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './utils'; 2 | export * from './logger'; 3 | export * from './getPoolKeys' -------------------------------------------------------------------------------- /utils/logger.ts: -------------------------------------------------------------------------------- 1 | import pino from "pino"; 2 | 3 | const transport = pino.transport({ 4 | target: 'pino-pretty', 5 | }); 6 | 7 | export const logger = pino( 8 | { 9 | level: 'info', 10 | redact: ['poolKeys'], 11 | serializers: { 12 | error: pino.stdSerializers.err, 13 | }, 14 | base: undefined, 15 | }, 16 | transport, 17 | ); 18 | -------------------------------------------------------------------------------- /utils/swapOnlyAmm.ts: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | import { 4 | jsonInfo2PoolKeys, 5 | Liquidity, 6 | LiquidityPoolKeys, 7 | Percent, 8 | Token, 9 | TokenAmount, 10 | ApiPoolInfoV4, 11 | LIQUIDITY_STATE_LAYOUT_V4, 12 | MARKET_STATE_LAYOUT_V3, 13 | Market, 14 | SPL_MINT_LAYOUT, 15 | SPL_ACCOUNT_LAYOUT, 16 | TokenAccount, 17 | TxVersion, 18 | buildSimpleTransaction, 19 | LOOKUP_TABLE_CACHE, 20 | } from '@raydium-io/raydium-sdk'; 21 | 22 | import { 23 | PublicKey, 24 | Keypair, 25 | Connection, 26 | VersionedTransaction 27 | } from '@solana/web3.js'; 28 | 29 | import { TOKEN_PROGRAM_ID, getAssociatedTokenAddress, getMint } from '@solana/spl-token'; 30 | import { logger } from '.'; 31 | import { TOKEN_MINT, TX_FEE } from '../constants'; 32 | import base58 from 'bs58'; 33 | import { BN } from 'bn.js'; 34 | 35 | type WalletTokenAccounts = Awaited> 36 | type TestTxInputInfo = { 37 | outputToken: Token 38 | targetPool: string 39 | inputTokenAmount: TokenAmount 40 | slippage: Percent 41 | walletTokenAccounts: WalletTokenAccounts 42 | wallet: Keypair 43 | } 44 | 45 | async function getWalletTokenAccount(connection: Connection, wallet: PublicKey): Promise { 46 | const walletTokenAccount = await connection.getTokenAccountsByOwner(wallet, { 47 | programId: TOKEN_PROGRAM_ID, 48 | }); 49 | return walletTokenAccount.value.map((i) => ({ 50 | pubkey: i.pubkey, 51 | programId: i.account.owner, 52 | accountInfo: SPL_ACCOUNT_LAYOUT.decode(i.account.data), 53 | })); 54 | } 55 | 56 | 57 | async function swapOnlyAmm(connection: Connection, input: TestTxInputInfo) { 58 | // -------- pre-action: get pool info -------- 59 | const targetPoolInfo = await formatAmmKeysById(connection, input.targetPool) 60 | assert(targetPoolInfo, 'cannot find the target pool') 61 | const poolKeys = jsonInfo2PoolKeys(targetPoolInfo) as LiquidityPoolKeys 62 | 63 | // -------- step 1: coumpute amount out -------- 64 | const { amountOut, minAmountOut } = Liquidity.computeAmountOut({ 65 | poolKeys: poolKeys, 66 | poolInfo: await Liquidity.fetchInfo({ connection, poolKeys }), 67 | amountIn: input.inputTokenAmount, 68 | currencyOut: input.outputToken, 69 | slippage: input.slippage, 70 | }) 71 | 72 | // -------- step 2: create instructions by SDK function -------- 73 | const { innerTransactions } = await Liquidity.makeSwapInstructionSimple({ 74 | connection, 75 | poolKeys, 76 | userKeys: { 77 | tokenAccounts: input.walletTokenAccounts, 78 | owner: input.wallet.publicKey, 79 | }, 80 | amountIn: input.inputTokenAmount, 81 | amountOut: minAmountOut, 82 | fixedSide: 'in', 83 | makeTxVersion: TxVersion.V0, 84 | computeBudgetConfig: { 85 | microLamports: 12_000 * TX_FEE, 86 | units: 100_000 87 | } 88 | }) 89 | return innerTransactions 90 | } 91 | 92 | export async function formatAmmKeysById(connection: Connection, id: string): Promise { 93 | const account = await connection.getAccountInfo(new PublicKey(id)) 94 | if (account === null) throw Error(' get id info error ') 95 | const info = LIQUIDITY_STATE_LAYOUT_V4.decode(account.data) 96 | 97 | const marketId = info.marketId 98 | const marketAccount = await connection.getAccountInfo(marketId) 99 | if (marketAccount === null) throw Error(' get market info error') 100 | const marketInfo = MARKET_STATE_LAYOUT_V3.decode(marketAccount.data) 101 | 102 | const lpMint = info.lpMint 103 | const lpMintAccount = await connection.getAccountInfo(lpMint) 104 | if (lpMintAccount === null) throw Error(' get lp mint info error') 105 | const lpMintInfo = SPL_MINT_LAYOUT.decode(lpMintAccount.data) 106 | 107 | return { 108 | id, 109 | baseMint: info.baseMint.toString(), 110 | quoteMint: info.quoteMint.toString(), 111 | lpMint: info.lpMint.toString(), 112 | baseDecimals: info.baseDecimal.toNumber(), 113 | quoteDecimals: info.quoteDecimal.toNumber(), 114 | lpDecimals: lpMintInfo.decimals, 115 | version: 4, 116 | programId: account.owner.toString(), 117 | authority: Liquidity.getAssociatedAuthority({ programId: account.owner }).publicKey.toString(), 118 | openOrders: info.openOrders.toString(), 119 | targetOrders: info.targetOrders.toString(), 120 | baseVault: info.baseVault.toString(), 121 | quoteVault: info.quoteVault.toString(), 122 | withdrawQueue: info.withdrawQueue.toString(), 123 | lpVault: info.lpVault.toString(), 124 | marketVersion: 3, 125 | marketProgramId: info.marketProgramId.toString(), 126 | marketId: info.marketId.toString(), 127 | marketAuthority: Market.getAssociatedAuthority({ programId: info.marketProgramId, marketId: info.marketId }).publicKey.toString(), 128 | marketBaseVault: marketInfo.baseVault.toString(), 129 | marketQuoteVault: marketInfo.quoteVault.toString(), 130 | marketBids: marketInfo.bids.toString(), 131 | marketAsks: marketInfo.asks.toString(), 132 | marketEventQueue: marketInfo.eventQueue.toString(), 133 | lookupTableAccount: PublicKey.default.toString() 134 | } 135 | } 136 | 137 | export async function getBuyTx(solanaConnection: Connection, wallet: Keypair, baseMint: PublicKey, quoteMint: PublicKey, amount: number, targetPool: string) { 138 | 139 | const baseInfo = await getMint(solanaConnection, baseMint) 140 | if (baseInfo == null) { 141 | return null 142 | } 143 | 144 | const baseDecimal = baseInfo.decimals 145 | 146 | const baseToken = new Token(TOKEN_PROGRAM_ID, baseMint, baseDecimal) 147 | const quoteToken = new Token(TOKEN_PROGRAM_ID, quoteMint, 9) 148 | 149 | const quoteTokenAmount = new TokenAmount(quoteToken, Math.floor(amount * 10 ** 9)) 150 | const slippage = new Percent(100, 100) 151 | const walletTokenAccounts = await getWalletTokenAccount(solanaConnection, wallet.publicKey) 152 | 153 | const instructions = await swapOnlyAmm(solanaConnection, { 154 | outputToken: baseToken, 155 | targetPool, 156 | inputTokenAmount: quoteTokenAmount, 157 | slippage, 158 | walletTokenAccounts, 159 | wallet: wallet, 160 | }) 161 | 162 | const willSendTx = (await buildSimpleTransaction({ 163 | connection: solanaConnection, 164 | makeTxVersion: TxVersion.V0, 165 | payer: wallet.publicKey, 166 | innerTransactions: instructions, 167 | addLookupTableInfo: LOOKUP_TABLE_CACHE 168 | }))[0] 169 | if (willSendTx instanceof VersionedTransaction) { 170 | willSendTx.sign([wallet]) 171 | return willSendTx 172 | } 173 | return null 174 | } 175 | 176 | export async function getSellTx(solanaConnection: Connection, wallet: Keypair, baseMint: PublicKey, quoteMint: PublicKey, amount: string, targetPool: string) { 177 | try { 178 | const tokenAta = await getAssociatedTokenAddress(baseMint, wallet.publicKey) 179 | const tokenBal = await solanaConnection.getTokenAccountBalance(tokenAta) 180 | if (!tokenBal || tokenBal.value.uiAmount == 0) 181 | return null 182 | const balance = tokenBal.value.amount 183 | tokenBal.value.decimals 184 | const baseToken = new Token(TOKEN_PROGRAM_ID, baseMint, tokenBal.value.decimals) 185 | const quoteToken = new Token(TOKEN_PROGRAM_ID, quoteMint, 9) 186 | const baseTokenAmount = new TokenAmount(baseToken, amount) 187 | const slippage = new Percent(99, 100) 188 | const walletTokenAccounts = await getWalletTokenAccount(solanaConnection, wallet.publicKey) 189 | 190 | const instructions = await swapOnlyAmm(solanaConnection, { 191 | outputToken: quoteToken, 192 | targetPool, 193 | inputTokenAmount: baseTokenAmount, 194 | slippage, 195 | walletTokenAccounts, 196 | wallet: wallet, 197 | }) 198 | 199 | const willSendTx = (await buildSimpleTransaction({ 200 | connection: solanaConnection, 201 | makeTxVersion: TxVersion.V0, 202 | payer: wallet.publicKey, 203 | innerTransactions: instructions, 204 | addLookupTableInfo: LOOKUP_TABLE_CACHE 205 | }))[0] 206 | if (willSendTx instanceof VersionedTransaction) { 207 | willSendTx.sign([wallet]) 208 | return willSendTx 209 | } 210 | return null 211 | } catch (error) { 212 | console.log("Error in selling token") 213 | return null 214 | } 215 | } 216 | 217 | 218 | export const getBuyTxWithJupiter = async (wallet: Keypair, baseMint: PublicKey, amount: number) => { 219 | try { 220 | const lamports = Math.floor(amount * 10 ** 9) 221 | const quoteResponse = await ( 222 | await fetch( 223 | `https://quote-api.jup.ag/v6/quote?inputMint=So11111111111111111111111111111111111111112&outputMint=${baseMint.toBase58()}&amount=${lamports}&slippageBps=100` 224 | ) 225 | ).json(); 226 | 227 | // get serialized transactions for the swap 228 | const { swapTransaction } = await ( 229 | await fetch("https://quote-api.jup.ag/v6/swap", { 230 | method: "POST", 231 | headers: { 232 | "Content-Type": "application/json", 233 | }, 234 | body: JSON.stringify({ 235 | quoteResponse, 236 | userPublicKey: wallet.publicKey.toString(), 237 | wrapAndUnwrapSol: true, 238 | dynamicComputeUnitLimit: true, 239 | prioritizationFeeLamports: 52000 240 | }), 241 | }) 242 | ).json(); 243 | 244 | // deserialize the transaction 245 | const swapTransactionBuf = Buffer.from(swapTransaction, "base64"); 246 | var transaction = VersionedTransaction.deserialize(swapTransactionBuf); 247 | 248 | // sign the transaction 249 | transaction.sign([wallet]); 250 | return transaction 251 | } catch (error) { 252 | console.log("Failed to get buy transaction") 253 | return null 254 | } 255 | }; 256 | 257 | 258 | export const getSellTxWithJupiter = async (wallet: Keypair, baseMint: PublicKey, amount: string) => { 259 | try { 260 | const quoteResponse = await ( 261 | await fetch( 262 | `https://quote-api.jup.ag/v6/quote?inputMint=${baseMint.toBase58()}&outputMint=So11111111111111111111111111111111111111112&amount=${amount}&slippageBps=100` 263 | ) 264 | ).json(); 265 | 266 | // get serialized transactions for the swap 267 | const { swapTransaction } = await ( 268 | await fetch("https://quote-api.jup.ag/v6/swap", { 269 | method: "POST", 270 | headers: { 271 | "Content-Type": "application/json", 272 | }, 273 | body: JSON.stringify({ 274 | quoteResponse, 275 | userPublicKey: wallet.publicKey.toString(), 276 | wrapAndUnwrapSol: true, 277 | dynamicComputeUnitLimit: true, 278 | prioritizationFeeLamports: 52000 279 | }), 280 | }) 281 | ).json(); 282 | 283 | // deserialize the transaction 284 | const swapTransactionBuf = Buffer.from(swapTransaction, "base64"); 285 | var transaction = VersionedTransaction.deserialize(swapTransactionBuf); 286 | 287 | // sign the transaction 288 | transaction.sign([wallet]); 289 | return transaction 290 | } catch (error) { 291 | console.log("Failed to get sell transaction") 292 | return null 293 | } 294 | }; -------------------------------------------------------------------------------- /utils/utils.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from 'pino'; 2 | import dotenv from 'dotenv'; 3 | import fs from 'fs'; 4 | 5 | dotenv.config(); 6 | 7 | export const retrieveEnvVariable = (variableName: string, logger: Logger) => { 8 | const variable = process.env[variableName] || ''; 9 | if (!variable) { 10 | console.log(`${variableName} is not set`); 11 | process.exit(1); 12 | } 13 | return variable; 14 | }; 15 | 16 | 17 | // Define the type for the JSON file content 18 | export interface Data { 19 | privateKey: string; 20 | pubkey: string; 21 | solBalance: number | null; 22 | tokenBuyTx: string | null, 23 | tokenSellTx: string | null, 24 | } 25 | 26 | 27 | export const randVal = (min: number, max: number, count: number, total: number, isEven: boolean): number[] => { 28 | 29 | const arr: number[] = Array(count).fill(total / count); 30 | if (isEven) return arr 31 | 32 | if (max * count < total) 33 | throw new Error("Invalid input: max * count must be greater than or equal to total.") 34 | if (min * count > total) 35 | throw new Error("Invalid input: min * count must be less than or equal to total.") 36 | const average = total / count 37 | // Randomize pairs of elements 38 | for (let i = 0; i < count; i += 2) { 39 | // Generate a random adjustment within the range 40 | const adjustment = Math.random() * Math.min(max - average, average - min) 41 | // Add adjustment to one element and subtract from the other 42 | arr[i] += adjustment 43 | arr[i + 1] -= adjustment 44 | } 45 | // if (count % 2) arr.pop() 46 | return arr; 47 | } 48 | 49 | 50 | export const saveDataToFile = (newData: Data[], filePath: string = "data.json") => { 51 | try { 52 | let existingData: Data[] = []; 53 | 54 | // Check if the file exists 55 | if (fs.existsSync(filePath)) { 56 | // If the file exists, read its content 57 | const fileContent = fs.readFileSync(filePath, 'utf-8'); 58 | existingData = JSON.parse(fileContent); 59 | } 60 | 61 | // Add the new data to the existing array 62 | existingData.push(...newData); 63 | 64 | // Write the updated data back to the file 65 | fs.writeFileSync(filePath, JSON.stringify(existingData, null, 2)); 66 | 67 | } catch (error) { 68 | try { 69 | if (fs.existsSync(filePath)) { 70 | fs.unlinkSync(filePath); 71 | console.log(`File ${filePath} deleted and create new file.`); 72 | } 73 | fs.writeFileSync(filePath, JSON.stringify(newData, null, 2)); 74 | console.log("File is saved successfully.") 75 | } catch (error) { 76 | console.log('Error saving data to JSON file:', error); 77 | } 78 | } 79 | }; 80 | 81 | export const sleep = async (ms: number) => { 82 | await new Promise((resolve) => setTimeout(resolve, ms)) 83 | } 84 | 85 | 86 | export function deleteConsoleLines(numLines: number) { 87 | for (let i = 0; i < numLines; i++) { 88 | process.stdout.moveCursor(0, -1); // Move cursor up one line 89 | process.stdout.clearLine(-1); // Clear the line 90 | } 91 | } 92 | 93 | 94 | // Function to read JSON file 95 | export function readJson(filename: string = "data.json"): Data[] { 96 | if (!fs.existsSync(filename)) { 97 | // If the file does not exist, create an empty array 98 | fs.writeFileSync(filename, '[]', 'utf-8'); 99 | } 100 | const data = fs.readFileSync(filename, 'utf-8'); 101 | return JSON.parse(data) as Data[]; 102 | } 103 | 104 | // Function to write JSON file 105 | export function writeJson( data: Data[], filename: string = "data.json",): void { 106 | fs.writeFileSync(filename, JSON.stringify(data, null, 4), 'utf-8'); 107 | } 108 | 109 | // Function to edit JSON file content 110 | export function editJson(newData: Partial, filename: string = "data.json"): void { 111 | if(!newData.pubkey) { 112 | console.log("Pubkey is not prvided as an argument") 113 | return 114 | } 115 | const wallets = readJson(filename); 116 | const index = wallets.findIndex(wallet => wallet.pubkey === newData.pubkey); 117 | if (index !== -1) { 118 | wallets[index] = { ...wallets[index], ...newData }; 119 | writeJson(wallets, filename); 120 | } else { 121 | console.error(`Pubkey ${newData.pubkey} does not exist.`); 122 | } 123 | } 124 | 125 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.23.4": 6 | version "7.24.4" 7 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz" 8 | integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== 9 | dependencies: 10 | regenerator-runtime "^0.14.0" 11 | 12 | "@cspotcode/source-map-support@^0.8.0": 13 | version "0.8.1" 14 | resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" 15 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 16 | dependencies: 17 | "@jridgewell/trace-mapping" "0.3.9" 18 | 19 | "@grpc/grpc-js@^1.8.13": 20 | version "1.10.6" 21 | resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.6.tgz" 22 | integrity sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA== 23 | dependencies: 24 | "@grpc/proto-loader" "^0.7.10" 25 | "@js-sdsl/ordered-map" "^4.4.2" 26 | 27 | "@grpc/proto-loader@^0.7.10": 28 | version "0.7.12" 29 | resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.12.tgz" 30 | integrity sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q== 31 | dependencies: 32 | lodash.camelcase "^4.3.0" 33 | long "^5.0.0" 34 | protobufjs "^7.2.4" 35 | yargs "^17.7.2" 36 | 37 | "@jridgewell/resolve-uri@^3.0.3": 38 | version "3.1.2" 39 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" 40 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 41 | 42 | "@jridgewell/sourcemap-codec@^1.4.10": 43 | version "1.4.15" 44 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" 45 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 46 | 47 | "@jridgewell/trace-mapping@0.3.9": 48 | version "0.3.9" 49 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" 50 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 51 | dependencies: 52 | "@jridgewell/resolve-uri" "^3.0.3" 53 | "@jridgewell/sourcemap-codec" "^1.4.10" 54 | 55 | "@js-sdsl/ordered-map@^4.4.2": 56 | version "4.4.2" 57 | resolved "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz" 58 | integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== 59 | 60 | "@metaplex-foundation/mpl-token-metadata@^3.2.1": 61 | version "3.2.1" 62 | resolved "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-3.2.1.tgz" 63 | integrity sha512-26W1NhQwDWmLOg/pBRYut7x/vEs/5kFS2sWVEY5/X0f2jJOLhnd4NaZQcq+5u+XZsXvm1jq2AtrRGPNK43oqWQ== 64 | dependencies: 65 | "@metaplex-foundation/mpl-toolbox" "^0.9.4" 66 | 67 | "@metaplex-foundation/mpl-toolbox@^0.9.4": 68 | version "0.9.4" 69 | resolved "https://registry.npmjs.org/@metaplex-foundation/mpl-toolbox/-/mpl-toolbox-0.9.4.tgz" 70 | integrity sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ== 71 | 72 | "@metaplex-foundation/umi-options@^0.8.9": 73 | version "0.8.9" 74 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-options/-/umi-options-0.8.9.tgz" 75 | integrity sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A== 76 | 77 | "@metaplex-foundation/umi-public-keys@^0.8.9": 78 | version "0.8.9" 79 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-public-keys/-/umi-public-keys-0.8.9.tgz" 80 | integrity sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q== 81 | dependencies: 82 | "@metaplex-foundation/umi-serializers-encodings" "^0.8.9" 83 | 84 | "@metaplex-foundation/umi-serializers-core@^0.8.9": 85 | version "0.8.9" 86 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-0.8.9.tgz" 87 | integrity sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w== 88 | 89 | "@metaplex-foundation/umi-serializers-encodings@^0.8.9": 90 | version "0.8.9" 91 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-0.8.9.tgz" 92 | integrity sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q== 93 | dependencies: 94 | "@metaplex-foundation/umi-serializers-core" "^0.8.9" 95 | 96 | "@metaplex-foundation/umi-serializers-numbers@^0.8.9": 97 | version "0.8.9" 98 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-0.8.9.tgz" 99 | integrity sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg== 100 | dependencies: 101 | "@metaplex-foundation/umi-serializers-core" "^0.8.9" 102 | 103 | "@metaplex-foundation/umi-serializers@^0.9.0": 104 | version "0.9.0" 105 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-serializers/-/umi-serializers-0.9.0.tgz" 106 | integrity sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg== 107 | dependencies: 108 | "@metaplex-foundation/umi-options" "^0.8.9" 109 | "@metaplex-foundation/umi-public-keys" "^0.8.9" 110 | "@metaplex-foundation/umi-serializers-core" "^0.8.9" 111 | "@metaplex-foundation/umi-serializers-encodings" "^0.8.9" 112 | "@metaplex-foundation/umi-serializers-numbers" "^0.8.9" 113 | 114 | "@metaplex-foundation/umi@^0.9.1": 115 | version "0.9.1" 116 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi/-/umi-0.9.1.tgz" 117 | integrity sha512-IhHoOvp4vfO/++YL+78+iVuLM53+FDwUOZDYgH6lx0jYXyQ27BeaieeR5i+q3A9dz4KxQo5Nzc5aCA1109QGCQ== 118 | dependencies: 119 | "@metaplex-foundation/umi-options" "^0.8.9" 120 | "@metaplex-foundation/umi-public-keys" "^0.8.9" 121 | "@metaplex-foundation/umi-serializers" "^0.9.0" 122 | 123 | "@noble/curves@^1.0.0", "@noble/curves@^1.2.0": 124 | version "1.4.0" 125 | resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz" 126 | integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== 127 | dependencies: 128 | "@noble/hashes" "1.4.0" 129 | 130 | "@noble/ed25519@^1.7.1": 131 | version "1.7.3" 132 | resolved "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz" 133 | integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== 134 | 135 | "@noble/hashes@1.4.0", "@noble/hashes@^1.3.0", "@noble/hashes@^1.3.3": 136 | version "1.4.0" 137 | resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" 138 | integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== 139 | 140 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": 141 | version "1.1.2" 142 | resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" 143 | integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== 144 | 145 | "@protobufjs/base64@^1.1.2": 146 | version "1.1.2" 147 | resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz" 148 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== 149 | 150 | "@protobufjs/codegen@^2.0.4": 151 | version "2.0.4" 152 | resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz" 153 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== 154 | 155 | "@protobufjs/eventemitter@^1.1.0": 156 | version "1.1.0" 157 | resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz" 158 | integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== 159 | 160 | "@protobufjs/fetch@^1.1.0": 161 | version "1.1.0" 162 | resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz" 163 | integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== 164 | dependencies: 165 | "@protobufjs/aspromise" "^1.1.1" 166 | "@protobufjs/inquire" "^1.1.0" 167 | 168 | "@protobufjs/float@^1.0.2": 169 | version "1.0.2" 170 | resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz" 171 | integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== 172 | 173 | "@protobufjs/inquire@^1.1.0": 174 | version "1.1.0" 175 | resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz" 176 | integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== 177 | 178 | "@protobufjs/path@^1.1.2": 179 | version "1.1.2" 180 | resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz" 181 | integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== 182 | 183 | "@protobufjs/pool@^1.1.0": 184 | version "1.1.0" 185 | resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz" 186 | integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== 187 | 188 | "@protobufjs/utf8@^1.1.0": 189 | version "1.1.0" 190 | resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" 191 | integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== 192 | 193 | "@raydium-io/raydium-sdk@^1.3.1-beta.47": 194 | version "1.3.1-beta.51" 195 | resolved "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.51.tgz" 196 | integrity sha512-HtZqK7NBHZLDnuhR9VFrtTM2E7QEtRKIzBI59ZOph+iaU4olgMyoMFYPU279LTip0fRUEO5LLh/8VHXVEKT2uw== 197 | dependencies: 198 | "@solana/buffer-layout" "^4.0.1" 199 | "@solana/spl-token" "^0.3.9" 200 | axios "^1.6.2" 201 | big.js "^6.2.1" 202 | bn.js "^5.2.1" 203 | decimal.js "^10.4.3" 204 | decimal.js-light "^2.5.1" 205 | fecha "^4.2.3" 206 | lodash "^4.17.21" 207 | toformat "^2.0.0" 208 | 209 | "@solana/buffer-layout-utils@^0.2.0": 210 | version "0.2.0" 211 | resolved "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz" 212 | integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== 213 | dependencies: 214 | "@solana/buffer-layout" "^4.0.0" 215 | "@solana/web3.js" "^1.32.0" 216 | bigint-buffer "^1.1.5" 217 | bignumber.js "^9.0.1" 218 | 219 | "@solana/buffer-layout@^4.0.0", "@solana/buffer-layout@^4.0.1": 220 | version "4.0.1" 221 | resolved "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz" 222 | integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== 223 | dependencies: 224 | buffer "~6.0.3" 225 | 226 | "@solana/codecs-core@2.0.0-experimental.8618508": 227 | version "2.0.0-experimental.8618508" 228 | resolved "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-experimental.8618508.tgz" 229 | integrity sha512-JCz7mKjVKtfZxkuDtwMAUgA7YvJcA2BwpZaA1NOLcted4OMC4Prwa3DUe3f3181ixPYaRyptbF0Ikq2MbDkYEA== 230 | 231 | "@solana/codecs-core@2.0.0-preview.2": 232 | version "2.0.0-preview.2" 233 | resolved "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-preview.2.tgz" 234 | integrity sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg== 235 | dependencies: 236 | "@solana/errors" "2.0.0-preview.2" 237 | 238 | "@solana/codecs-data-structures@2.0.0-experimental.8618508": 239 | version "2.0.0-experimental.8618508" 240 | resolved "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-experimental.8618508.tgz" 241 | integrity sha512-sLpjL9sqzaDdkloBPV61Rht1tgaKq98BCtIKRuyscIrmVPu3wu0Bavk2n/QekmUzaTsj7K1pVSniM0YqCdnEBw== 242 | dependencies: 243 | "@solana/codecs-core" "2.0.0-experimental.8618508" 244 | "@solana/codecs-numbers" "2.0.0-experimental.8618508" 245 | 246 | "@solana/codecs-data-structures@2.0.0-preview.2": 247 | version "2.0.0-preview.2" 248 | resolved "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.2.tgz" 249 | integrity sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg== 250 | dependencies: 251 | "@solana/codecs-core" "2.0.0-preview.2" 252 | "@solana/codecs-numbers" "2.0.0-preview.2" 253 | "@solana/errors" "2.0.0-preview.2" 254 | 255 | "@solana/codecs-numbers@2.0.0-experimental.8618508": 256 | version "2.0.0-experimental.8618508" 257 | resolved "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-experimental.8618508.tgz" 258 | integrity sha512-EXQKfzFr3CkKKNzKSZPOOOzchXsFe90TVONWsSnVkonO9z+nGKALE0/L9uBmIFGgdzhhU9QQVFvxBMclIDJo2Q== 259 | dependencies: 260 | "@solana/codecs-core" "2.0.0-experimental.8618508" 261 | 262 | "@solana/codecs-numbers@2.0.0-preview.2": 263 | version "2.0.0-preview.2" 264 | resolved "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.2.tgz" 265 | integrity sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw== 266 | dependencies: 267 | "@solana/codecs-core" "2.0.0-preview.2" 268 | "@solana/errors" "2.0.0-preview.2" 269 | 270 | "@solana/codecs-strings@2.0.0-experimental.8618508": 271 | version "2.0.0-experimental.8618508" 272 | resolved "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-experimental.8618508.tgz" 273 | integrity sha512-b2yhinr1+oe+JDmnnsV0641KQqqDG8AQ16Z/x7GVWO+AWHMpRlHWVXOq8U1yhPMA4VXxl7i+D+C6ql0VGFp0GA== 274 | dependencies: 275 | "@solana/codecs-core" "2.0.0-experimental.8618508" 276 | "@solana/codecs-numbers" "2.0.0-experimental.8618508" 277 | 278 | "@solana/codecs-strings@2.0.0-preview.2": 279 | version "2.0.0-preview.2" 280 | resolved "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.2.tgz" 281 | integrity sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g== 282 | dependencies: 283 | "@solana/codecs-core" "2.0.0-preview.2" 284 | "@solana/codecs-numbers" "2.0.0-preview.2" 285 | "@solana/errors" "2.0.0-preview.2" 286 | 287 | "@solana/codecs@2.0.0-preview.2": 288 | version "2.0.0-preview.2" 289 | resolved "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-preview.2.tgz" 290 | integrity sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA== 291 | dependencies: 292 | "@solana/codecs-core" "2.0.0-preview.2" 293 | "@solana/codecs-data-structures" "2.0.0-preview.2" 294 | "@solana/codecs-numbers" "2.0.0-preview.2" 295 | "@solana/codecs-strings" "2.0.0-preview.2" 296 | "@solana/options" "2.0.0-preview.2" 297 | 298 | "@solana/errors@2.0.0-preview.2": 299 | version "2.0.0-preview.2" 300 | resolved "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-preview.2.tgz" 301 | integrity sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA== 302 | dependencies: 303 | chalk "^5.3.0" 304 | commander "^12.0.0" 305 | 306 | "@solana/options@2.0.0-experimental.8618508": 307 | version "2.0.0-experimental.8618508" 308 | resolved "https://registry.npmjs.org/@solana/options/-/options-2.0.0-experimental.8618508.tgz" 309 | integrity sha512-fy/nIRAMC3QHvnKi63KEd86Xr/zFBVxNW4nEpVEU2OT0gCEKwHY4Z55YHf7XujhyuM3PNpiBKg/YYw5QlRU4vg== 310 | dependencies: 311 | "@solana/codecs-core" "2.0.0-experimental.8618508" 312 | "@solana/codecs-numbers" "2.0.0-experimental.8618508" 313 | 314 | "@solana/options@2.0.0-preview.2": 315 | version "2.0.0-preview.2" 316 | resolved "https://registry.npmjs.org/@solana/options/-/options-2.0.0-preview.2.tgz" 317 | integrity sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w== 318 | dependencies: 319 | "@solana/codecs-core" "2.0.0-preview.2" 320 | "@solana/codecs-numbers" "2.0.0-preview.2" 321 | 322 | "@solana/spl-token-group@^0.0.2": 323 | version "0.0.2" 324 | resolved "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.2.tgz" 325 | integrity sha512-vLePrFvT9+PfK2KZaddPebTWtRykXUR+060gqomFUcBk/2UPpZtsJGW+xshI9z9Ryrx7FieprZEUCApw34BwrQ== 326 | dependencies: 327 | "@solana/codecs" "2.0.0-preview.2" 328 | "@solana/spl-type-length-value" "0.1.0" 329 | 330 | "@solana/spl-token-metadata@^0.1.2": 331 | version "0.1.2" 332 | resolved "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.2.tgz" 333 | integrity sha512-hJYnAJNkDrtkE2Q41YZhCpeOGU/0JgRFXbtrtOuGGeKc3pkEUHB9DDoxZAxx+XRno13GozUleyBi0qypz4c3bw== 334 | dependencies: 335 | "@solana/codecs-core" "2.0.0-experimental.8618508" 336 | "@solana/codecs-data-structures" "2.0.0-experimental.8618508" 337 | "@solana/codecs-numbers" "2.0.0-experimental.8618508" 338 | "@solana/codecs-strings" "2.0.0-experimental.8618508" 339 | "@solana/options" "2.0.0-experimental.8618508" 340 | "@solana/spl-type-length-value" "0.1.0" 341 | 342 | "@solana/spl-token@^0.3.9": 343 | version "0.3.11" 344 | resolved "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz" 345 | integrity sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ== 346 | dependencies: 347 | "@solana/buffer-layout" "^4.0.0" 348 | "@solana/buffer-layout-utils" "^0.2.0" 349 | "@solana/spl-token-metadata" "^0.1.2" 350 | buffer "^6.0.3" 351 | 352 | "@solana/spl-token@^0.4.0": 353 | version "0.4.3" 354 | resolved "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.3.tgz" 355 | integrity sha512-mRjJJE9CIBejsg9WAmDp369pWeObm42K2fwsZ4dkJAMCt1KBPb5Eb1vzM5+AYfV/BUTy3QP2oFx8kV+8Doa1xQ== 356 | dependencies: 357 | "@solana/buffer-layout" "^4.0.0" 358 | "@solana/buffer-layout-utils" "^0.2.0" 359 | "@solana/spl-token-group" "^0.0.2" 360 | "@solana/spl-token-metadata" "^0.1.2" 361 | buffer "^6.0.3" 362 | 363 | "@solana/spl-type-length-value@0.1.0": 364 | version "0.1.0" 365 | resolved "https://registry.npmjs.org/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz" 366 | integrity sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA== 367 | dependencies: 368 | buffer "^6.0.3" 369 | 370 | "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.89.1": 371 | version "1.91.4" 372 | resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.91.4.tgz" 373 | integrity sha512-zconqecIcBqEF6JiM4xYF865Xc4aas+iWK5qnu7nwKPq9ilRYcn+2GiwpYXqUqqBUe0XCO17w18KO0F8h+QATg== 374 | dependencies: 375 | "@babel/runtime" "^7.23.4" 376 | "@noble/curves" "^1.2.0" 377 | "@noble/hashes" "^1.3.3" 378 | "@solana/buffer-layout" "^4.0.1" 379 | agentkeepalive "^4.5.0" 380 | bigint-buffer "^1.1.5" 381 | bn.js "^5.2.1" 382 | borsh "^0.7.0" 383 | bs58 "^4.0.1" 384 | buffer "6.0.3" 385 | fast-stable-stringify "^1.0.0" 386 | jayson "^4.1.0" 387 | node-fetch "^2.7.0" 388 | rpc-websockets "^7.5.1" 389 | superstruct "^0.14.2" 390 | 391 | "@solana/web3.js@~1.77.3": 392 | version "1.77.4" 393 | resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.77.4.tgz" 394 | integrity sha512-XdN0Lh4jdY7J8FYMyucxCwzn6Ga2Sr1DHDWRbqVzk7ZPmmpSPOVWHzO67X1cVT+jNi1D6gZi2tgjHgDPuj6e9Q== 395 | dependencies: 396 | "@babel/runtime" "^7.12.5" 397 | "@noble/curves" "^1.0.0" 398 | "@noble/hashes" "^1.3.0" 399 | "@solana/buffer-layout" "^4.0.0" 400 | agentkeepalive "^4.2.1" 401 | bigint-buffer "^1.1.5" 402 | bn.js "^5.0.0" 403 | borsh "^0.7.0" 404 | bs58 "^4.0.1" 405 | buffer "6.0.3" 406 | fast-stable-stringify "^1.0.0" 407 | jayson "^4.1.0" 408 | node-fetch "^2.6.7" 409 | rpc-websockets "^7.5.1" 410 | superstruct "^0.14.2" 411 | 412 | "@tsconfig/node10@^1.0.7": 413 | version "1.0.11" 414 | resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" 415 | integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== 416 | 417 | "@tsconfig/node12@^1.0.7": 418 | version "1.0.11" 419 | resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" 420 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 421 | 422 | "@tsconfig/node14@^1.0.0": 423 | version "1.0.3" 424 | resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" 425 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 426 | 427 | "@tsconfig/node16@^1.0.2": 428 | version "1.0.4" 429 | resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" 430 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 431 | 432 | "@types/bn.js@^5.1.5": 433 | version "5.1.5" 434 | resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz" 435 | integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== 436 | dependencies: 437 | "@types/node" "*" 438 | 439 | "@types/connect@^3.4.33": 440 | version "3.4.38" 441 | resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" 442 | integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== 443 | dependencies: 444 | "@types/node" "*" 445 | 446 | "@types/node@*", "@types/node@>=13.7.0": 447 | version "20.12.7" 448 | resolved "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz" 449 | integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== 450 | dependencies: 451 | undici-types "~5.26.4" 452 | 453 | "@types/node@^12.12.54": 454 | version "12.20.55" 455 | resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" 456 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 457 | 458 | "@types/ws@^7.4.4": 459 | version "7.4.7" 460 | resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" 461 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 462 | dependencies: 463 | "@types/node" "*" 464 | 465 | JSONStream@^1.3.5: 466 | version "1.3.5" 467 | resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" 468 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 469 | dependencies: 470 | jsonparse "^1.2.0" 471 | through ">=2.2.7 <3" 472 | 473 | abort-controller@^3.0.0: 474 | version "3.0.0" 475 | resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" 476 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 477 | dependencies: 478 | event-target-shim "^5.0.0" 479 | 480 | acorn-walk@^8.1.1: 481 | version "8.3.2" 482 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" 483 | integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== 484 | 485 | acorn@^8.4.1: 486 | version "8.11.3" 487 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" 488 | integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== 489 | 490 | agentkeepalive@^4.2.1, agentkeepalive@^4.3.0, agentkeepalive@^4.5.0: 491 | version "4.5.0" 492 | resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" 493 | integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== 494 | dependencies: 495 | humanize-ms "^1.2.1" 496 | 497 | ansi-regex@^5.0.1: 498 | version "5.0.1" 499 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 500 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 501 | 502 | ansi-styles@^4.0.0: 503 | version "4.3.0" 504 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 505 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 506 | dependencies: 507 | color-convert "^2.0.1" 508 | 509 | arg@^4.1.0: 510 | version "4.1.3" 511 | resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" 512 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 513 | 514 | asynckit@^0.4.0: 515 | version "0.4.0" 516 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" 517 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 518 | 519 | atomic-sleep@^1.0.0: 520 | version "1.0.0" 521 | resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" 522 | integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== 523 | 524 | axios@^1.6.2, axios@^1.6.8: 525 | version "1.6.8" 526 | resolved "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz" 527 | integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== 528 | dependencies: 529 | follow-redirects "^1.15.6" 530 | form-data "^4.0.0" 531 | proxy-from-env "^1.1.0" 532 | 533 | base-x@^3.0.2: 534 | version "3.0.9" 535 | resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" 536 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 537 | dependencies: 538 | safe-buffer "^5.0.1" 539 | 540 | base-x@^4.0.0: 541 | version "4.0.0" 542 | resolved "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz" 543 | integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== 544 | 545 | base64-js@^1.3.1: 546 | version "1.5.1" 547 | resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" 548 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 549 | 550 | big.js@^6.2.1: 551 | version "6.2.1" 552 | resolved "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz" 553 | integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== 554 | 555 | bigint-buffer@^1.1.5: 556 | version "1.1.5" 557 | resolved "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz" 558 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 559 | dependencies: 560 | bindings "^1.3.0" 561 | 562 | bignumber.js@^9.0.1: 563 | version "9.1.2" 564 | resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" 565 | integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== 566 | 567 | bindings@^1.3.0: 568 | version "1.5.0" 569 | resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" 570 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 571 | dependencies: 572 | file-uri-to-path "1.0.0" 573 | 574 | bn.js@^5.0.0, bn.js@^5.2.0, bn.js@^5.2.1: 575 | version "5.2.1" 576 | resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" 577 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 578 | 579 | borsh@^0.7.0: 580 | version "0.7.0" 581 | resolved "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz" 582 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 583 | dependencies: 584 | bn.js "^5.2.0" 585 | bs58 "^4.0.0" 586 | text-encoding-utf-8 "^1.0.2" 587 | 588 | bs58@^4.0.0, bs58@^4.0.1: 589 | version "4.0.1" 590 | resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" 591 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 592 | dependencies: 593 | base-x "^3.0.2" 594 | 595 | bs58@^5.0.0: 596 | version "5.0.0" 597 | resolved "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz" 598 | integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== 599 | dependencies: 600 | base-x "^4.0.0" 601 | 602 | buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: 603 | version "6.0.3" 604 | resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" 605 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 606 | dependencies: 607 | base64-js "^1.3.1" 608 | ieee754 "^1.2.1" 609 | 610 | bufferutil@^4.0.1: 611 | version "4.0.8" 612 | resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz" 613 | integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== 614 | dependencies: 615 | node-gyp-build "^4.3.0" 616 | 617 | chalk@^5.3.0: 618 | version "5.3.0" 619 | resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" 620 | integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== 621 | 622 | cliui@^8.0.1: 623 | version "8.0.1" 624 | resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" 625 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 626 | dependencies: 627 | string-width "^4.2.0" 628 | strip-ansi "^6.0.1" 629 | wrap-ansi "^7.0.0" 630 | 631 | color-convert@^2.0.1: 632 | version "2.0.1" 633 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 634 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 635 | dependencies: 636 | color-name "~1.1.4" 637 | 638 | color-name@~1.1.4: 639 | version "1.1.4" 640 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 641 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 642 | 643 | colorette@^2.0.7: 644 | version "2.0.20" 645 | resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" 646 | integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== 647 | 648 | combined-stream@^1.0.8: 649 | version "1.0.8" 650 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" 651 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 652 | dependencies: 653 | delayed-stream "~1.0.0" 654 | 655 | commander@^12.0.0: 656 | version "12.0.0" 657 | resolved "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz" 658 | integrity sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA== 659 | 660 | commander@^2.20.3: 661 | version "2.20.3" 662 | resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" 663 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 664 | 665 | create-require@^1.1.0: 666 | version "1.1.1" 667 | resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" 668 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 669 | 670 | dateformat@^4.6.3: 671 | version "4.6.3" 672 | resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" 673 | integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== 674 | 675 | decimal.js-light@^2.5.1: 676 | version "2.5.1" 677 | resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz" 678 | integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== 679 | 680 | decimal.js@^10.4.3: 681 | version "10.4.3" 682 | resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" 683 | integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== 684 | 685 | delay@^5.0.0: 686 | version "5.0.0" 687 | resolved "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" 688 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 689 | 690 | delayed-stream@~1.0.0: 691 | version "1.0.0" 692 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" 693 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 694 | 695 | diff@^4.0.1: 696 | version "4.0.2" 697 | resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" 698 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 699 | 700 | dotenv@^16.0.3, dotenv@^16.4.1: 701 | version "16.4.5" 702 | resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz" 703 | integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== 704 | 705 | emoji-regex@^8.0.0: 706 | version "8.0.0" 707 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 708 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 709 | 710 | end-of-stream@^1.1.0: 711 | version "1.4.4" 712 | resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" 713 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 714 | dependencies: 715 | once "^1.4.0" 716 | 717 | es6-promise@^4.0.3: 718 | version "4.2.8" 719 | resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" 720 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 721 | 722 | es6-promisify@^5.0.0: 723 | version "5.0.0" 724 | resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" 725 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 726 | dependencies: 727 | es6-promise "^4.0.3" 728 | 729 | escalade@^3.1.1: 730 | version "3.1.2" 731 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" 732 | integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== 733 | 734 | event-target-shim@^5.0.0: 735 | version "5.0.1" 736 | resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" 737 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 738 | 739 | eventemitter3@^4.0.7: 740 | version "4.0.7" 741 | resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" 742 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 743 | 744 | events@^3.3.0: 745 | version "3.3.0" 746 | resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" 747 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 748 | 749 | eyes@^0.1.8: 750 | version "0.1.8" 751 | resolved "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" 752 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 753 | 754 | fast-copy@^3.0.0: 755 | version "3.0.2" 756 | resolved "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz" 757 | integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== 758 | 759 | fast-redact@^3.1.1: 760 | version "3.5.0" 761 | resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz" 762 | integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== 763 | 764 | fast-safe-stringify@^2.1.1: 765 | version "2.1.1" 766 | resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" 767 | integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== 768 | 769 | fast-stable-stringify@^1.0.0: 770 | version "1.0.0" 771 | resolved "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz" 772 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 773 | 774 | fecha@^4.2.3: 775 | version "4.2.3" 776 | resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" 777 | integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== 778 | 779 | file-uri-to-path@1.0.0: 780 | version "1.0.0" 781 | resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" 782 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 783 | 784 | follow-redirects@^1.15.6: 785 | version "1.15.6" 786 | resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" 787 | integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== 788 | 789 | form-data@^4.0.0: 790 | version "4.0.0" 791 | resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" 792 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 793 | dependencies: 794 | asynckit "^0.4.0" 795 | combined-stream "^1.0.8" 796 | mime-types "^2.1.12" 797 | 798 | get-caller-file@^2.0.5: 799 | version "2.0.5" 800 | resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 801 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 802 | 803 | help-me@^5.0.0: 804 | version "5.0.0" 805 | resolved "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz" 806 | integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== 807 | 808 | humanize-ms@^1.2.1: 809 | version "1.2.1" 810 | resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" 811 | integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== 812 | dependencies: 813 | ms "^2.0.0" 814 | 815 | ieee754@^1.2.1: 816 | version "1.2.1" 817 | resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" 818 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 819 | 820 | is-fullwidth-code-point@^3.0.0: 821 | version "3.0.0" 822 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 823 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 824 | 825 | isomorphic-ws@^4.0.1: 826 | version "4.0.1" 827 | resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" 828 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 829 | 830 | jayson@^4.0.0, jayson@^4.1.0: 831 | version "4.1.0" 832 | resolved "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz" 833 | integrity sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A== 834 | dependencies: 835 | "@types/connect" "^3.4.33" 836 | "@types/node" "^12.12.54" 837 | "@types/ws" "^7.4.4" 838 | JSONStream "^1.3.5" 839 | commander "^2.20.3" 840 | delay "^5.0.0" 841 | es6-promisify "^5.0.0" 842 | eyes "^0.1.8" 843 | isomorphic-ws "^4.0.1" 844 | json-stringify-safe "^5.0.1" 845 | uuid "^8.3.2" 846 | ws "^7.4.5" 847 | 848 | jito-ts@^3.0.1: 849 | version "3.0.1" 850 | resolved "https://registry.npmjs.org/jito-ts/-/jito-ts-3.0.1.tgz" 851 | integrity sha512-TSofF7KqcwyaWGjPaSYC8RDoNBY1TPRNBHdrw24bdIi7mQ5bFEDdYK3D//llw/ml8YDvcZlgd644WxhjLTS9yg== 852 | dependencies: 853 | "@grpc/grpc-js" "^1.8.13" 854 | "@noble/ed25519" "^1.7.1" 855 | "@solana/web3.js" "~1.77.3" 856 | agentkeepalive "^4.3.0" 857 | dotenv "^16.0.3" 858 | jayson "^4.0.0" 859 | node-fetch "^2.6.7" 860 | superstruct "^1.0.3" 861 | 862 | joycon@^3.1.1: 863 | version "3.1.1" 864 | resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" 865 | integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== 866 | 867 | json-stringify-safe@^5.0.1: 868 | version "5.0.1" 869 | resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" 870 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 871 | 872 | jsonparse@^1.2.0: 873 | version "1.3.1" 874 | resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" 875 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 876 | 877 | lodash.camelcase@^4.3.0: 878 | version "4.3.0" 879 | resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" 880 | integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== 881 | 882 | lodash@^4.17.21: 883 | version "4.17.21" 884 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 885 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 886 | 887 | long@^5.0.0: 888 | version "5.2.3" 889 | resolved "https://registry.npmjs.org/long/-/long-5.2.3.tgz" 890 | integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== 891 | 892 | make-error@^1.1.1: 893 | version "1.3.6" 894 | resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" 895 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 896 | 897 | mime-db@1.52.0: 898 | version "1.52.0" 899 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" 900 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 901 | 902 | mime-types@^2.1.12: 903 | version "2.1.35" 904 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" 905 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 906 | dependencies: 907 | mime-db "1.52.0" 908 | 909 | minimist@^1.2.6: 910 | version "1.2.8" 911 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" 912 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 913 | 914 | ms@^2.0.0: 915 | version "2.1.3" 916 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 917 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 918 | 919 | node-fetch@^2.6.7, node-fetch@^2.7.0: 920 | version "2.7.0" 921 | resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" 922 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== 923 | dependencies: 924 | whatwg-url "^5.0.0" 925 | 926 | node-gyp-build@^4.3.0: 927 | version "4.8.0" 928 | resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz" 929 | integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== 930 | 931 | on-exit-leak-free@^2.1.0: 932 | version "2.1.2" 933 | resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" 934 | integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== 935 | 936 | once@^1.3.1, once@^1.4.0: 937 | version "1.4.0" 938 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 939 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 940 | dependencies: 941 | wrappy "1" 942 | 943 | pino-abstract-transport@^1.0.0, pino-abstract-transport@^1.1.0: 944 | version "1.1.0" 945 | resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz" 946 | integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== 947 | dependencies: 948 | readable-stream "^4.0.0" 949 | split2 "^4.0.0" 950 | 951 | pino-pretty@^10.3.1: 952 | version "10.3.1" 953 | resolved "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz" 954 | integrity sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g== 955 | dependencies: 956 | colorette "^2.0.7" 957 | dateformat "^4.6.3" 958 | fast-copy "^3.0.0" 959 | fast-safe-stringify "^2.1.1" 960 | help-me "^5.0.0" 961 | joycon "^3.1.1" 962 | minimist "^1.2.6" 963 | on-exit-leak-free "^2.1.0" 964 | pino-abstract-transport "^1.0.0" 965 | pump "^3.0.0" 966 | readable-stream "^4.0.0" 967 | secure-json-parse "^2.4.0" 968 | sonic-boom "^3.0.0" 969 | strip-json-comments "^3.1.1" 970 | 971 | pino-std-serializers@^6.0.0, pino-std-serializers@^6.2.2: 972 | version "6.2.2" 973 | resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz" 974 | integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== 975 | 976 | pino@^8.18.0: 977 | version "8.20.0" 978 | resolved "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz" 979 | integrity sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ== 980 | dependencies: 981 | atomic-sleep "^1.0.0" 982 | fast-redact "^3.1.1" 983 | on-exit-leak-free "^2.1.0" 984 | pino-abstract-transport "^1.1.0" 985 | pino-std-serializers "^6.0.0" 986 | process-warning "^3.0.0" 987 | quick-format-unescaped "^4.0.3" 988 | real-require "^0.2.0" 989 | safe-stable-stringify "^2.3.1" 990 | sonic-boom "^3.7.0" 991 | thread-stream "^2.0.0" 992 | 993 | prettier@^3.2.4: 994 | version "3.2.5" 995 | resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz" 996 | integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== 997 | 998 | process-warning@^3.0.0: 999 | version "3.0.0" 1000 | resolved "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz" 1001 | integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== 1002 | 1003 | process@^0.11.10: 1004 | version "0.11.10" 1005 | resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" 1006 | integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== 1007 | 1008 | protobufjs@^7.2.4: 1009 | version "7.2.6" 1010 | resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz" 1011 | integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== 1012 | dependencies: 1013 | "@protobufjs/aspromise" "^1.1.2" 1014 | "@protobufjs/base64" "^1.1.2" 1015 | "@protobufjs/codegen" "^2.0.4" 1016 | "@protobufjs/eventemitter" "^1.1.0" 1017 | "@protobufjs/fetch" "^1.1.0" 1018 | "@protobufjs/float" "^1.0.2" 1019 | "@protobufjs/inquire" "^1.1.0" 1020 | "@protobufjs/path" "^1.1.2" 1021 | "@protobufjs/pool" "^1.1.0" 1022 | "@protobufjs/utf8" "^1.1.0" 1023 | "@types/node" ">=13.7.0" 1024 | long "^5.0.0" 1025 | 1026 | proxy-from-env@^1.1.0: 1027 | version "1.1.0" 1028 | resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" 1029 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 1030 | 1031 | pump@^3.0.0: 1032 | version "3.0.0" 1033 | resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" 1034 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1035 | dependencies: 1036 | end-of-stream "^1.1.0" 1037 | once "^1.3.1" 1038 | 1039 | quick-format-unescaped@^4.0.3: 1040 | version "4.0.4" 1041 | resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" 1042 | integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== 1043 | 1044 | readable-stream@^4.0.0: 1045 | version "4.5.2" 1046 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" 1047 | integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== 1048 | dependencies: 1049 | abort-controller "^3.0.0" 1050 | buffer "^6.0.3" 1051 | events "^3.3.0" 1052 | process "^0.11.10" 1053 | string_decoder "^1.3.0" 1054 | 1055 | real-require@^0.2.0: 1056 | version "0.2.0" 1057 | resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" 1058 | integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== 1059 | 1060 | regenerator-runtime@^0.14.0: 1061 | version "0.14.1" 1062 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" 1063 | integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== 1064 | 1065 | require-directory@^2.1.1: 1066 | version "2.1.1" 1067 | resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 1068 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1069 | 1070 | rpc-websockets@^7.5.1: 1071 | version "7.9.0" 1072 | resolved "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.9.0.tgz" 1073 | integrity sha512-DwKewQz1IUA5wfLvgM8wDpPRcr+nWSxuFxx5CbrI2z/MyyZ4nXLM86TvIA+cI1ZAdqC8JIBR1mZR55dzaLU+Hw== 1074 | dependencies: 1075 | "@babel/runtime" "^7.17.2" 1076 | eventemitter3 "^4.0.7" 1077 | uuid "^8.3.2" 1078 | ws "^8.5.0" 1079 | optionalDependencies: 1080 | bufferutil "^4.0.1" 1081 | utf-8-validate "^5.0.2" 1082 | 1083 | safe-buffer@^5.0.1, safe-buffer@~5.2.0: 1084 | version "5.2.1" 1085 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 1086 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1087 | 1088 | safe-stable-stringify@^2.3.1: 1089 | version "2.4.3" 1090 | resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" 1091 | integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== 1092 | 1093 | secure-json-parse@^2.4.0: 1094 | version "2.7.0" 1095 | resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" 1096 | integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== 1097 | 1098 | sonic-boom@^3.0.0, sonic-boom@^3.7.0: 1099 | version "3.8.1" 1100 | resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz" 1101 | integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== 1102 | dependencies: 1103 | atomic-sleep "^1.0.0" 1104 | 1105 | split2@^4.0.0: 1106 | version "4.2.0" 1107 | resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" 1108 | integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== 1109 | 1110 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 1111 | version "4.2.3" 1112 | resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1113 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1114 | dependencies: 1115 | emoji-regex "^8.0.0" 1116 | is-fullwidth-code-point "^3.0.0" 1117 | strip-ansi "^6.0.1" 1118 | 1119 | string_decoder@^1.3.0: 1120 | version "1.3.0" 1121 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" 1122 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1123 | dependencies: 1124 | safe-buffer "~5.2.0" 1125 | 1126 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1127 | version "6.0.1" 1128 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1129 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1130 | dependencies: 1131 | ansi-regex "^5.0.1" 1132 | 1133 | strip-json-comments@^3.1.1: 1134 | version "3.1.1" 1135 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1136 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1137 | 1138 | superstruct@^0.14.2: 1139 | version "0.14.2" 1140 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz" 1141 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 1142 | 1143 | superstruct@^1.0.3: 1144 | version "1.0.4" 1145 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz" 1146 | integrity sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ== 1147 | 1148 | text-encoding-utf-8@^1.0.2: 1149 | version "1.0.2" 1150 | resolved "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" 1151 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 1152 | 1153 | thread-stream@^2.0.0: 1154 | version "2.4.1" 1155 | resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz" 1156 | integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== 1157 | dependencies: 1158 | real-require "^0.2.0" 1159 | 1160 | "through@>=2.2.7 <3": 1161 | version "2.3.8" 1162 | resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1163 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1164 | 1165 | toformat@^2.0.0: 1166 | version "2.0.0" 1167 | resolved "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz" 1168 | integrity sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ== 1169 | 1170 | tr46@~0.0.3: 1171 | version "0.0.3" 1172 | resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" 1173 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1174 | 1175 | ts-node@^10.9.2: 1176 | version "10.9.2" 1177 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" 1178 | integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== 1179 | dependencies: 1180 | "@cspotcode/source-map-support" "^0.8.0" 1181 | "@tsconfig/node10" "^1.0.7" 1182 | "@tsconfig/node12" "^1.0.7" 1183 | "@tsconfig/node14" "^1.0.0" 1184 | "@tsconfig/node16" "^1.0.2" 1185 | acorn "^8.4.1" 1186 | acorn-walk "^8.1.1" 1187 | arg "^4.1.0" 1188 | create-require "^1.1.0" 1189 | diff "^4.0.1" 1190 | make-error "^1.1.1" 1191 | v8-compile-cache-lib "^3.0.1" 1192 | yn "3.1.1" 1193 | 1194 | typescript@^5.3.3: 1195 | version "5.4.5" 1196 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" 1197 | integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== 1198 | 1199 | undici-types@~5.26.4: 1200 | version "5.26.5" 1201 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" 1202 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1203 | 1204 | utf-8-validate@^5.0.2: 1205 | version "5.0.10" 1206 | resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" 1207 | integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== 1208 | dependencies: 1209 | node-gyp-build "^4.3.0" 1210 | 1211 | uuid@^8.3.2: 1212 | version "8.3.2" 1213 | resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" 1214 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1215 | 1216 | v8-compile-cache-lib@^3.0.1: 1217 | version "3.0.1" 1218 | resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" 1219 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 1220 | 1221 | webidl-conversions@^3.0.0: 1222 | version "3.0.1" 1223 | resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" 1224 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1225 | 1226 | whatwg-url@^5.0.0: 1227 | version "5.0.0" 1228 | resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" 1229 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1230 | dependencies: 1231 | tr46 "~0.0.3" 1232 | webidl-conversions "^3.0.0" 1233 | 1234 | wrap-ansi@^7.0.0: 1235 | version "7.0.0" 1236 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1237 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1238 | dependencies: 1239 | ansi-styles "^4.0.0" 1240 | string-width "^4.1.0" 1241 | strip-ansi "^6.0.0" 1242 | 1243 | wrappy@1: 1244 | version "1.0.2" 1245 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1246 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1247 | 1248 | ws@^7.4.5: 1249 | version "7.5.9" 1250 | resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" 1251 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 1252 | 1253 | ws@^8.5.0: 1254 | version "8.16.0" 1255 | resolved "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz" 1256 | integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== 1257 | 1258 | y18n@^5.0.5: 1259 | version "5.0.8" 1260 | resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 1261 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1262 | 1263 | yargs-parser@^21.1.1: 1264 | version "21.1.1" 1265 | resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" 1266 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 1267 | 1268 | yargs@^17.7.2: 1269 | version "17.7.2" 1270 | resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" 1271 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 1272 | dependencies: 1273 | cliui "^8.0.1" 1274 | escalade "^3.1.1" 1275 | get-caller-file "^2.0.5" 1276 | require-directory "^2.1.1" 1277 | string-width "^4.2.3" 1278 | y18n "^5.0.5" 1279 | yargs-parser "^21.1.1" 1280 | 1281 | yn@3.1.1: 1282 | version "3.1.1" 1283 | resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" 1284 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1285 | --------------------------------------------------------------------------------