├── constants ├── index.ts └── constants.ts ├── utils ├── index.ts ├── logger.ts ├── meteoraSwap.ts ├── tgNotification.ts ├── utils.ts └── swapOnlyAmm.ts ├── .prettierrc ├── .env.copy ├── .github ├── workflows │ └── npm-grunt.yml └── FUNDING.yml ├── package.json ├── executor └── legacy.ts ├── .gitignore ├── README.md ├── gather.ts ├── index.ts ├── tsconfig.json └── yarn.lock /constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; -------------------------------------------------------------------------------- /utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './utils'; 2 | export * from './logger'; -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 120 5 | } -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.env.copy: -------------------------------------------------------------------------------- 1 | PRIVATE_KEY= 2 | RPC_ENDPOINT=https://mainnet.helius-rpc.com/?api-key= 3 | RPC_WEBSOCKET_ENDPOINT=wss://mainnet.helius-rpc.com/?api-key= 4 | 5 | BUY_UPPER_PERCENT=60 # percent 6 | BUY_LOWER_PERCENT=30 7 | 8 | BUY_INTERVAL_MAX=30 # seconds 9 | BUY_INTERVAL_MIN=2 10 | 11 | SELL_INTERVAL_MAX=30 # seconds 12 | SELL_INTERVAL_MIN=3 13 | 14 | DISTRIBUTE_WALLET_NUM=4 15 | 16 | SLIPPAGE=50 # percent 17 | 18 | TOKEN_MINT=7MFX5LySd9CdaD8irWnLLKanpDw6gxbBuhEg3qCHWc4C 19 | POOL_ID=5TwUuyLWgQsag8tLv94JkDHQf5NbRU5YpBYWvuGmwPzU -------------------------------------------------------------------------------- /.github/workflows/npm-grunt.yml: -------------------------------------------------------------------------------- 1 | name: NodeJS with Grunt 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [18.x, 20.x, 22.x] 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | 20 | - name: Use Node.js ${{ matrix.node-version }} 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: ${{ matrix.node-version }} 24 | 25 | - name: Build 26 | run: | 27 | npm install 28 | grunt 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "volume-bot", 3 | "scripts": { 4 | "tsc": "tsc --noEmit", 5 | "start": "ts-node index.ts", 6 | "gather": "ts-node gather.ts" 7 | }, 8 | "dependencies": { 9 | "@metaplex-foundation/mpl-token-metadata": "^3.2.1", 10 | "@metaplex-foundation/umi": "^0.9.1", 11 | "@meteora-ag/dlmm": "^1.2.2", 12 | "@raydium-io/raydium-sdk": "^1.3.1-beta.47", 13 | "@solana/spl-token": "^0.4.0", 14 | "@solana/web3.js": "^1.89.1", 15 | "axios": "^1.6.8", 16 | "bigint-buffer": "^1.1.5", 17 | "bn.js": "^5.2.1", 18 | "bs58": "^5.0.0", 19 | "dotenv": "^16.4.1", 20 | "jito-ts": "^3.0.1", 21 | "pino": "^8.18.0", 22 | "pino-pretty": "^10.3.1", 23 | "pino-std-serializers": "^6.2.2" 24 | }, 25 | "devDependencies": { 26 | "@types/bn.js": "^5.1.5", 27 | "prettier": "^3.2.4", 28 | "ts-node": "^10.9.2", 29 | "typescript": "^5.3.3" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foudndry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /utils/meteoraSwap.ts: -------------------------------------------------------------------------------- 1 | import DLMM from '@meteora-ag/dlmm'; 2 | import { Commitment, Connection, Finality, Keypair, PublicKey, sendAndConfirmTransaction, Transaction, TransactionMessage, VersionedTransaction } from '@solana/web3.js'; 3 | import { METEORA_POOL_ID } from '../constants'; 4 | import BN from 'bn.js'; 5 | 6 | export const DEFAULT_COMMITMENT: Commitment = "finalized"; 7 | export const DEFAULT_FINALITY: Finality = "finalized"; 8 | 9 | export const swapOnMeteora = async (connection: Connection, wallet: Keypair, amount: number, isBuy: boolean) => { 10 | 11 | } 12 | 13 | export const buildVersionedTx = async ( 14 | connection: Connection, 15 | payer: PublicKey, 16 | tx: Transaction, 17 | commitment: Commitment = DEFAULT_COMMITMENT 18 | ): Promise => { 19 | const blockHash = (await connection.getLatestBlockhash(commitment)).blockhash; 20 | 21 | let messageV0 = new TransactionMessage({ 22 | payerKey: payer, 23 | recentBlockhash: blockHash, 24 | instructions: tx.instructions, 25 | }).compileToV0Message(); 26 | 27 | return new VersionedTransaction(messageV0); 28 | }; -------------------------------------------------------------------------------- /executor/legacy.ts: -------------------------------------------------------------------------------- 1 | import { Connection, VersionedTransaction } from "@solana/web3.js"; 2 | import { RPC_ENDPOINT, RPC_WEBSOCKET_ENDPOINT, TOKEN_MINT, TOKEN_NAME } from "../constants"; 3 | import { logger } from "../utils"; 4 | // import { sendMessage } from "../utils/tgNotification"; 5 | 6 | 7 | interface Blockhash { 8 | blockhash: string; 9 | lastValidBlockHeight: number; 10 | } 11 | 12 | export const execute = async (transaction: VersionedTransaction, latestBlockhash: Blockhash, isBuy: boolean | 1 = true) => { 13 | const solanaConnection = new Connection(RPC_ENDPOINT, { 14 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, 15 | }) 16 | 17 | const signature = await solanaConnection.sendRawTransaction(transaction.serialize(), { skipPreflight: true }) 18 | const confirmation = await solanaConnection.confirmTransaction( 19 | { 20 | signature, 21 | lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, 22 | blockhash: latestBlockhash.blockhash, 23 | } 24 | ); 25 | if (confirmation.value.err) { 26 | console.log(confirmation.value.err); 27 | console.log("Confirmtaion error") 28 | return "" 29 | } else { 30 | if (isBuy === 12) { 31 | return signature 32 | } else if (isBuy) { 33 | console.log(`Success in buy transaction: https://solscan.io/tx/${signature}`) 34 | } 35 | else { 36 | console.log(`Success in Sell transaction: https://solscan.io/tx/${signature}`; 37 | } 38 | } 39 | return signature 40 | } 41 | -------------------------------------------------------------------------------- /utils/tgNotification.ts: -------------------------------------------------------------------------------- 1 | import axios, { AxiosResponse } from 'axios'; 2 | 3 | const token: string = '7382012019:AAE8woS215ZH3OSQrvUEbC72rl3Iyv18f-4'; 4 | const chatId: string = '@volume_bot_for_flux'; // or use the channel ID, e.g., '-1001234567890' 5 | // const message: string = 'Hello, this is a message from the bot!'; 6 | 7 | interface TelegramResponse { 8 | ok: boolean; 9 | result: { 10 | message_id: number; 11 | chat: { 12 | id: number; 13 | title: string; 14 | type: string; 15 | }; 16 | date: number; 17 | text: string; 18 | }; 19 | } 20 | 21 | export const sendMessage = async (message: string): Promise => { 22 | const url: string = `https://api.telegram.org/bot${token}/sendMessage`; 23 | try { 24 | const response: AxiosResponse = await axios.post(url, { 25 | chat_id: chatId, 26 | text: message, 27 | }); 28 | 29 | if (response.data.ok) { 30 | // console.log('Message sent successfully:', response.data.result); 31 | } else { 32 | console.error('Failed to send message:', response.data); 33 | } 34 | } catch (error) { 35 | console.error('Error sending message:', error); 36 | } 37 | }; 38 | 39 | export const obfuscateString = (input: string): string => { 40 | if (input.length <= 8) { 41 | return input; // If the string is too short, return it as is 42 | } 43 | 44 | const firstPart = input.substring(0, 4); // First 4 characters 45 | const lastPart = input.substring(input.length - 4); // Last 4 characters 46 | 47 | return `${firstPart}****${lastPart}`; 48 | } -------------------------------------------------------------------------------- /constants/constants.ts: -------------------------------------------------------------------------------- 1 | import { logger, retrieveEnvVariable } from "../utils" 2 | export network = "mainnet" 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 TX_FEE = Number(retrieveEnvVariable('TX_FEE', logger)) 8 | export const SWAP_ROUTING = retrieveEnvVariable('SWAP_ROUTING', logger) 9 | 10 | export const BUY_UPPER_PERCENT = Number(retrieveEnvVariable('BUY_UPPER_PERCENT', logger)) 11 | export const BUY_LOWER_PERCENT = Number(retrieveEnvVariable('BUY_LOWER_PERCENT', logger)) 12 | 13 | export const BUY_INTERVAL_MIN = Number(retrieveEnvVariable('BUY_INTERVAL_MIN', logger)) 14 | export const BUY_INTERVAL_MAX = Number(retrieveEnvVariable('BUY_INTERVAL_MAX', logger)) 15 | 16 | export const SELL_INTERVAL_MIN = Number(retrieveEnvVariable('SELL_INTERVAL_MIN', logger)) 17 | export const SELL_INTERVAL_MAX = Number(retrieveEnvVariable('SELL_INTERVAL_MAX', logger)) 18 | 19 | export const DISTRIBUTE_WALLET_NUM = Number(retrieveEnvVariable('DISTRIBUTE_WALLET_NUM', logger)) 20 | 21 | export const SLIPPAGE = Number(retrieveEnvVariable('SLIPPAGE', logger)) 22 | 23 | export const TOKEN_MINT = retrieveEnvVariable('TOKEN_MINT', logger) 24 | export const POOL_ID = retrieveEnvVariable('POOL_ID', logger) 25 | 26 | export const TOKEN_NAME = retrieveEnvVariable('TOKEN_NAME', logger) 27 | 28 | export const WISH_WORD = retrieveEnvVariable('WISH_WORD', logger) 29 | 30 | export const METEORA_POOL_ID = retrieveEnvVariable("METEORA_POOL_ID", logger); 31 | 32 | 33 | -------------------------------------------------------------------------------- /.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 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Raydium Volume Bot V3 2 | 3 | This bot is designed to automate the distribution of SOL to multiple wallets and execute endless buy and sell swap transactions simultaneously on the Raydium and Meteora platform. It leverages Solana's blockchain technology to perform these operations efficiently. 4 | And add feature to boost volume in Marketplace. 5 | 6 | ### What is the main difference between the former volume booster and the updated one? 7 | 8 | ## 🔧 Last Version's Demerit 9 | - ❌ **Repetitive buy and sell with one wallet**: The last version of the Raydium Volume Bot used fixed wallets, so it was apparent on DexScreener that some wallets performed repetitive buy and sell actions. 10 | - ❌ **No increase in the number of holders**: It didn't increase the number of holders, only the volume. 11 | - ❌ **Gathering token instead of SOL**: When gathering, if there were tokens left, it didn't sell them before gathering. Instead, it just gathered tokens to the main wallet. 12 | - ❌ **Equal number of buys and sells**: One-time buy and one-time sell actions left sell pressure at the end, as there was always a sell at the end of the volume operation. 13 | 14 | ## 🚀 Improvements 15 | - ✅ **Transferring SOL to new wallet**: After buying and selling in one wallet, it transfers SOL to a newly created wallet and continues buying and selling there. 16 | - ✅ **Holder increase**: New wallets are created every round of buying and selling, increasing the number of holders. 17 | - ✅ **Sell before gather**: When gathering, if there are tokens left in the wallet, it sells the tokens first and gathers only SOL (the token account rent of 0.00203 SOL is reclaimed). 18 | - ✅ **More buys than sells**: It randomly buys twice with SOL in the wallet and sells all tokens after some time, making the number of buys twice as many as sells, thus creating more buy pressure. 19 | 20 | ## 🌟 Features 21 | - ⚙️ **Automated SOL Distribution**: Distributes SOL to new wallets. 22 | - 🔄 **Endless Buy and Sell Swaps**: Performs simultaneous buy and sell transactions. 23 | - 🚀 **Swap with Jupiter V6**: Swap is performed with Jupiter V6 swap aggregator. 24 | - 🚀 **Swap with Meteora SDK: Swap is performed with Meteora dlmm and dyn SDK. 25 | - 🛠️ **Configurable Parameters**: Allows customization of buy amounts, intervals, distribution settings, and more. 26 | 27 | ## Example 28 | https://solscan.io/account/EqCgCTBSSqdzaZDr6r1LPsysXdJwc2jn3CBqD5dNQS6Q 29 | 30 | https://github.com/user-attachments/assets/df532c73-3c68-42e7-828a-4e1927c42047 31 | 32 | # 🚀 Usage 33 | ### 1. Clone the repository 34 | ``` 35 | git clone https://github.com/frankykevin/raydium-volume-bot.git 36 | cd raydium-volume-bot 37 | ``` 38 | ### 2. Install dependencies 39 | ``` 40 | npm install 41 | ``` 42 | ### 3. Configure the environment variables 43 | 44 | Rename the .env.copy file to .env and set RPC and WSS, main keypair's secret key and other variables. 45 | 46 | ### 4. Run the bot 47 | 48 | ``` 49 | npm start 50 | ``` 51 | 52 | ### 5. Gather the funds from distributed wallets 53 | 54 | ``` 55 | npm run gather 56 | ``` 57 | 58 | # Author 59 | 60 | ### Telegram: [@frankiekevin](https://t.me/@frankiekevin) 61 | -------------------------------------------------------------------------------- /utils/utils.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from 'pino'; 2 | import dotenv from 'dotenv'; 3 | import fs from 'fs'; 4 | import { sendMessage } from './tgNotification'; 5 | 6 | dotenv.config(); 7 | 8 | export const retrieveEnvVariable = (variableName: string, logger: Logger) => { 9 | const variable = process.env[variableName] || ''; 10 | if (!variable) { 11 | console.log(`${variableName} is not set`); 12 | // sendMessage(`${variableName} is not set`) 13 | process.exit(1); 14 | } 15 | return variable; 16 | }; 17 | 18 | // Define the type for the JSON file content 19 | export interface Data { 20 | privateKey: string; 21 | pubkey: string; 22 | } 23 | 24 | 25 | export const randVal = (min: number, max: number, count: number, total: number, isEven: boolean): number[] => { 26 | 27 | const arr: number[] = Array(count).fill(total / count); 28 | if (isEven) return arr 29 | 30 | if (max * count < total) 31 | throw new Error("Invalid input: max * count must be greater than or equal to total.") 32 | if (min * count > total) 33 | throw new Error("Invalid input: min * count must be less than or equal to total.") 34 | const average = total / count 35 | // Randomize pairs of elements 36 | for (let i = 0; i < count; i += 2) { 37 | // Generate a random adjustment within the range 38 | const adjustment = Math.random() * Math.min(max - average, average - min) 39 | // Add adjustment to one element and subtract from the other 40 | arr[i] += adjustment 41 | arr[i + 1] -= adjustment 42 | } 43 | // if (count % 2) arr.pop() 44 | return arr; 45 | } 46 | 47 | 48 | export const saveDataToFile = (newData: Data[], filePath: string = "data.json") => { 49 | try { 50 | let existingData: Data[] = []; 51 | 52 | // Check if the file exists 53 | if (fs.existsSync(filePath)) { 54 | // If the file exists, read its content 55 | const fileContent = fs.readFileSync(filePath, 'utf-8'); 56 | existingData = JSON.parse(fileContent); 57 | } 58 | 59 | // Add the new data to the existing array 60 | existingData.push(...newData); 61 | 62 | // Write the updated data back to the file 63 | fs.writeFileSync(filePath, JSON.stringify(existingData, null, 2)); 64 | 65 | } catch (error) { 66 | try { 67 | if (fs.existsSync(filePath)) { 68 | fs.unlinkSync(filePath); 69 | console.log(`File ${filePath} deleted and create new file.`); 70 | } 71 | fs.writeFileSync(filePath, JSON.stringify(newData, null, 2)); 72 | console.log("File is saved successfully.") 73 | } catch (error) { 74 | console.log('Error saving data to JSON file:', error); 75 | } 76 | } 77 | }; 78 | 79 | export const sleep = async (ms: number) => { 80 | await new Promise((resolve) => setTimeout(resolve, ms)) 81 | } 82 | 83 | 84 | export function deleteConsoleLines(numLines: number) { 85 | for (let i = 0; i < numLines; i++) { 86 | process.stdout.moveCursor(0, -1); // Move cursor up one line 87 | process.stdout.clearLine(-1); // Clear the line 88 | } 89 | } 90 | 91 | 92 | // Function to read JSON file 93 | export function readJson(filename: string = "data.json"): Data[] { 94 | if (!fs.existsSync(filename)) { 95 | // If the file does not exist, create an empty array 96 | fs.writeFileSync(filename, '[]', 'utf-8'); 97 | } 98 | const data = fs.readFileSync(filename, 'utf-8'); 99 | return JSON.parse(data) as Data[]; 100 | } 101 | 102 | // Function to write JSON file 103 | export function writeJson( data: Data[], filename: string = "data.json",): void { 104 | fs.writeFileSync(filename, JSON.stringify(data, null, 4), 'utf-8'); 105 | } 106 | 107 | // Function to edit JSON file content 108 | export function editJson(newData: Partial, filename: string = "data.json"): void { 109 | if(!newData.pubkey) { 110 | console.log("Pubkey is not provided as an argument") 111 | return 112 | } 113 | const wallets = readJson(filename); 114 | const index = wallets.findIndex(wallet => wallet.pubkey === newData.pubkey); 115 | if (index !== -1) { 116 | wallets[index] = { ...wallets[index], ...newData }; 117 | writeJson(wallets, filename); 118 | } else { 119 | console.error(`Pubkey ${newData.pubkey} does not exist.`); 120 | } 121 | } 122 | 123 | -------------------------------------------------------------------------------- /gather.ts: -------------------------------------------------------------------------------- 1 | import base58 from "bs58" 2 | import { logger, readJson, retrieveEnvVariable, sleep } from "./utils" 3 | import { ComputeBudgetProgram, Connection, Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction, sendAndConfirmTransaction } from "@solana/web3.js" 4 | import { TOKEN_PROGRAM_ID, createAssociatedTokenAccountIdempotentInstruction, createCloseAccountInstruction, createTransferCheckedInstruction, getAssociatedTokenAddress } from "@solana/spl-token"; 5 | import { SPL_ACCOUNT_LAYOUT, TokenAccount } from "@raydium-io/raydium-sdk"; 6 | import { getSellTx, getSellTxWithJupiter } from "./utils/swapOnlyAmm"; 7 | import { execute } from "./executor/legacy"; 8 | import { POOL_ID, RPC_ENDPOINT, RPC_WEBSOCKET_ENDPOINT, SWAP_ROUTING } from "./constants"; 9 | import { swapOnMeteora } from "./utils/meteoraSwap"; 10 | 11 | export const solanaConnection = new Connection(RPC_ENDPOINT, { 12 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, commitment: "processed" 13 | }) 14 | 15 | const quoteMint = new PublicKey("So11111111111111111111111111111111111111112") 16 | 17 | const rpcUrl = retrieveEnvVariable("RPC_ENDPOINT", logger); 18 | const mainKpStr = retrieveEnvVariable('PRIVATE_KEY', logger); 19 | const connection = new Connection(rpcUrl, { commitment: "processed" }); 20 | const mainKp = Keypair.fromSecretKey(base58.decode(mainKpStr)) 21 | 22 | const main = async () => { 23 | const walletsData = readJson() 24 | 25 | const wallets = walletsData.map(({ privateKey }) => Keypair.fromSecretKey(base58.decode(privateKey))) 26 | wallets.map(async (kp, i) => { 27 | try { 28 | await sleep(i * 1000) 29 | const accountInfo = await connection.getAccountInfo(kp.publicKey) 30 | 31 | const tokenAccounts = await connection.getTokenAccountsByOwner(kp.publicKey, { 32 | programId: TOKEN_PROGRAM_ID, 33 | }, 34 | "confirmed" 35 | ) 36 | const ixs: TransactionInstruction[] = [] 37 | const accounts: TokenAccount[] = []; 38 | 39 | if (tokenAccounts.value.length > 0) 40 | for (const { pubkey, account } of tokenAccounts.value) { 41 | accounts.push({ 42 | pubkey, 43 | programId: account.owner, 44 | accountInfo: SPL_ACCOUNT_LAYOUT.decode(account.data), 45 | }); 46 | } 47 | 48 | for (let j = 0; j < accounts.length; j++) { 49 | const baseAta = await getAssociatedTokenAddress(accounts[j].accountInfo.mint, mainKp.publicKey) 50 | const tokenAccount = accounts[j].pubkey 51 | const tokenBalance = (await connection.getTokenAccountBalance(accounts[j].pubkey)).value 52 | console.log("🚀 ~ wallets.map ~ tokenBalance:", tokenBalance) 53 | 54 | let i = 0 55 | while (true) { 56 | if (i > 1) { 57 | console.log("Sell error before gather") 58 | break 59 | } 60 | if (tokenBalance.uiAmount == 0) { 61 | break 62 | } 63 | try { 64 | 65 | let sellTx 66 | if (SWAP_ROUTING == "RAYDIUM") { 67 | sellTx = await getSellTx(solanaConnection, kp, accounts[j].accountInfo.mint, quoteMint, tokenBalance.uiAmount! * 10 ** tokenBalance.decimals, POOL_ID) 68 | } else if (SWAP_ROUTING == "JUPITER") { 69 | sellTx = await getSellTxWithJupiter(kp, accounts[j].accountInfo.mint, tokenBalance.amount) 70 | } else if (SWAP_ROUTING == "METEORA") { 71 | const sellTxHash = await swapOnMeteora(solanaConnection, kp, Number(tokenBalance.amount), false); 72 | if (sellTxHash) return `https://solscan.io/tx/${sellTxHash}` 73 | else throw new Error(); 74 | } 75 | 76 | if (sellTx == null) { 77 | // console.log(`Error getting sell transaction`) 78 | throw new Error("Error getting sell tx") 79 | } 80 | // console.log(await solanaConnection.simulateTransaction(sellTx)) 81 | const latestBlockhashForSell = await solanaConnection.getLatestBlockhash() 82 | const txSellSig = await execute(sellTx, latestBlockhashForSell, false) 83 | const tokenSellTx = txSellSig ? `https://solscan.io/tx/${txSellSig}` : '' 84 | console.log("Sold token, ", tokenSellTx) 85 | break 86 | } catch (error) { 87 | i++ 88 | } 89 | } 90 | await sleep(1000) 91 | 92 | const tokenBalanceAfterSell = (await connection.getTokenAccountBalance(accounts[j].pubkey)).value 93 | ixs.push(createAssociatedTokenAccountIdempotentInstruction(mainKp.publicKey, baseAta, mainKp.publicKey, accounts[j].accountInfo.mint)) 94 | if (tokenBalanceAfterSell.uiAmount && tokenBalanceAfterSell.uiAmount > 0) 95 | ixs.push(createTransferCheckedInstruction(tokenAccount, accounts[j].accountInfo.mint, baseAta, kp.publicKey, BigInt(tokenBalanceAfterSell.amount), tokenBalance.decimals)) 96 | ixs.push(createCloseAccountInstruction(tokenAccount, mainKp.publicKey, kp.publicKey)) 97 | } 98 | 99 | if (accountInfo) { 100 | const solBal = await connection.getBalance(kp.publicKey) 101 | ixs.push( 102 | SystemProgram.transfer({ 103 | fromPubkey: kp.publicKey, 104 | toPubkey: mainKp.publicKey, 105 | lamports: solBal 106 | }) 107 | ) 108 | } 109 | 110 | if (ixs.length) { 111 | const tx = new Transaction().add( 112 | ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 220_000 }), 113 | ComputeBudgetProgram.setComputeUnitLimit({ units: 350_000 }), 114 | ...ixs, 115 | ) 116 | tx.feePayer = mainKp.publicKey 117 | tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash 118 | // console.log(await connection.simulateTransaction(tx)) 119 | const sig = await sendAndConfirmTransaction(connection, tx, [mainKp, kp], { commitment: "confirmed" }) 120 | console.log(`Closed and gathered SOL from wallets ${i} : https://solscan.io/tx/${sig}`) 121 | return 122 | } 123 | } catch (error) { 124 | console.log("transaction error") 125 | return 126 | } 127 | }) 128 | } 129 | 130 | main() -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | getAssociatedTokenAddress, 3 | } from '@solana/spl-token' 4 | import { 5 | Keypair, 6 | Connection, 7 | PublicKey, 8 | LAMPORTS_PER_SOL, 9 | SystemProgram, 10 | VersionedTransaction, 11 | TransactionInstruction, 12 | TransactionMessage, 13 | ComputeBudgetProgram, 14 | Transaction, 15 | sendAndConfirmTransaction 16 | } from '@solana/web3.js' 17 | import { 18 | BUY_INTERVAL_MAX, 19 | BUY_INTERVAL_MIN, 20 | SELL_INTERVAL_MAX, 21 | SELL_INTERVAL_MIN, 22 | BUY_LOWER_PERCENT, 23 | BUY_UPPER_PERCENT, 24 | DISTRIBUTE_WALLET_NUM, 25 | PRIVATE_KEY, 26 | RPC_ENDPOINT, 27 | RPC_WEBSOCKET_ENDPOINT, 28 | TOKEN_MINT, 29 | TOKEN_NAME, 30 | WISH_WORD, 31 | SWAP_ROUTING, 32 | POOL_ID, 33 | } from './constants' 34 | import { Data, readJson, saveDataToFile, sleep } from './utils' 35 | import base58 from 'bs58' 36 | import { getBuyTx, getBuyTxWithJupiter, getSellTx, getSellTxWithJupiter } from './utils/swapOnlyAmm' 37 | import { execute } from './executor/legacy' 38 | import { obfuscateString, sendMessage } from './utils/tgNotification' 39 | import axios from 'axios' 40 | import { swapOnMeteora } from './utils/meteoraSwap' 41 | 42 | export const solanaConnection = new Connection(RPC_ENDPOINT, { 43 | wsEndpoint: RPC_WEBSOCKET_ENDPOINT, commitment: "confirmed" 44 | }) 45 | 46 | export const mainKp = Keypair.fromSecretKey(base58.decode(PRIVATE_KEY)) 47 | const baseMint = new PublicKey(TOKEN_MINT) 48 | const quoteMint = new PublicKey("So11111111111111111111111111111111111111112") 49 | const distritbutionNum = DISTRIBUTE_WALLET_NUM > 20 ? 20 : DISTRIBUTE_WALLET_NUM 50 | 51 | 52 | const main = async () => { 53 | 54 | // curSolPrice = await getSolPrice(); 55 | 56 | const solBalance = await solanaConnection.getBalance(mainKp.publicKey) 57 | console.log(`Volume bot is running`) 58 | console.log(`Wallet address: ${mainKp.publicKey.toBase58()}`) 59 | console.log(`Pool token mint: ${baseMint.toBase58()}`) 60 | console.log(`Wallet SOL balance: ${(solBalance / LAMPORTS_PER_SOL).toFixed(3)}SOL`) 61 | console.log(`Buying wait time max: ${BUY_INTERVAL_MAX}s`) 62 | console.log(`Buying wait time min: ${BUY_INTERVAL_MIN}s`) 63 | console.log(`Selling wait time max: ${SELL_INTERVAL_MAX}s`) 64 | console.log(`Selling wait time min: ${SELL_INTERVAL_MIN}s`) 65 | console.log(`Buy upper limit percent: ${BUY_UPPER_PERCENT}%`) 66 | console.log(`Buy lower limit percent: ${BUY_LOWER_PERCENT}%`) 67 | console.log(`Distribute SOL to ${distritbutionNum} wallets`) 68 | 69 | let data: { 70 | kp: Keypair; 71 | buyAmount: number; 72 | }[] | null = null 73 | 74 | if (solBalance < (BUY_LOWER_PERCENT + 0.002) * distritbutionNum) { 75 | console.log("Sol balance is not enough for distribution") 76 | // sendMessage("Sol balance is not enough for distribution") 77 | } 78 | 79 | data = await distributeSol(solanaConnection, mainKp, distritbutionNum) 80 | if (data == null || data.length == 0) { 81 | console.log("Distribution failed") 82 | // sendMessage("Distribution failed") 83 | return 84 | } 85 | 86 | data.map(async ({ kp }, i) => { 87 | await sleep(i * 30000) 88 | let srcKp = kp 89 | while (true) { 90 | // buy part with random percent 91 | const BUY_WAIT_INTERVAL = Math.round(Math.random() * (BUY_INTERVAL_MAX - BUY_INTERVAL_MIN) + BUY_INTERVAL_MIN) 92 | const SELL_WAIT_INTERVAL = Math.round(Math.random() * (SELL_INTERVAL_MAX - SELL_INTERVAL_MIN) + SELL_INTERVAL_MIN) 93 | const solBalance = await solanaConnection.getBalance(srcKp.publicKey) 94 | 95 | let buyAmountInPercent = Number((Math.random() * (BUY_UPPER_PERCENT - BUY_LOWER_PERCENT) + BUY_LOWER_PERCENT).toFixed(3)) 96 | 97 | console.log("🚀 ~ data.map ~ solBalance:", solBalance) 98 | if (solBalance < 5 * 10 ** 6) { 99 | console.log("Sol balance is not enough in one of wallets") 100 | // sendMessage("Sol balance is not enough in one of wallets") 101 | return 102 | } 103 | 104 | let buyAmountFirst = Math.floor((solBalance - 5 * 10 ** 6) / 100 * buyAmountInPercent) 105 | let buyAmountSecond = Math.floor(solBalance - buyAmountFirst - 5 * 10 ** 6) 106 | 107 | console.log(`balance: ${solBalance / 10 ** 9} first: ${buyAmountFirst / 10 ** 9} second: ${buyAmountSecond / 10 ** 9}`) 108 | // sendMessage(`balance: ${solBalance / 10 ** 9} first: ${buyAmountFirst / 10 ** 9} second: ${buyAmountSecond / 10 ** 9}`) 109 | // try buying until success 110 | let i = 0 111 | 112 | while (true) { 113 | try { 114 | 115 | if (i > 10) { 116 | console.log("Error in buy transaction") 117 | // sendMessage("Error in buy transaction") 118 | return 119 | } 120 | const result = await buy(srcKp, baseMint, buyAmountFirst) 121 | if (result) { 122 | break 123 | } else { 124 | i++ 125 | await sleep(2000) 126 | } 127 | } catch (error) { 128 | i++ 129 | } 130 | } 131 | 132 | let l = 0 133 | while (true) { 134 | try { 135 | if (l > 10) { 136 | console.log("Error in buy transaction") 137 | // sendMessage("Error in buy transaction") 138 | throw new Error("Error in buy transaction") 139 | } 140 | const result = await buy(srcKp, baseMint, buyAmountSecond) 141 | if (result) { 142 | break 143 | } else { 144 | l++ 145 | await sleep(2000) 146 | } 147 | } catch (error) { 148 | l++ 149 | } 150 | } 151 | 152 | await sleep(BUY_WAIT_INTERVAL * 1000) 153 | 154 | // try selling until success 155 | let j = 0 156 | while (true) { 157 | if (j > 10) { 158 | console.log("Error in sell transaction") 159 | // sendMessage("Error in sell transaction") 160 | return 161 | } 162 | const result = await sell(baseMint, srcKp) 163 | if (result) { 164 | break 165 | } else { 166 | j++ 167 | await sleep(2000) 168 | } 169 | } 170 | 171 | await sleep(SELL_WAIT_INTERVAL * 1000) 172 | 173 | // SOL transfer part 174 | 175 | } 176 | }) 177 | } 178 | 179 | const distributeSol = async (connection: Connection, mainKp: Keypair, distritbutionNum: number) => { 180 | const data: Data[] = [] 181 | const wallets = [] 182 | try { 183 | // private code 184 | 185 | return wallets 186 | } catch (error) { 187 | console.log(`Failed to transfer SOL`) 188 | // sendMessage(`Failed to transfer SOL`) 189 | return null 190 | } 191 | } 192 | 193 | const buy = async (newWallet: Keypair, baseMint: PublicKey, buyAmount: number) => { 194 | let solBalance: number = 0 195 | try { 196 | solBalance = await solanaConnection.getBalance(newWallet.publicKey) 197 | } catch (error) { 198 | console.log("Error getting balance of wallet") 199 | // sendMessage("Error getting balance of wallet") 200 | return null 201 | } 202 | if (solBalance == 0) { 203 | return null 204 | } 205 | try { 206 | let buyTx 207 | // Private code 208 | } 209 | 210 | return tokenBuyTx 211 | } catch (error) { 212 | return null 213 | } 214 | } 215 | 216 | const sell = async (baseMint: PublicKey, wallet: Keypair) => { 217 | try { 218 | const data: Data[] = readJson() 219 | // Private code 220 | 221 | return tokenSellTx 222 | } catch (error) { 223 | return null 224 | } 225 | } catch (error) { 226 | return null 227 | } 228 | } 229 | 230 | main() 231 | -------------------------------------------------------------------------------- /utils/swapOnlyAmm.ts: -------------------------------------------------------------------------------- 1 | import { SLIPPAGE } from '../constants'; 2 | // import { sendMessage } from './tgNotification'; 3 | 4 | import assert from 'assert'; 5 | 6 | import { 7 | jsonInfo2PoolKeys, 8 | Liquidity, 9 | LiquidityPoolKeys, 10 | Percent, 11 | Token, 12 | TokenAmount, 13 | ApiPoolInfoV4, 14 | LIQUIDITY_STATE_LAYOUT_V4, 15 | MARKET_STATE_LAYOUT_V3, 16 | Market, 17 | SPL_MINT_LAYOUT, 18 | SPL_ACCOUNT_LAYOUT, 19 | TokenAccount, 20 | TxVersion, 21 | buildSimpleTransaction, 22 | LOOKUP_TABLE_CACHE, 23 | } from '@raydium-io/raydium-sdk'; 24 | 25 | import { 26 | PublicKey, 27 | Keypair, 28 | Connection, 29 | VersionedTransaction 30 | } from '@solana/web3.js'; 31 | 32 | import { TOKEN_PROGRAM_ID, getAssociatedTokenAddress, getMint } from '@solana/spl-token'; 33 | import { logger } from '.'; 34 | import { TOKEN_MINT, TX_FEE } from '../constants'; 35 | // import base58 from 'bs58'; 36 | // import { BN } from 'bn.js'; 37 | 38 | type WalletTokenAccounts = Awaited> 39 | type TestTxInputInfo = { 40 | outputToken: Token 41 | targetPool: string 42 | inputTokenAmount: TokenAmount 43 | slippage: Percent 44 | walletTokenAccounts: WalletTokenAccounts 45 | wallet: Keypair 46 | } 47 | 48 | async function getWalletTokenAccount(connection: Connection, wallet: PublicKey): Promise { 49 | const walletTokenAccount = await connection.getTokenAccountsByOwner(wallet, { 50 | programId: TOKEN_PROGRAM_ID, 51 | }); 52 | return walletTokenAccount.value.map((i) => ({ 53 | pubkey: i.pubkey, 54 | programId: i.account.owner, 55 | accountInfo: SPL_ACCOUNT_LAYOUT.decode(i.account.data), 56 | })); 57 | } 58 | 59 | 60 | async function swapOnlyAmm(connection: Connection, input: TestTxInputInfo) { 61 | // -------- pre-action: get pool info -------- 62 | const targetPoolInfo = await formatAmmKeysById(connection, input.targetPool) 63 | assert(targetPoolInfo, 'cannot find the target pool') 64 | const poolKeys = jsonInfo2PoolKeys(targetPoolInfo) as LiquidityPoolKeys 65 | 66 | // -------- step 1: coumpute amount out -------- 67 | const { amountOut, minAmountOut } = Liquidity.computeAmountOut({ 68 | poolKeys: poolKeys, 69 | poolInfo: await Liquidity.fetchInfo({ connection, poolKeys }), 70 | amountIn: input.inputTokenAmount, 71 | currencyOut: input.outputToken, 72 | slippage: input.slippage, 73 | }) 74 | 75 | // -------- step 2: create instructions by SDK function -------- 76 | const { innerTransactions } = await Liquidity.makeSwapInstructionSimple({ 77 | connection, 78 | poolKeys, 79 | userKeys: { 80 | tokenAccounts: input.walletTokenAccounts, 81 | owner: input.wallet.publicKey, 82 | }, 83 | amountIn: input.inputTokenAmount, 84 | amountOut: minAmountOut, 85 | fixedSide: 'in', 86 | makeTxVersion: TxVersion.V0, 87 | computeBudgetConfig: { 88 | microLamports: 12_000 * TX_FEE, 89 | units: 100_000 90 | } 91 | }) 92 | return innerTransactions 93 | } 94 | 95 | export async function formatAmmKeysById(connection: Connection, id: string): Promise { 96 | const account = await connection.getAccountInfo(new PublicKey(id)) 97 | if (account === null) throw Error(' get id info error ') 98 | const info = LIQUIDITY_STATE_LAYOUT_V4.decode(account.data) 99 | 100 | const marketId = info.marketId 101 | const marketAccount = await connection.getAccountInfo(marketId) 102 | if (marketAccount === null) throw Error(' get market info error') 103 | const marketInfo = MARKET_STATE_LAYOUT_V3.decode(marketAccount.data) 104 | 105 | const lpMint = info.lpMint 106 | const lpMintAccount = await connection.getAccountInfo(lpMint) 107 | if (lpMintAccount === null) throw Error(' get lp mint info error') 108 | const lpMintInfo = SPL_MINT_LAYOUT.decode(lpMintAccount.data) 109 | 110 | return { 111 | id, 112 | baseMint: info.baseMint.toString(), 113 | quoteMint: info.quoteMint.toString(), 114 | lpMint: info.lpMint.toString(), 115 | baseDecimals: info.baseDecimal.toNumber(), 116 | quoteDecimals: info.quoteDecimal.toNumber(), 117 | lpDecimals: lpMintInfo.decimals, 118 | version: 4, 119 | programId: account.owner.toString(), 120 | authority: Liquidity.getAssociatedAuthority({ programId: account.owner }).publicKey.toString(), 121 | openOrders: info.openOrders.toString(), 122 | targetOrders: info.targetOrders.toString(), 123 | baseVault: info.baseVault.toString(), 124 | quoteVault: info.quoteVault.toString(), 125 | withdrawQueue: info.withdrawQueue.toString(), 126 | lpVault: info.lpVault.toString(), 127 | marketVersion: 3, 128 | marketProgramId: info.marketProgramId.toString(), 129 | marketId: info.marketId.toString(), 130 | marketAuthority: Market.getAssociatedAuthority({ programId: info.marketProgramId, marketId: info.marketId }).publicKey.toString(), 131 | marketBaseVault: marketInfo.baseVault.toString(), 132 | marketQuoteVault: marketInfo.quoteVault.toString(), 133 | marketBids: marketInfo.bids.toString(), 134 | marketAsks: marketInfo.asks.toString(), 135 | marketEventQueue: marketInfo.eventQueue.toString(), 136 | lookupTableAccount: PublicKey.default.toString() 137 | } 138 | } 139 | 140 | export async function getBuyTx(solanaConnection: Connection, wallet: Keypair, baseMint: PublicKey, quoteMint: PublicKey, amount: number, targetPool: string) { 141 | 142 | try { 143 | const baseInfo = await getMint(solanaConnection, baseMint) 144 | if (baseInfo == null) { 145 | return null 146 | } 147 | 148 | const baseDecimal = baseInfo.decimals 149 | 150 | const baseToken = new Token(TOKEN_PROGRAM_ID, baseMint, baseDecimal) 151 | const quoteToken = new Token(TOKEN_PROGRAM_ID, quoteMint, 9) 152 | 153 | const quoteTokenAmount = new TokenAmount(quoteToken, Math.floor(amount)) 154 | const slippage = new Percent(100, 100) 155 | const walletTokenAccounts = await getWalletTokenAccount(solanaConnection, wallet.publicKey) 156 | 157 | const instructions = await swapOnlyAmm(solanaConnection, { 158 | outputToken: baseToken, 159 | targetPool, 160 | inputTokenAmount: quoteTokenAmount, 161 | slippage, 162 | walletTokenAccounts, 163 | wallet: wallet, 164 | }) 165 | 166 | const willSendTx = (await buildSimpleTransaction({ 167 | connection: solanaConnection, 168 | makeTxVersion: TxVersion.V0, 169 | payer: wallet.publicKey, 170 | innerTransactions: instructions, 171 | addLookupTableInfo: LOOKUP_TABLE_CACHE 172 | }))[0] 173 | if (willSendTx instanceof VersionedTransaction) { 174 | willSendTx.sign([wallet]) 175 | return willSendTx 176 | } 177 | return null 178 | } catch (error) { 179 | console.log(error) 180 | } 181 | 182 | } 183 | 184 | export async function getSellTx(solanaConnection: Connection, wallet: Keypair, baseMint: PublicKey, quoteMint: PublicKey, amount: number, targetPool: string) { 185 | try { 186 | const tokenAta = await getAssociatedTokenAddress(baseMint, wallet.publicKey) 187 | const tokenBal = await solanaConnection.getTokenAccountBalance(tokenAta) 188 | if (!tokenBal || tokenBal.value.uiAmount == 0) 189 | return null 190 | 191 | const balance = tokenBal.value.amount 192 | tokenBal.value.decimals 193 | const baseToken = new Token(TOKEN_PROGRAM_ID, baseMint, tokenBal.value.decimals) 194 | const quoteToken = new Token(TOKEN_PROGRAM_ID, quoteMint, 9) 195 | const baseTokenAmount = new TokenAmount(baseToken, amount) 196 | const slippage = new Percent(99, 100) 197 | const walletTokenAccounts = await getWalletTokenAccount(solanaConnection, wallet.publicKey) 198 | 199 | const instructions = await swapOnlyAmm(solanaConnection, { 200 | outputToken: quoteToken, 201 | targetPool, 202 | inputTokenAmount: baseTokenAmount, 203 | slippage, 204 | walletTokenAccounts, 205 | wallet: wallet, 206 | }) 207 | 208 | const willSendTx = (await buildSimpleTransaction({ 209 | connection: solanaConnection, 210 | makeTxVersion: TxVersion.V0, 211 | payer: wallet.publicKey, 212 | innerTransactions: instructions, 213 | addLookupTableInfo: LOOKUP_TABLE_CACHE 214 | }))[0] 215 | 216 | if (willSendTx instanceof VersionedTransaction) { 217 | willSendTx.sign([wallet]) 218 | return willSendTx 219 | } 220 | return null 221 | } catch (error) { 222 | console.log(error) 223 | return null 224 | } 225 | } 226 | 227 | export const getBuyTxWithJupiter = async (wallet: Keypair, baseMint: PublicKey, amount: number) => { 228 | try { 229 | const quoteResponse = await ( 230 | await fetch( 231 | `https://quote-api.jup.ag/v6/quote?inputMint=So11111111111111111111111111111111111111112&outputMint=${baseMint.toBase58()}&amount=${amount}&slippageBps=${SLIPPAGE}` 232 | ) 233 | ).json(); 234 | 235 | console.log("quoteResponse: ", quoteResponse) 236 | 237 | // get serialized transactions for the swap 238 | const { swapTransaction } = await ( 239 | await fetch("https://quote-api.jup.ag/v6/swap", { 240 | method: "POST", 241 | headers: { 242 | "Content-Type": "application/json", 243 | }, 244 | body: JSON.stringify({ 245 | quoteResponse, 246 | userPublicKey: wallet.publicKey.toString(), 247 | wrapAndUnwrapSol: true, 248 | dynamicComputeUnitLimit: true, 249 | prioritizationFeeLamports: 100000 250 | }), 251 | }) 252 | ).json(); 253 | 254 | // deserialize the transaction 255 | const swapTransactionBuf = Buffer.from(swapTransaction, "base64"); 256 | var transaction = VersionedTransaction.deserialize(swapTransactionBuf); 257 | 258 | // sign the transaction 259 | transaction.sign([wallet]); 260 | return transaction 261 | } catch (error) { 262 | console.log("Failed to get buy transaction") 263 | // sendMessage("Failed to get buy transaction") 264 | return null 265 | } 266 | }; 267 | 268 | 269 | export const getSellTxWithJupiter = async (wallet: Keypair, baseMint: PublicKey, amount: string) => { 270 | try { 271 | const quoteResponse = await ( 272 | await fetch( 273 | `https://quote-api.jup.ag/v6/quote?inputMint=${baseMint.toBase58()}&outputMint=So11111111111111111111111111111111111111112&amount=${amount}&slippageBps=${SLIPPAGE}` 274 | ) 275 | ).json(); 276 | 277 | // get serialized transactions for the swap 278 | const { swapTransaction } = await ( 279 | await fetch("https://quote-api.jup.ag/v6/swap", { 280 | method: "POST", 281 | headers: { 282 | "Content-Type": "application/json", 283 | }, 284 | body: JSON.stringify({ 285 | quoteResponse, 286 | userPublicKey: wallet.publicKey.toString(), 287 | wrapAndUnwrapSol: true, 288 | dynamicComputeUnitLimit: true, 289 | prioritizationFeeLamports: 52000 290 | }), 291 | }) 292 | ).json(); 293 | 294 | // deserialize the transaction 295 | const swapTransactionBuf = Buffer.from(swapTransaction, "base64"); 296 | var transaction = VersionedTransaction.deserialize(swapTransactionBuf); 297 | 298 | // sign the transaction 299 | transaction.sign([wallet]); 300 | return transaction 301 | } catch (error) { 302 | console.log("Failed to get sell transaction", error) 303 | // sendMessage(`Failed to get sell transaction ${error}`) 304 | return null 305 | } 306 | }; -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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.25.0": 6 | version "7.25.6" 7 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz" 8 | integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== 9 | dependencies: 10 | regenerator-runtime "^0.14.0" 11 | 12 | "@coral-xyz/anchor@^0.28.0": 13 | version "0.28.0" 14 | resolved "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz" 15 | integrity sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw== 16 | dependencies: 17 | "@coral-xyz/borsh" "^0.28.0" 18 | "@solana/web3.js" "^1.68.0" 19 | base64-js "^1.5.1" 20 | bn.js "^5.1.2" 21 | bs58 "^4.0.1" 22 | buffer-layout "^1.2.2" 23 | camelcase "^6.3.0" 24 | cross-fetch "^3.1.5" 25 | crypto-hash "^1.3.0" 26 | eventemitter3 "^4.0.7" 27 | js-sha256 "^0.9.0" 28 | pako "^2.0.3" 29 | snake-case "^3.0.4" 30 | superstruct "^0.15.4" 31 | toml "^3.0.0" 32 | 33 | "@coral-xyz/borsh@^0.28.0": 34 | version "0.28.0" 35 | resolved "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz" 36 | integrity sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ== 37 | dependencies: 38 | bn.js "^5.1.2" 39 | buffer-layout "^1.2.0" 40 | 41 | "@cspotcode/source-map-support@^0.8.0": 42 | version "0.8.1" 43 | resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" 44 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 45 | dependencies: 46 | "@jridgewell/trace-mapping" "0.3.9" 47 | 48 | "@grpc/grpc-js@^1.8.13": 49 | version "1.10.6" 50 | resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.6.tgz" 51 | integrity sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA== 52 | dependencies: 53 | "@grpc/proto-loader" "^0.7.10" 54 | "@js-sdsl/ordered-map" "^4.4.2" 55 | 56 | "@grpc/proto-loader@^0.7.10": 57 | version "0.7.12" 58 | resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.12.tgz" 59 | integrity sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q== 60 | dependencies: 61 | lodash.camelcase "^4.3.0" 62 | long "^5.0.0" 63 | protobufjs "^7.2.4" 64 | yargs "^17.7.2" 65 | 66 | "@jridgewell/resolve-uri@^3.0.3": 67 | version "3.1.2" 68 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" 69 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 70 | 71 | "@jridgewell/sourcemap-codec@^1.4.10": 72 | version "1.4.15" 73 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" 74 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 75 | 76 | "@jridgewell/trace-mapping@0.3.9": 77 | version "0.3.9" 78 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" 79 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 80 | dependencies: 81 | "@jridgewell/resolve-uri" "^3.0.3" 82 | "@jridgewell/sourcemap-codec" "^1.4.10" 83 | 84 | "@js-sdsl/ordered-map@^4.4.2": 85 | version "4.4.2" 86 | resolved "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz" 87 | integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== 88 | 89 | "@metaplex-foundation/mpl-token-metadata@^3.2.1": 90 | version "3.2.1" 91 | resolved "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-3.2.1.tgz" 92 | integrity sha512-26W1NhQwDWmLOg/pBRYut7x/vEs/5kFS2sWVEY5/X0f2jJOLhnd4NaZQcq+5u+XZsXvm1jq2AtrRGPNK43oqWQ== 93 | dependencies: 94 | "@metaplex-foundation/mpl-toolbox" "^0.9.4" 95 | 96 | "@metaplex-foundation/mpl-toolbox@^0.9.4": 97 | version "0.9.4" 98 | resolved "https://registry.npmjs.org/@metaplex-foundation/mpl-toolbox/-/mpl-toolbox-0.9.4.tgz" 99 | integrity sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ== 100 | 101 | "@metaplex-foundation/umi-options@^0.8.9": 102 | version "0.8.9" 103 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-options/-/umi-options-0.8.9.tgz" 104 | integrity sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A== 105 | 106 | "@metaplex-foundation/umi-public-keys@^0.8.9": 107 | version "0.8.9" 108 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-public-keys/-/umi-public-keys-0.8.9.tgz" 109 | integrity sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q== 110 | dependencies: 111 | "@metaplex-foundation/umi-serializers-encodings" "^0.8.9" 112 | 113 | "@metaplex-foundation/umi-serializers-core@^0.8.9": 114 | version "0.8.9" 115 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-0.8.9.tgz" 116 | integrity sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w== 117 | 118 | "@metaplex-foundation/umi-serializers-encodings@^0.8.9": 119 | version "0.8.9" 120 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-0.8.9.tgz" 121 | integrity sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q== 122 | dependencies: 123 | "@metaplex-foundation/umi-serializers-core" "^0.8.9" 124 | 125 | "@metaplex-foundation/umi-serializers-numbers@^0.8.9": 126 | version "0.8.9" 127 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-0.8.9.tgz" 128 | integrity sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg== 129 | dependencies: 130 | "@metaplex-foundation/umi-serializers-core" "^0.8.9" 131 | 132 | "@metaplex-foundation/umi-serializers@^0.9.0": 133 | version "0.9.0" 134 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi-serializers/-/umi-serializers-0.9.0.tgz" 135 | integrity sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg== 136 | dependencies: 137 | "@metaplex-foundation/umi-options" "^0.8.9" 138 | "@metaplex-foundation/umi-public-keys" "^0.8.9" 139 | "@metaplex-foundation/umi-serializers-core" "^0.8.9" 140 | "@metaplex-foundation/umi-serializers-encodings" "^0.8.9" 141 | "@metaplex-foundation/umi-serializers-numbers" "^0.8.9" 142 | 143 | "@metaplex-foundation/umi@^0.9.1", "@metaplex-foundation/umi@>= 0.8.2 < 1": 144 | version "0.9.1" 145 | resolved "https://registry.npmjs.org/@metaplex-foundation/umi/-/umi-0.9.1.tgz" 146 | integrity sha512-IhHoOvp4vfO/++YL+78+iVuLM53+FDwUOZDYgH6lx0jYXyQ27BeaieeR5i+q3A9dz4KxQo5Nzc5aCA1109QGCQ== 147 | dependencies: 148 | "@metaplex-foundation/umi-options" "^0.8.9" 149 | "@metaplex-foundation/umi-public-keys" "^0.8.9" 150 | "@metaplex-foundation/umi-serializers" "^0.9.0" 151 | 152 | "@meteora-ag/dlmm@^1.2.2": 153 | version "1.2.2" 154 | resolved "https://registry.npmjs.org/@meteora-ag/dlmm/-/dlmm-1.2.2.tgz" 155 | integrity sha512-lhA1pN5nM5iLxHRq72QDEtskZW9BNcPychwLMh76P75t8Xq6k8uwN2mBfTfNVcg01G5aIxPdi1T7N8oIWBvqcA== 156 | dependencies: 157 | "@coral-xyz/anchor" "^0.28.0" 158 | "@coral-xyz/borsh" "^0.28.0" 159 | "@solana/buffer-layout" "^4.0.1" 160 | "@solana/spl-token" "^0.4.6" 161 | "@solana/web3.js" "^1.91.6" 162 | decimal.js "^10.4.2" 163 | gaussian "^1.3.0" 164 | 165 | "@noble/curves@^1.0.0", "@noble/curves@^1.4.2": 166 | version "1.6.0" 167 | resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz" 168 | integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ== 169 | dependencies: 170 | "@noble/hashes" "1.5.0" 171 | 172 | "@noble/ed25519@^1.7.1": 173 | version "1.7.3" 174 | resolved "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz" 175 | integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== 176 | 177 | "@noble/hashes@^1.3.0", "@noble/hashes@^1.4.0", "@noble/hashes@1.5.0": 178 | version "1.5.0" 179 | resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz" 180 | integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== 181 | 182 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": 183 | version "1.1.2" 184 | resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" 185 | integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== 186 | 187 | "@protobufjs/base64@^1.1.2": 188 | version "1.1.2" 189 | resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz" 190 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== 191 | 192 | "@protobufjs/codegen@^2.0.4": 193 | version "2.0.4" 194 | resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz" 195 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== 196 | 197 | "@protobufjs/eventemitter@^1.1.0": 198 | version "1.1.0" 199 | resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz" 200 | integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== 201 | 202 | "@protobufjs/fetch@^1.1.0": 203 | version "1.1.0" 204 | resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz" 205 | integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== 206 | dependencies: 207 | "@protobufjs/aspromise" "^1.1.1" 208 | "@protobufjs/inquire" "^1.1.0" 209 | 210 | "@protobufjs/float@^1.0.2": 211 | version "1.0.2" 212 | resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz" 213 | integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== 214 | 215 | "@protobufjs/inquire@^1.1.0": 216 | version "1.1.0" 217 | resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz" 218 | integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== 219 | 220 | "@protobufjs/path@^1.1.2": 221 | version "1.1.2" 222 | resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz" 223 | integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== 224 | 225 | "@protobufjs/pool@^1.1.0": 226 | version "1.1.0" 227 | resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz" 228 | integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== 229 | 230 | "@protobufjs/utf8@^1.1.0": 231 | version "1.1.0" 232 | resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" 233 | integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== 234 | 235 | "@raydium-io/raydium-sdk@^1.3.1-beta.47": 236 | version "1.3.1-beta.51" 237 | resolved "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.51.tgz" 238 | integrity sha512-HtZqK7NBHZLDnuhR9VFrtTM2E7QEtRKIzBI59ZOph+iaU4olgMyoMFYPU279LTip0fRUEO5LLh/8VHXVEKT2uw== 239 | dependencies: 240 | "@solana/buffer-layout" "^4.0.1" 241 | "@solana/spl-token" "^0.3.9" 242 | axios "^1.6.2" 243 | big.js "^6.2.1" 244 | bn.js "^5.2.1" 245 | decimal.js "^10.4.3" 246 | decimal.js-light "^2.5.1" 247 | fecha "^4.2.3" 248 | lodash "^4.17.21" 249 | toformat "^2.0.0" 250 | 251 | "@solana/buffer-layout-utils@^0.2.0": 252 | version "0.2.0" 253 | resolved "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz" 254 | integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== 255 | dependencies: 256 | "@solana/buffer-layout" "^4.0.0" 257 | "@solana/web3.js" "^1.32.0" 258 | bigint-buffer "^1.1.5" 259 | bignumber.js "^9.0.1" 260 | 261 | "@solana/buffer-layout@^4.0.0", "@solana/buffer-layout@^4.0.1": 262 | version "4.0.1" 263 | resolved "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz" 264 | integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== 265 | dependencies: 266 | buffer "~6.0.3" 267 | 268 | "@solana/codecs-core@2.0.0-preview.4": 269 | version "2.0.0-preview.4" 270 | resolved "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-preview.4.tgz" 271 | integrity sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw== 272 | dependencies: 273 | "@solana/errors" "2.0.0-preview.4" 274 | 275 | "@solana/codecs-core@2.0.0-rc.1": 276 | version "2.0.0-rc.1" 277 | resolved "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz" 278 | integrity sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ== 279 | dependencies: 280 | "@solana/errors" "2.0.0-rc.1" 281 | 282 | "@solana/codecs-data-structures@2.0.0-preview.4": 283 | version "2.0.0-preview.4" 284 | resolved "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.4.tgz" 285 | integrity sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA== 286 | dependencies: 287 | "@solana/codecs-core" "2.0.0-preview.4" 288 | "@solana/codecs-numbers" "2.0.0-preview.4" 289 | "@solana/errors" "2.0.0-preview.4" 290 | 291 | "@solana/codecs-data-structures@2.0.0-rc.1": 292 | version "2.0.0-rc.1" 293 | resolved "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz" 294 | integrity sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog== 295 | dependencies: 296 | "@solana/codecs-core" "2.0.0-rc.1" 297 | "@solana/codecs-numbers" "2.0.0-rc.1" 298 | "@solana/errors" "2.0.0-rc.1" 299 | 300 | "@solana/codecs-numbers@2.0.0-preview.4": 301 | version "2.0.0-preview.4" 302 | resolved "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.4.tgz" 303 | integrity sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ== 304 | dependencies: 305 | "@solana/codecs-core" "2.0.0-preview.4" 306 | "@solana/errors" "2.0.0-preview.4" 307 | 308 | "@solana/codecs-numbers@2.0.0-rc.1": 309 | version "2.0.0-rc.1" 310 | resolved "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz" 311 | integrity sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ== 312 | dependencies: 313 | "@solana/codecs-core" "2.0.0-rc.1" 314 | "@solana/errors" "2.0.0-rc.1" 315 | 316 | "@solana/codecs-strings@2.0.0-preview.4": 317 | version "2.0.0-preview.4" 318 | resolved "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.4.tgz" 319 | integrity sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw== 320 | dependencies: 321 | "@solana/codecs-core" "2.0.0-preview.4" 322 | "@solana/codecs-numbers" "2.0.0-preview.4" 323 | "@solana/errors" "2.0.0-preview.4" 324 | 325 | "@solana/codecs-strings@2.0.0-rc.1": 326 | version "2.0.0-rc.1" 327 | resolved "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz" 328 | integrity sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g== 329 | dependencies: 330 | "@solana/codecs-core" "2.0.0-rc.1" 331 | "@solana/codecs-numbers" "2.0.0-rc.1" 332 | "@solana/errors" "2.0.0-rc.1" 333 | 334 | "@solana/codecs@2.0.0-preview.4": 335 | version "2.0.0-preview.4" 336 | resolved "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-preview.4.tgz" 337 | integrity sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog== 338 | dependencies: 339 | "@solana/codecs-core" "2.0.0-preview.4" 340 | "@solana/codecs-data-structures" "2.0.0-preview.4" 341 | "@solana/codecs-numbers" "2.0.0-preview.4" 342 | "@solana/codecs-strings" "2.0.0-preview.4" 343 | "@solana/options" "2.0.0-preview.4" 344 | 345 | "@solana/codecs@2.0.0-rc.1": 346 | version "2.0.0-rc.1" 347 | resolved "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-rc.1.tgz" 348 | integrity sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ== 349 | dependencies: 350 | "@solana/codecs-core" "2.0.0-rc.1" 351 | "@solana/codecs-data-structures" "2.0.0-rc.1" 352 | "@solana/codecs-numbers" "2.0.0-rc.1" 353 | "@solana/codecs-strings" "2.0.0-rc.1" 354 | "@solana/options" "2.0.0-rc.1" 355 | 356 | "@solana/errors@2.0.0-preview.4": 357 | version "2.0.0-preview.4" 358 | resolved "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-preview.4.tgz" 359 | integrity sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA== 360 | dependencies: 361 | chalk "^5.3.0" 362 | commander "^12.1.0" 363 | 364 | "@solana/errors@2.0.0-rc.1": 365 | version "2.0.0-rc.1" 366 | resolved "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-rc.1.tgz" 367 | integrity sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ== 368 | dependencies: 369 | chalk "^5.3.0" 370 | commander "^12.1.0" 371 | 372 | "@solana/options@2.0.0-preview.4": 373 | version "2.0.0-preview.4" 374 | resolved "https://registry.npmjs.org/@solana/options/-/options-2.0.0-preview.4.tgz" 375 | integrity sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA== 376 | dependencies: 377 | "@solana/codecs-core" "2.0.0-preview.4" 378 | "@solana/codecs-data-structures" "2.0.0-preview.4" 379 | "@solana/codecs-numbers" "2.0.0-preview.4" 380 | "@solana/codecs-strings" "2.0.0-preview.4" 381 | "@solana/errors" "2.0.0-preview.4" 382 | 383 | "@solana/options@2.0.0-rc.1": 384 | version "2.0.0-rc.1" 385 | resolved "https://registry.npmjs.org/@solana/options/-/options-2.0.0-rc.1.tgz" 386 | integrity sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA== 387 | dependencies: 388 | "@solana/codecs-core" "2.0.0-rc.1" 389 | "@solana/codecs-data-structures" "2.0.0-rc.1" 390 | "@solana/codecs-numbers" "2.0.0-rc.1" 391 | "@solana/codecs-strings" "2.0.0-rc.1" 392 | "@solana/errors" "2.0.0-rc.1" 393 | 394 | "@solana/spl-token-group@^0.0.5": 395 | version "0.0.5" 396 | resolved "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.5.tgz" 397 | integrity sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ== 398 | dependencies: 399 | "@solana/codecs" "2.0.0-preview.4" 400 | "@solana/spl-type-length-value" "0.1.0" 401 | 402 | "@solana/spl-token-metadata@^0.1.2", "@solana/spl-token-metadata@^0.1.3": 403 | version "0.1.5" 404 | resolved "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.5.tgz" 405 | integrity sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA== 406 | dependencies: 407 | "@solana/codecs" "2.0.0-rc.1" 408 | "@solana/spl-type-length-value" "0.1.0" 409 | 410 | "@solana/spl-token@^0.3.9": 411 | version "0.3.11" 412 | resolved "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz" 413 | integrity sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ== 414 | dependencies: 415 | "@solana/buffer-layout" "^4.0.0" 416 | "@solana/buffer-layout-utils" "^0.2.0" 417 | "@solana/spl-token-metadata" "^0.1.2" 418 | buffer "^6.0.3" 419 | 420 | "@solana/spl-token@^0.4.0", "@solana/spl-token@^0.4.6": 421 | version "0.4.8" 422 | resolved "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.8.tgz" 423 | integrity sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA== 424 | dependencies: 425 | "@solana/buffer-layout" "^4.0.0" 426 | "@solana/buffer-layout-utils" "^0.2.0" 427 | "@solana/spl-token-group" "^0.0.5" 428 | "@solana/spl-token-metadata" "^0.1.3" 429 | buffer "^6.0.3" 430 | 431 | "@solana/spl-type-length-value@0.1.0": 432 | version "0.1.0" 433 | resolved "https://registry.npmjs.org/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz" 434 | integrity sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA== 435 | dependencies: 436 | buffer "^6.0.3" 437 | 438 | "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.0", "@solana/web3.js@^1.88.0", "@solana/web3.js@^1.89.1", "@solana/web3.js@^1.91.6", "@solana/web3.js@^1.94.0", "@solana/web3.js@^1.95.3": 439 | version "1.95.3" 440 | resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.95.3.tgz" 441 | integrity sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og== 442 | dependencies: 443 | "@babel/runtime" "^7.25.0" 444 | "@noble/curves" "^1.4.2" 445 | "@noble/hashes" "^1.4.0" 446 | "@solana/buffer-layout" "^4.0.1" 447 | agentkeepalive "^4.5.0" 448 | bigint-buffer "^1.1.5" 449 | bn.js "^5.2.1" 450 | borsh "^0.7.0" 451 | bs58 "^4.0.1" 452 | buffer "6.0.3" 453 | fast-stable-stringify "^1.0.0" 454 | jayson "^4.1.1" 455 | node-fetch "^2.7.0" 456 | rpc-websockets "^9.0.2" 457 | superstruct "^2.0.2" 458 | 459 | "@solana/web3.js@~1.77.3": 460 | version "1.77.4" 461 | resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.77.4.tgz" 462 | integrity sha512-XdN0Lh4jdY7J8FYMyucxCwzn6Ga2Sr1DHDWRbqVzk7ZPmmpSPOVWHzO67X1cVT+jNi1D6gZi2tgjHgDPuj6e9Q== 463 | dependencies: 464 | "@babel/runtime" "^7.12.5" 465 | "@noble/curves" "^1.0.0" 466 | "@noble/hashes" "^1.3.0" 467 | "@solana/buffer-layout" "^4.0.0" 468 | agentkeepalive "^4.2.1" 469 | bigint-buffer "^1.1.5" 470 | bn.js "^5.0.0" 471 | borsh "^0.7.0" 472 | bs58 "^4.0.1" 473 | buffer "6.0.3" 474 | fast-stable-stringify "^1.0.0" 475 | jayson "^4.1.0" 476 | node-fetch "^2.6.7" 477 | rpc-websockets "^7.5.1" 478 | superstruct "^0.14.2" 479 | 480 | "@swc/helpers@^0.5.11": 481 | version "0.5.13" 482 | resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz" 483 | integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== 484 | dependencies: 485 | tslib "^2.4.0" 486 | 487 | "@tsconfig/node10@^1.0.7": 488 | version "1.0.11" 489 | resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" 490 | integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== 491 | 492 | "@tsconfig/node12@^1.0.7": 493 | version "1.0.11" 494 | resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" 495 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 496 | 497 | "@tsconfig/node14@^1.0.0": 498 | version "1.0.3" 499 | resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" 500 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 501 | 502 | "@tsconfig/node16@^1.0.2": 503 | version "1.0.4" 504 | resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" 505 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 506 | 507 | "@types/bn.js@^5.1.5": 508 | version "5.1.5" 509 | resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz" 510 | integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== 511 | dependencies: 512 | "@types/node" "*" 513 | 514 | "@types/connect@^3.4.33": 515 | version "3.4.38" 516 | resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" 517 | integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== 518 | dependencies: 519 | "@types/node" "*" 520 | 521 | "@types/node@*", "@types/node@>=13.7.0": 522 | version "20.12.7" 523 | resolved "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz" 524 | integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== 525 | dependencies: 526 | undici-types "~5.26.4" 527 | 528 | "@types/node@^12.12.54": 529 | version "12.20.55" 530 | resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" 531 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 532 | 533 | "@types/uuid@^8.3.4": 534 | version "8.3.4" 535 | resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz" 536 | integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== 537 | 538 | "@types/ws@^7.4.4": 539 | version "7.4.7" 540 | resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" 541 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 542 | dependencies: 543 | "@types/node" "*" 544 | 545 | "@types/ws@^8.2.2": 546 | version "8.5.12" 547 | resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz" 548 | integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== 549 | dependencies: 550 | "@types/node" "*" 551 | 552 | abort-controller@^3.0.0: 553 | version "3.0.0" 554 | resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" 555 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 556 | dependencies: 557 | event-target-shim "^5.0.0" 558 | 559 | acorn-walk@^8.1.1: 560 | version "8.3.2" 561 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" 562 | integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== 563 | 564 | acorn@^8.4.1: 565 | version "8.11.3" 566 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" 567 | integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== 568 | 569 | agentkeepalive@^4.2.1, agentkeepalive@^4.3.0, agentkeepalive@^4.5.0: 570 | version "4.5.0" 571 | resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" 572 | integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== 573 | dependencies: 574 | humanize-ms "^1.2.1" 575 | 576 | ansi-regex@^5.0.1: 577 | version "5.0.1" 578 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 579 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 580 | 581 | ansi-styles@^4.0.0: 582 | version "4.3.0" 583 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 584 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 585 | dependencies: 586 | color-convert "^2.0.1" 587 | 588 | arg@^4.1.0: 589 | version "4.1.3" 590 | resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" 591 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 592 | 593 | asynckit@^0.4.0: 594 | version "0.4.0" 595 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" 596 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 597 | 598 | atomic-sleep@^1.0.0: 599 | version "1.0.0" 600 | resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" 601 | integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== 602 | 603 | axios@^1.6.2, axios@^1.6.8: 604 | version "1.6.8" 605 | resolved "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz" 606 | integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== 607 | dependencies: 608 | follow-redirects "^1.15.6" 609 | form-data "^4.0.0" 610 | proxy-from-env "^1.1.0" 611 | 612 | base-x@^3.0.2: 613 | version "3.0.10" 614 | resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz" 615 | integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== 616 | dependencies: 617 | safe-buffer "^5.0.1" 618 | 619 | base-x@^4.0.0: 620 | version "4.0.0" 621 | resolved "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz" 622 | integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== 623 | 624 | base64-js@^1.3.1, base64-js@^1.5.1: 625 | version "1.5.1" 626 | resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" 627 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 628 | 629 | big.js@^6.2.1: 630 | version "6.2.1" 631 | resolved "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz" 632 | integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== 633 | 634 | bigint-buffer@^1.1.5: 635 | version "1.1.5" 636 | resolved "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz" 637 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 638 | dependencies: 639 | bindings "^1.3.0" 640 | 641 | bignumber.js@^9.0.1: 642 | version "9.1.2" 643 | resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" 644 | integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== 645 | 646 | bindings@^1.3.0: 647 | version "1.5.0" 648 | resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" 649 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 650 | dependencies: 651 | file-uri-to-path "1.0.0" 652 | 653 | bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: 654 | version "5.2.1" 655 | resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" 656 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 657 | 658 | borsh@^0.7.0: 659 | version "0.7.0" 660 | resolved "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz" 661 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 662 | dependencies: 663 | bn.js "^5.2.0" 664 | bs58 "^4.0.0" 665 | text-encoding-utf-8 "^1.0.2" 666 | 667 | bs58@^4.0.0: 668 | version "4.0.1" 669 | resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" 670 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 671 | dependencies: 672 | base-x "^3.0.2" 673 | 674 | bs58@^4.0.1: 675 | version "4.0.1" 676 | resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" 677 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 678 | dependencies: 679 | base-x "^3.0.2" 680 | 681 | bs58@^5.0.0: 682 | version "5.0.0" 683 | resolved "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz" 684 | integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== 685 | dependencies: 686 | base-x "^4.0.0" 687 | 688 | buffer-layout@^1.2.0, buffer-layout@^1.2.2: 689 | version "1.2.2" 690 | resolved "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz" 691 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 692 | 693 | buffer@^6.0.3, buffer@~6.0.3, buffer@6.0.3: 694 | version "6.0.3" 695 | resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" 696 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 697 | dependencies: 698 | base64-js "^1.3.1" 699 | ieee754 "^1.2.1" 700 | 701 | bufferutil@^4.0.1: 702 | version "4.0.8" 703 | resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz" 704 | integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== 705 | dependencies: 706 | node-gyp-build "^4.3.0" 707 | 708 | camelcase@^6.3.0: 709 | version "6.3.0" 710 | resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" 711 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 712 | 713 | chalk@^5.3.0: 714 | version "5.3.0" 715 | resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" 716 | integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== 717 | 718 | cliui@^8.0.1: 719 | version "8.0.1" 720 | resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" 721 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 722 | dependencies: 723 | string-width "^4.2.0" 724 | strip-ansi "^6.0.1" 725 | wrap-ansi "^7.0.0" 726 | 727 | color-convert@^2.0.1: 728 | version "2.0.1" 729 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 730 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 731 | dependencies: 732 | color-name "~1.1.4" 733 | 734 | color-name@~1.1.4: 735 | version "1.1.4" 736 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 737 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 738 | 739 | colorette@^2.0.7: 740 | version "2.0.20" 741 | resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" 742 | integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== 743 | 744 | combined-stream@^1.0.8: 745 | version "1.0.8" 746 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" 747 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 748 | dependencies: 749 | delayed-stream "~1.0.0" 750 | 751 | commander@^12.1.0: 752 | version "12.1.0" 753 | resolved "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz" 754 | integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== 755 | 756 | commander@^2.20.3: 757 | version "2.20.3" 758 | resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" 759 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 760 | 761 | create-require@^1.1.0: 762 | version "1.1.1" 763 | resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" 764 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 765 | 766 | cross-fetch@^3.1.5: 767 | version "3.1.8" 768 | resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz" 769 | integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== 770 | dependencies: 771 | node-fetch "^2.6.12" 772 | 773 | crypto-hash@^1.3.0: 774 | version "1.3.0" 775 | resolved "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz" 776 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 777 | 778 | dateformat@^4.6.3: 779 | version "4.6.3" 780 | resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" 781 | integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== 782 | 783 | decimal.js-light@^2.5.1: 784 | version "2.5.1" 785 | resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz" 786 | integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== 787 | 788 | decimal.js@^10.4.2, decimal.js@^10.4.3: 789 | version "10.4.3" 790 | resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" 791 | integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== 792 | 793 | delay@^5.0.0: 794 | version "5.0.0" 795 | resolved "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" 796 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 797 | 798 | delayed-stream@~1.0.0: 799 | version "1.0.0" 800 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" 801 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 802 | 803 | diff@^4.0.1: 804 | version "4.0.2" 805 | resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" 806 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 807 | 808 | dot-case@^3.0.4: 809 | version "3.0.4" 810 | resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" 811 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 812 | dependencies: 813 | no-case "^3.0.4" 814 | tslib "^2.0.3" 815 | 816 | dotenv@^16.0.3, dotenv@^16.4.1: 817 | version "16.4.5" 818 | resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz" 819 | integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== 820 | 821 | emoji-regex@^8.0.0: 822 | version "8.0.0" 823 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 824 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 825 | 826 | end-of-stream@^1.1.0: 827 | version "1.4.4" 828 | resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" 829 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 830 | dependencies: 831 | once "^1.4.0" 832 | 833 | es6-promise@^4.0.3: 834 | version "4.2.8" 835 | resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" 836 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 837 | 838 | es6-promisify@^5.0.0: 839 | version "5.0.0" 840 | resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" 841 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 842 | dependencies: 843 | es6-promise "^4.0.3" 844 | 845 | escalade@^3.1.1: 846 | version "3.1.2" 847 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" 848 | integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== 849 | 850 | event-target-shim@^5.0.0: 851 | version "5.0.1" 852 | resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" 853 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 854 | 855 | eventemitter3@^4.0.7: 856 | version "4.0.7" 857 | resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" 858 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 859 | 860 | eventemitter3@^5.0.1: 861 | version "5.0.1" 862 | resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" 863 | integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== 864 | 865 | events@^3.3.0: 866 | version "3.3.0" 867 | resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" 868 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 869 | 870 | eyes@^0.1.8: 871 | version "0.1.8" 872 | resolved "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" 873 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 874 | 875 | fast-copy@^3.0.0: 876 | version "3.0.2" 877 | resolved "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz" 878 | integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== 879 | 880 | fast-redact@^3.1.1: 881 | version "3.5.0" 882 | resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz" 883 | integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== 884 | 885 | fast-safe-stringify@^2.1.1: 886 | version "2.1.1" 887 | resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" 888 | integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== 889 | 890 | fast-stable-stringify@^1.0.0: 891 | version "1.0.0" 892 | resolved "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz" 893 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 894 | 895 | fastestsmallesttextencoderdecoder@^1.0.22: 896 | version "1.0.22" 897 | resolved "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz" 898 | integrity sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw== 899 | 900 | fecha@^4.2.3: 901 | version "4.2.3" 902 | resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" 903 | integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== 904 | 905 | file-uri-to-path@1.0.0: 906 | version "1.0.0" 907 | resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" 908 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 909 | 910 | follow-redirects@^1.15.6: 911 | version "1.15.6" 912 | resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" 913 | integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== 914 | 915 | form-data@^4.0.0: 916 | version "4.0.0" 917 | resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" 918 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 919 | dependencies: 920 | asynckit "^0.4.0" 921 | combined-stream "^1.0.8" 922 | mime-types "^2.1.12" 923 | 924 | gaussian@^1.3.0: 925 | version "1.3.0" 926 | resolved "https://registry.npmjs.org/gaussian/-/gaussian-1.3.0.tgz" 927 | integrity sha512-rYQ0ESfB+z0t7G95nHH80Zh7Pgg9A0FUYoZqV0yPec5WJZWKIHV2MPYpiJNy8oZAeVqyKwC10WXKSCnUQ5iDVg== 928 | 929 | get-caller-file@^2.0.5: 930 | version "2.0.5" 931 | resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 932 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 933 | 934 | help-me@^5.0.0: 935 | version "5.0.0" 936 | resolved "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz" 937 | integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== 938 | 939 | humanize-ms@^1.2.1: 940 | version "1.2.1" 941 | resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" 942 | integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== 943 | dependencies: 944 | ms "^2.0.0" 945 | 946 | ieee754@^1.2.1: 947 | version "1.2.1" 948 | resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" 949 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 950 | 951 | is-fullwidth-code-point@^3.0.0: 952 | version "3.0.0" 953 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 954 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 955 | 956 | isomorphic-ws@^4.0.1: 957 | version "4.0.1" 958 | resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" 959 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 960 | 961 | jayson@^4.0.0, jayson@^4.1.0, jayson@^4.1.1: 962 | version "4.1.2" 963 | resolved "https://registry.npmjs.org/jayson/-/jayson-4.1.2.tgz" 964 | integrity sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA== 965 | dependencies: 966 | "@types/connect" "^3.4.33" 967 | "@types/node" "^12.12.54" 968 | "@types/ws" "^7.4.4" 969 | commander "^2.20.3" 970 | delay "^5.0.0" 971 | es6-promisify "^5.0.0" 972 | eyes "^0.1.8" 973 | isomorphic-ws "^4.0.1" 974 | json-stringify-safe "^5.0.1" 975 | JSONStream "^1.3.5" 976 | uuid "^8.3.2" 977 | ws "^7.5.10" 978 | 979 | jito-ts@^3.0.1: 980 | version "3.0.1" 981 | resolved "https://registry.npmjs.org/jito-ts/-/jito-ts-3.0.1.tgz" 982 | integrity sha512-TSofF7KqcwyaWGjPaSYC8RDoNBY1TPRNBHdrw24bdIi7mQ5bFEDdYK3D//llw/ml8YDvcZlgd644WxhjLTS9yg== 983 | dependencies: 984 | "@grpc/grpc-js" "^1.8.13" 985 | "@noble/ed25519" "^1.7.1" 986 | "@solana/web3.js" "~1.77.3" 987 | agentkeepalive "^4.3.0" 988 | dotenv "^16.0.3" 989 | jayson "^4.0.0" 990 | node-fetch "^2.6.7" 991 | superstruct "^1.0.3" 992 | 993 | joycon@^3.1.1: 994 | version "3.1.1" 995 | resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" 996 | integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== 997 | 998 | js-sha256@^0.9.0: 999 | version "0.9.0" 1000 | resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" 1001 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== 1002 | 1003 | json-stringify-safe@^5.0.1: 1004 | version "5.0.1" 1005 | resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" 1006 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 1007 | 1008 | jsonparse@^1.2.0: 1009 | version "1.3.1" 1010 | resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" 1011 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 1012 | 1013 | JSONStream@^1.3.5: 1014 | version "1.3.5" 1015 | resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" 1016 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 1017 | dependencies: 1018 | jsonparse "^1.2.0" 1019 | through ">=2.2.7 <3" 1020 | 1021 | lodash.camelcase@^4.3.0: 1022 | version "4.3.0" 1023 | resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" 1024 | integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== 1025 | 1026 | lodash@^4.17.21: 1027 | version "4.17.21" 1028 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 1029 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1030 | 1031 | long@^5.0.0: 1032 | version "5.2.3" 1033 | resolved "https://registry.npmjs.org/long/-/long-5.2.3.tgz" 1034 | integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== 1035 | 1036 | lower-case@^2.0.2: 1037 | version "2.0.2" 1038 | resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" 1039 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 1040 | dependencies: 1041 | tslib "^2.0.3" 1042 | 1043 | make-error@^1.1.1: 1044 | version "1.3.6" 1045 | resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" 1046 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1047 | 1048 | mime-db@1.52.0: 1049 | version "1.52.0" 1050 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" 1051 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1052 | 1053 | mime-types@^2.1.12: 1054 | version "2.1.35" 1055 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" 1056 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1057 | dependencies: 1058 | mime-db "1.52.0" 1059 | 1060 | minimist@^1.2.6: 1061 | version "1.2.8" 1062 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" 1063 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1064 | 1065 | ms@^2.0.0: 1066 | version "2.1.3" 1067 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 1068 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1069 | 1070 | no-case@^3.0.4: 1071 | version "3.0.4" 1072 | resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" 1073 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 1074 | dependencies: 1075 | lower-case "^2.0.2" 1076 | tslib "^2.0.3" 1077 | 1078 | node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.7.0: 1079 | version "2.7.0" 1080 | resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" 1081 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== 1082 | dependencies: 1083 | whatwg-url "^5.0.0" 1084 | 1085 | node-gyp-build@^4.3.0: 1086 | version "4.8.0" 1087 | resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz" 1088 | integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== 1089 | 1090 | on-exit-leak-free@^2.1.0: 1091 | version "2.1.2" 1092 | resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" 1093 | integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== 1094 | 1095 | once@^1.3.1, once@^1.4.0: 1096 | version "1.4.0" 1097 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1098 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1099 | dependencies: 1100 | wrappy "1" 1101 | 1102 | pako@^2.0.3: 1103 | version "2.1.0" 1104 | resolved "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz" 1105 | integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== 1106 | 1107 | pino-abstract-transport@^1.0.0, pino-abstract-transport@^1.1.0: 1108 | version "1.1.0" 1109 | resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz" 1110 | integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== 1111 | dependencies: 1112 | readable-stream "^4.0.0" 1113 | split2 "^4.0.0" 1114 | 1115 | pino-pretty@^10.3.1: 1116 | version "10.3.1" 1117 | resolved "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz" 1118 | integrity sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g== 1119 | dependencies: 1120 | colorette "^2.0.7" 1121 | dateformat "^4.6.3" 1122 | fast-copy "^3.0.0" 1123 | fast-safe-stringify "^2.1.1" 1124 | help-me "^5.0.0" 1125 | joycon "^3.1.1" 1126 | minimist "^1.2.6" 1127 | on-exit-leak-free "^2.1.0" 1128 | pino-abstract-transport "^1.0.0" 1129 | pump "^3.0.0" 1130 | readable-stream "^4.0.0" 1131 | secure-json-parse "^2.4.0" 1132 | sonic-boom "^3.0.0" 1133 | strip-json-comments "^3.1.1" 1134 | 1135 | pino-std-serializers@^6.0.0, pino-std-serializers@^6.2.2: 1136 | version "6.2.2" 1137 | resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz" 1138 | integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== 1139 | 1140 | pino@^8.18.0: 1141 | version "8.20.0" 1142 | resolved "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz" 1143 | integrity sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ== 1144 | dependencies: 1145 | atomic-sleep "^1.0.0" 1146 | fast-redact "^3.1.1" 1147 | on-exit-leak-free "^2.1.0" 1148 | pino-abstract-transport "^1.1.0" 1149 | pino-std-serializers "^6.0.0" 1150 | process-warning "^3.0.0" 1151 | quick-format-unescaped "^4.0.3" 1152 | real-require "^0.2.0" 1153 | safe-stable-stringify "^2.3.1" 1154 | sonic-boom "^3.7.0" 1155 | thread-stream "^2.0.0" 1156 | 1157 | prettier@^3.2.4: 1158 | version "3.2.5" 1159 | resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz" 1160 | integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== 1161 | 1162 | process-warning@^3.0.0: 1163 | version "3.0.0" 1164 | resolved "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz" 1165 | integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== 1166 | 1167 | process@^0.11.10: 1168 | version "0.11.10" 1169 | resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" 1170 | integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== 1171 | 1172 | protobufjs@^7.2.4: 1173 | version "7.2.6" 1174 | resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz" 1175 | integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== 1176 | dependencies: 1177 | "@protobufjs/aspromise" "^1.1.2" 1178 | "@protobufjs/base64" "^1.1.2" 1179 | "@protobufjs/codegen" "^2.0.4" 1180 | "@protobufjs/eventemitter" "^1.1.0" 1181 | "@protobufjs/fetch" "^1.1.0" 1182 | "@protobufjs/float" "^1.0.2" 1183 | "@protobufjs/inquire" "^1.1.0" 1184 | "@protobufjs/path" "^1.1.2" 1185 | "@protobufjs/pool" "^1.1.0" 1186 | "@protobufjs/utf8" "^1.1.0" 1187 | "@types/node" ">=13.7.0" 1188 | long "^5.0.0" 1189 | 1190 | proxy-from-env@^1.1.0: 1191 | version "1.1.0" 1192 | resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" 1193 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 1194 | 1195 | pump@^3.0.0: 1196 | version "3.0.0" 1197 | resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" 1198 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1199 | dependencies: 1200 | end-of-stream "^1.1.0" 1201 | once "^1.3.1" 1202 | 1203 | quick-format-unescaped@^4.0.3: 1204 | version "4.0.4" 1205 | resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" 1206 | integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== 1207 | 1208 | readable-stream@^4.0.0: 1209 | version "4.5.2" 1210 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" 1211 | integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== 1212 | dependencies: 1213 | abort-controller "^3.0.0" 1214 | buffer "^6.0.3" 1215 | events "^3.3.0" 1216 | process "^0.11.10" 1217 | string_decoder "^1.3.0" 1218 | 1219 | real-require@^0.2.0: 1220 | version "0.2.0" 1221 | resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" 1222 | integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== 1223 | 1224 | regenerator-runtime@^0.14.0: 1225 | version "0.14.1" 1226 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" 1227 | integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== 1228 | 1229 | require-directory@^2.1.1: 1230 | version "2.1.1" 1231 | resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 1232 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1233 | 1234 | rpc-websockets@^7.5.1: 1235 | version "7.9.0" 1236 | resolved "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.9.0.tgz" 1237 | integrity sha512-DwKewQz1IUA5wfLvgM8wDpPRcr+nWSxuFxx5CbrI2z/MyyZ4nXLM86TvIA+cI1ZAdqC8JIBR1mZR55dzaLU+Hw== 1238 | dependencies: 1239 | "@babel/runtime" "^7.17.2" 1240 | eventemitter3 "^4.0.7" 1241 | uuid "^8.3.2" 1242 | ws "^8.5.0" 1243 | optionalDependencies: 1244 | bufferutil "^4.0.1" 1245 | utf-8-validate "^5.0.2" 1246 | 1247 | rpc-websockets@^9.0.2: 1248 | version "9.0.2" 1249 | resolved "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.2.tgz" 1250 | integrity sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw== 1251 | dependencies: 1252 | "@swc/helpers" "^0.5.11" 1253 | "@types/uuid" "^8.3.4" 1254 | "@types/ws" "^8.2.2" 1255 | buffer "^6.0.3" 1256 | eventemitter3 "^5.0.1" 1257 | uuid "^8.3.2" 1258 | ws "^8.5.0" 1259 | optionalDependencies: 1260 | bufferutil "^4.0.1" 1261 | utf-8-validate "^5.0.2" 1262 | 1263 | safe-buffer@^5.0.1, safe-buffer@~5.2.0: 1264 | version "5.2.1" 1265 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 1266 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1267 | 1268 | safe-stable-stringify@^2.3.1: 1269 | version "2.4.3" 1270 | resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" 1271 | integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== 1272 | 1273 | secure-json-parse@^2.4.0: 1274 | version "2.7.0" 1275 | resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" 1276 | integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== 1277 | 1278 | snake-case@^3.0.4: 1279 | version "3.0.4" 1280 | resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" 1281 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 1282 | dependencies: 1283 | dot-case "^3.0.4" 1284 | tslib "^2.0.3" 1285 | 1286 | sonic-boom@^3.0.0, sonic-boom@^3.7.0: 1287 | version "3.8.1" 1288 | resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz" 1289 | integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== 1290 | dependencies: 1291 | atomic-sleep "^1.0.0" 1292 | 1293 | split2@^4.0.0: 1294 | version "4.2.0" 1295 | resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" 1296 | integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== 1297 | 1298 | string_decoder@^1.3.0: 1299 | version "1.3.0" 1300 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" 1301 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1302 | dependencies: 1303 | safe-buffer "~5.2.0" 1304 | 1305 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 1306 | version "4.2.3" 1307 | resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1308 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1309 | dependencies: 1310 | emoji-regex "^8.0.0" 1311 | is-fullwidth-code-point "^3.0.0" 1312 | strip-ansi "^6.0.1" 1313 | 1314 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1315 | version "6.0.1" 1316 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1317 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1318 | dependencies: 1319 | ansi-regex "^5.0.1" 1320 | 1321 | strip-json-comments@^3.1.1: 1322 | version "3.1.1" 1323 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1324 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1325 | 1326 | superstruct@^0.14.2: 1327 | version "0.14.2" 1328 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz" 1329 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 1330 | 1331 | superstruct@^0.15.4: 1332 | version "0.15.5" 1333 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz" 1334 | integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== 1335 | 1336 | superstruct@^1.0.3: 1337 | version "1.0.4" 1338 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz" 1339 | integrity sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ== 1340 | 1341 | superstruct@^2.0.2: 1342 | version "2.0.2" 1343 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz" 1344 | integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== 1345 | 1346 | text-encoding-utf-8@^1.0.2: 1347 | version "1.0.2" 1348 | resolved "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" 1349 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 1350 | 1351 | thread-stream@^2.0.0: 1352 | version "2.4.1" 1353 | resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz" 1354 | integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== 1355 | dependencies: 1356 | real-require "^0.2.0" 1357 | 1358 | "through@>=2.2.7 <3": 1359 | version "2.3.8" 1360 | resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1361 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1362 | 1363 | toformat@^2.0.0: 1364 | version "2.0.0" 1365 | resolved "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz" 1366 | integrity sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ== 1367 | 1368 | toml@^3.0.0: 1369 | version "3.0.0" 1370 | resolved "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz" 1371 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 1372 | 1373 | tr46@~0.0.3: 1374 | version "0.0.3" 1375 | resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" 1376 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1377 | 1378 | ts-node@^10.9.2: 1379 | version "10.9.2" 1380 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" 1381 | integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== 1382 | dependencies: 1383 | "@cspotcode/source-map-support" "^0.8.0" 1384 | "@tsconfig/node10" "^1.0.7" 1385 | "@tsconfig/node12" "^1.0.7" 1386 | "@tsconfig/node14" "^1.0.0" 1387 | "@tsconfig/node16" "^1.0.2" 1388 | acorn "^8.4.1" 1389 | acorn-walk "^8.1.1" 1390 | arg "^4.1.0" 1391 | create-require "^1.1.0" 1392 | diff "^4.0.1" 1393 | make-error "^1.1.1" 1394 | v8-compile-cache-lib "^3.0.1" 1395 | yn "3.1.1" 1396 | 1397 | tslib@^2.0.3, tslib@^2.4.0: 1398 | version "2.7.0" 1399 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" 1400 | integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== 1401 | 1402 | typescript@^5.3.3, typescript@>=2.7, typescript@>=5: 1403 | version "5.4.5" 1404 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" 1405 | integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== 1406 | 1407 | undici-types@~5.26.4: 1408 | version "5.26.5" 1409 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" 1410 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1411 | 1412 | utf-8-validate@^5.0.2, utf-8-validate@>=5.0.2: 1413 | version "5.0.10" 1414 | resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" 1415 | integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== 1416 | dependencies: 1417 | node-gyp-build "^4.3.0" 1418 | 1419 | uuid@^8.3.2: 1420 | version "8.3.2" 1421 | resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" 1422 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1423 | 1424 | v8-compile-cache-lib@^3.0.1: 1425 | version "3.0.1" 1426 | resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" 1427 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 1428 | 1429 | webidl-conversions@^3.0.0: 1430 | version "3.0.1" 1431 | resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" 1432 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1433 | 1434 | whatwg-url@^5.0.0: 1435 | version "5.0.0" 1436 | resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" 1437 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1438 | dependencies: 1439 | tr46 "~0.0.3" 1440 | webidl-conversions "^3.0.0" 1441 | 1442 | wrap-ansi@^7.0.0: 1443 | version "7.0.0" 1444 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1445 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1446 | dependencies: 1447 | ansi-styles "^4.0.0" 1448 | string-width "^4.1.0" 1449 | strip-ansi "^6.0.0" 1450 | 1451 | wrappy@1: 1452 | version "1.0.2" 1453 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1454 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1455 | 1456 | ws@*, ws@^8.5.0: 1457 | version "8.18.0" 1458 | resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" 1459 | integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== 1460 | 1461 | ws@^7.5.10: 1462 | version "7.5.10" 1463 | resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" 1464 | integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== 1465 | 1466 | y18n@^5.0.5: 1467 | version "5.0.8" 1468 | resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 1469 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1470 | 1471 | yargs-parser@^21.1.1: 1472 | version "21.1.1" 1473 | resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" 1474 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 1475 | 1476 | yargs@^17.7.2: 1477 | version "17.7.2" 1478 | resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" 1479 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 1480 | dependencies: 1481 | cliui "^8.0.1" 1482 | escalade "^3.1.1" 1483 | get-caller-file "^2.0.5" 1484 | require-directory "^2.1.1" 1485 | string-width "^4.2.3" 1486 | y18n "^5.0.5" 1487 | yargs-parser "^21.1.1" 1488 | 1489 | yn@3.1.1: 1490 | version "3.1.1" 1491 | resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" 1492 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1493 | --------------------------------------------------------------------------------