diff --git a/.DS_Store b/.DS_Store index 21d441a..85a4826 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 5e39575..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,14 +0,0 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry -polar: # Replace with a single Polar username -buy_me_a_coffee: # Replace with a single Buy Me a Coffee username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore index 4345ee5..23d12cd 100644 --- a/.gitignore +++ b/.gitignore @@ -136,4 +136,5 @@ dist .yarn/install-state.gz .pnp.* node_modules -test-ledger \ No newline at end of file +test-ledger +.DS_Store \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..0e4f87e --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v22.2.0 \ No newline at end of file diff --git a/README.md b/README.md index c3704c4..048682e 100644 --- a/README.md +++ b/README.md @@ -1,320 +1,218 @@ -[πŸ”—doc](https://outsmartchad.github.io/solana-trading-cli/) -## Main Features -- Trading any token using Jupiter API & Raydium swap function +## Table of Contents +- [About](#-about) +- [Key Features](#-key-features) +- [Installation](#-installation) +- [Prerequisites](#-prerequisites) +- [Feedback and Contributions](#-feedback-and-contributions) +- [Credits](#-credits) +- [Disclaimer](#-disclaimer) +- [Documentation](https://outsmartchad.github.io/solana-trading-cli/) -- Create your own Solana **_SPL tokens_** on mainnet | Pump.fun - -- Swap tokens on top of Raydium, Orca, Meteora, and pump.fun - -- Predefined Jito tips and Priority fee +## About -- Fastest Copy Trade Program +**Solana Trading CLI** is a free, highly efficient library designed to facilitate rapid development of custom trading strategies across multiple Solana DEXs. It emphasizes low-latency performance, flexibility, and real-time data processing, utilizing cutting-edge infrastructure. These features ensure the following benefits: -- **_Got everything needed for any developer to create their own trading bot_** +* **Speed:** Leverages low-latency infrastructures like Jito, BloXroute, and Nozomi to minimize trade execution times, giving your strategies a competitive edge. +* **Versatility:** Supports multiple DEXs like Raydium, Orca, Meteora, and Pump.fun, allowing for diverse trading opportunities. +* **Real-time Insights:** Fetches current state of an account using RPC, streams the latest transactions of accounts using geyser gRPC -## Credits -- https://github.com/raydium-io/raydium-sdk-V2 -- https://github.com/rckprtr/pumpdotfun-sdk -- https://github.com/Al366io/solana-transactions-wrapper +The library is built with modularity and extensibility in mind, employing software design patterns that promote: + +* **Customizability:** Easily integrate your own trading strategies and extend the bot's functionality. +* **Testability:** Well-separated components facilitate comprehensive testing of individual modules. +* **Maintainability:** Clear structure and separation of concerns simplify ongoing development and updates. -### Installation πŸ› οΈ - -1. `git clone https://github.com/outsmartchad/solana-trading-cli.git` -2. `cd solana-memecoin-cli` -3. `nvm install v22.2.0` -4. `nvm use v22.2.0` -5. `npm install` -6. `node help.js `(to see commands or read cli_doc.txt file) -7. also see the command examples in examples/ - -### Prerequisites 🚨 - -0. we have added a .env.copy file in src/helpers/.env.copy for you to follow and paste your keys to the code (specify the custom jito fee if you need). -1. Add your mainnet wallet secret key(must), devnet wallet secret key (optional), RPC endpoint(must) and shyft api key(optional) -2. rename the .env.copy file to .env - -## Features βœ…: - -### Developer CLI: -- wrap/unwrap solana -- Create a new SPL token or zk-compressed token (on SOL mainnet/devnet/zk-devnet) and it will automatically mint to your wallet -- Integrates both **user-defined priority fee and jito tips** that land transactions faster -- Burn a percentage of a token -- Revoke mint and freeze authority of a token -- boost volume of a token by creating buy and sell orders in just **one transaction** -- **Add or Remove liquidity** to a pool -- Swap tokens in a **raydium dex's AMM pool and JUP Swap API** -- Buy or sell a token using SOL using raydium and JUP -- **Buy, Sell, and launch token in pump.fun** -- Check the balance of a token in your wallet -- monitor real-time pump-fun's create, trade, and complete bonding curve events +Designed for seamless integration into existing trading systems, the Open-Source Low-Latency Trading Bot provides a robust foundation for both novice algo-traders and experienced quantitative analysts. Its open-source nature encourages community contributions and continuous improvement, ensuring the bot evolves alongside the fast-paced world of decentralized finance. -### Trader CLI: -- Optimized Copy Trading Program with auto-buy&sell +## Key Features + +### Token Creation and Multi-DEX Support +Create your own Solana SPL tokens on mainnet via Pump.fun and swap tokens across multiple decentralized exchanges: + +| Exchange | Documentation | +|----------|---------------| +| Jupiter | [CLI & trading functions guide](https://github.com/outsmartchad/solana-trading-cli/blob/typescript-main/src/jupiter/README.md) | +| Raydium | [CLI & trading functions guide](https://github.com/outsmartchad/solana-trading-cli/blob/typescript-main/src/raydium/README.md) | +| Orca | [CLI & trading functions guide](https://github.com/outsmartchad/solana-trading-cli/blob/typescript-main/src/orca/README.md) | +| Meteora | [CLI & trading functions guide](https://github.com/outsmartchad/solana-trading-cli/blob/typescript-main/src/meteora/README.md) | +| Pump.fun | Integrated support | -## Features in Development 🚧: +### Low-Latency Infrastructure +Accelerate transaction finality using Jito and bloXroute for lightning-fast trades. Both capable of pushing your trasaction faster then any other service provider on the market -- With user-defined Jito tips and priority Lamports supported for every command -- tp/sl modules for Trading dev -- sniping tools on pump.fun&raydium using yellowstone geyser grpc -- copy trade program using yellowstone geyser grpc -- **More Profitable Strategies** for Trading dev -- more features to come... +| Provider | Description | +|----------|---------------| +| Jito | Fast trascation and optimizes transaction ordering and execution specifically | +| Bloxroute | Fast trascation and accelerates transaction propagation | +| Nozomi | Optimzed tx spamming and submission to current blockleader | -# Commands (Please see the command examples in examples/ to get start~) +### Real-Time Market Data +Fetch critical metrics for any liquidity pool in real-time with RPC calls: +- Price +- LP-burn percentage +- Pool reserve +- Market cap -### payer options is by default use the private key in .env file, but you can also specify the path to the secret key if you want to use another wallet +### Advanced Trading Tools +Utilize our local limit order and TP/SL module with zero dependencies. +[Explore the documentation](https://github.com/outsmartchad/solana-trading-cli/blob/typescript-main/src/trading_dev/README.md) -1. Specify the token symbol, name, mint keypair(optional, will help u to generate), supply, decimals, path to metadata json file, path to image file, the cluster you want to use, and the file type(png, jpg, jpeg). +### All commands +[Here](https://github.com/outsmartchad/solana-trading-cli/blob/typescript-main/src/README.md) -``` -node create --payer --symbol --token_name --mint --supply --decimals --metadata --image --cluster --priority-fee --file_type -``` +### Open-Source Bots +Leverage our cutting-edge, open-source trading bots: -2. Specify the token address, the percentage of the token you want to burn and the cluster you want to use. +| Bot Name | Features | Source | +|----------|----------|--------| +| gRPC Pump.fun Sniper Bot | Ultra-low latency (0.4-2 seconds) | [View source](https://github.com/outsmartchad/solana-trading-cli/tree/typescript-main/src/grpc_streaming_dev/grpc-pf-sniper) | +| gRPC Copy Bot | Replicate successful trading strategies | [View source](https://github.com/outsmartchad/solana-trading-cli/tree/typescript-main/src/grpc_streaming_dev/grpc-copy-bot) | +| gRPC Raydium Sniper Bot | Optimized for Raydium DEX | [View source](https://github.com/outsmartchad/solana-trading-cli/tree/typescript-main/src/grpc_streaming_dev/grpc-raydium-sniper) | -``` -node burn --payer --token_address --percentage --cluster -``` +### Extensibility +Our comprehensive toolkit provides everything you need to create your own custom trading bot, tailored to your unique strategies and requirements. -3. Specify the token address and the cluster you want to use. +## πŸ› οΈ Installation +Follow these steps to get your development environment set up: -``` -node revoke_authority --payer --mint_address --cluster --mint --freeze -``` +1. **Clone the repository** + ```bash + git clone https://github.com/outsmartchad/solana-trading-cli.git + ``` -4. Specify the token address you want to query and the cluster for boosting the volume of the token. +2. **Navigate to the project directory** + ```bash + cd solana-trading-cli + ``` -``` -node boost_volume --token_address --payer --cluster --sol_per_order +3. **Install the correct Node.js version** + ```bash + nvm install + nvm use + ``` -``` +4. **Install dependencies** + ```bash + npm install + ``` -5. Specify the token address, the amount of Sol you want to swap, and the cluster you want to use. +5. **Run the test script** + ```bash + ts-node test.ts + ``` -``` -node buy --payer --token_address --sol --cluster -``` +### Installation Prerequisites -6. Specify the token address, the percentage of the token you want to sell, and the cluster you want to use. +- [Node Version Manager (nvm)](https://github.com/nvm-sh/nvm) +- [Node.js](https://nodejs.org/) (version specified in `.nvmrc`) +- [npm](https://www.npmjs.com/) (comes with Node.js) -``` -node sell --payer --token_address --percentage --cluster -``` +### Troubleshooting -7. Specify the token address, the pool id(optional, will help to find the pool with the most liquidity using the given token address), the amount of Sol you want to add, and the cluster you want to use. +If you encounter any issues during installation, please check our [FAQ](link-to-faq) or [open an issue](https://github.com/outsmartchad/solana-trading-cli/issues). -``` -node add_pool --payer --token_address --pool_id --sol --cluster --priority_fee -``` +## 🚨 Set Up -8. Specify the token address, the percentage of the LP token you want to remove(1=1%), and the cluster you want to use. +Before you begin, ensure you have completed the following steps: -``` -node remove_pool --payer --token_address --percentage --cluster -``` -9. wrap your sol to wsol. - -``` -node wrap_sol.js --size -``` +### 1. Environment Configuration -10. unwrap your wsol to sol. -``` -node unwrap_sol.js -``` +1. Locate the template file: + ``` + src/helpers/.env.example + ``` -### Pump.fun commands +2. Copy this file and rename it to `.env` in the same directory. -9. Specify the path to your mint keypair, the amount of Sol you want to buy, the name of the token, the symbol of the token, the description of the token, the telegram link, the twitter link, the website link, and the image file path. +3. Open the `.env` file and add the following required information: + - Mainnet wallet secret key (required) + - RPC endpoint (required) + - Custom Jito fee (if needed) -``` -node createAndBuy --pathToMintKeypair --sol --name --symbol --description --telegram --twitter --website --file -``` +4. Optional configurations: + - Devnet wallet secret key + - Helius RPC url + key (e.g. getting latest price from dexes) + - Shyft geyser gRPC token (for grpc trading bots development) (Link to Shyft: https://shyft.to/) -10. Specify the token address, the sol you want to buy +### 2. API Keys and Wallet Setup -``` -node buy --token_address --sol -``` +- **Solana Wallet**: Ensure you have a funded Solana mainnet wallet. The secret key is required for mainnet transactions. +- **RPC Endpoint**: Obtain a RPC endpoint from reliable node operator like Helius to connect to Solana +- **Jito Integration**: If uses Jito, prepare your custom fee configuration. +- **Shyft Geyser gRPC** (Optional): If you are developing algo trading bot, buy a grpc token from reliable operator like Shyft. -11. Specify the token address, the percentage of the token you want to sell +### 3. Final Check -``` -node sell --token_address --percentage -``` -# Code Usage +- Confirm that your `.env` file is properly configured and saved. +- Ensure the `.env` file is in the correct location: `src/helpers/.env` +- Verify that you haven't accidentally committed your `.env` file to version control. -## Token: +> ⚠️ **Security Note**: Never share or commit your `.env` file or any private keys. The `.env` file is included in `.gitignore` for your safety. -- src/Token/create.js: create a spl token on devnet or mainnet with a given name, symbol, token image(using irys decentralized storage), metadata json file, supply, decimals, the code by default revokes the mint authority and freeze authority after creating the token so that the token has a cap and no one can feeze the token of the token holder, it will then mint all the token to your wallet +For any issues with configuration, please refer to our [Troubleshooting Guide](link-to-troubleshooting) or [open an issue](https://github.com/yourusername/your-repo-name/issues). -- src/Token/burn.js: burn spl token with a given percentage of the token from your wallet +## 🀝 Feedback and Contributions +We've made every effort to implement all the main aspects of solana trading in the best possible way. However, the development journey doesn't end here, and your input is crucial for our continuous improvement. -- src/Token/revoke_authority.js: revoke mint and freeze authority of a given token +> [!IMPORTANT] +> Whether you have feedback on features, have encountered any bugs, or have suggestions for enhancements, we're eager to hear from you. Your insights help us make the Solana Trading Client library more robust and user-friendly. + +Please feel free to contribute by submitting an issue, joining the discussions, or joining our discord. Each contribution helps us grow and improve. + +We appreciate your support and look forward to making our product even better with your help! + +### How to Contribute -## Trading: - -- src/Trading/dex/raydium/sell.js: selling spl token for SOL in your wallet using raydium dex swap function - -- src/Trading/dex/raydium/buy.js: buying spl token using SOL in your wallet using raydium dex swap function - -- src/Trading/volume/boost_volume.js: boost the volume of a token by creating a buy and sell order in just one transaction in a way to avoid possible MEV - -- src/Trading/memecoin_trading_strategies/copy-trading/copy-trade.js: copy trading program to follow a user-defined wallet address to auto-buy&sell - -## Transactions: - -- src/Transactions/jito_tips_tx_executor.js: execute the transaction by sending the bundles to Jito validators, they help us to land the transaction to the Solana blockchain faster than just using priority fee. - -- src/Transactions/simple_tx_executor.js: execute the transaction by sending the request to the Solana blockchain with a given priority gas fee. - -## Pool: - -- src/Pool/add_pool.js: add liquidity to a pool in a given token address, the code find the most liquid pool (TOKEN_ADDRESS/SOL) in the raydium dex and add liquidity to it. You need to specify the amount of liquidity(sol) you want to add. - -- src/Pool/remove_pool.js: remove liquidity from a pool in a given token address, the code find the most liquid pool (TOKEN_ADDRESS/SOL) in the raydium dex and remove liquidity from it. You need to specify the amount of percentage of liquidity you want to remove. - -- src/Pool/swap.js: swap token for another token in the raydium dex, src/Trading/dex/raydium/buy.js and src/Trading/dex/raydium/sell.js are based on this code. - -- src/Pool/query_pool.js: query the pool information of a given pool address in the raydium dex, it use shyft api to get the pool information. Please make sure you have your shyft api key inside the code before running this code. - -## Helper methods: - -- src/helpers/config.js: configuration file for the code. - -- src/helpers/util.js: utility functions for the code, including: send transactions to Solana blockchain, dropped transactions handling, etc. - -- src/helpers/check_balance.js: check the balance of a given token in your wallet - -## Project Structure -``` -.solana-memecoin-cli -β”œβ”€β”€ data -| β”œβ”€β”€ Image_file # store image file (jpeg, jpg,...) -| β”œβ”€β”€ metadata_file # store .json file about the token metadata -| β”œβ”€β”€ payer_keypair # store wallet keypair .json -| └── token_keypair # store token keypair .json -β”œβ”€β”€ examples (Screenshots of Commands) # all screenshot to show how we use the command line tool -| β”œβ”€β”€ add_liquidity # see how to add liquidity to a pool on Raydium -| β”œβ”€β”€ burn_token # see how to burn a token with WSOL using Raydium swap -| β”œβ”€β”€ create_token # see how to create a SPL token on mainnet or devnet -| β”œβ”€β”€ buy_token # buy a token using raydium with both jito bundles and priority fees -| β”œβ”€β”€ create_token # create a token with 0% extra fees on solana (mainnet or devnet) -| β”œβ”€β”€ remove_liquidity # remove some liquidity from a pool on Raydium -| β”œβ”€β”€ boost_volume # boost the volume of a token on raydium -| β”œβ”€β”€ pump_createAndInitialBuy # create and initial buy token on pump.fun -| β”œβ”€β”€ pump_buy # buy token on pump.fun -| β”œβ”€β”€ pump_sell # sell token on pump.fun -| └── sell_token # sell the token with a percentage using Raydium swap -└── src - β”œβ”€β”€ helpers - β”‚ β”œβ”€β”€ .env - β”‚ β”œβ”€β”€ .env.copy - β”‚ β”œβ”€β”€ check_balance.js - β”‚ β”œβ”€β”€ config.js - β”‚ β”œβ”€β”€ unwrap_sol.js - β”‚ β”œβ”€β”€ util.js - β”‚ └── wrap_sol.js - β”œβ”€β”€ Trading_dev - β”‚ β”œβ”€β”€ dex - β”‚ β”‚ β”œβ”€β”€ meteora - β”‚ β”‚ β”‚ β”œβ”€β”€ swap.js - β”‚ β”‚ β”‚ β”œβ”€β”€ buy.js - β”‚ β”‚ β”‚ β”œβ”€β”€ sell.js - β”‚ β”‚ β”‚ β”œβ”€β”€ constants.js - β”‚ β”‚ β”‚ β”œβ”€β”€ fetch-pool.js - β”‚ β”‚ β”‚ β”œβ”€β”€ fetch-price.js - β”‚ β”‚ β”‚ └── idl.js - β”‚ β”‚ └── orca - β”‚ β”‚ └── #same as meteora/raydium - β”‚ └── memecoin_trading_strategies/ - β”‚ β”œβ”€β”€ copy-trading/ - β”‚ β”‚ β”œβ”€β”€ copy-buy.js - β”‚ β”‚ β”œβ”€β”€ copy-sell.js - β”‚ β”‚ β”œβ”€β”€ copy-trade.js - β”‚ β”‚ └── grpc-copy-bot/ - β”‚ └── tp_sl - β”‚ β”œβ”€β”€ stop-loss.js - β”‚ └── take-profit.js - β”œβ”€β”€ Memecoin_dev - β”‚ β”œβ”€β”€ bundled_launcher - β”‚ β”œβ”€β”€ market-making_dev/ - β”‚ β”‚ └── boost_volume.js - β”‚ └── sniping_dev - β”‚ β”œβ”€β”€ grpc_pump_sniper/ - β”‚ └── grpc_raydium_sniper/ - β”œβ”€β”€ Transactions - β”‚ β”œβ”€β”€ bloXroute_tips_tx_executor.js - β”‚ β”œβ”€β”€ jito_tips_tx_executor.js - β”‚ └── simple_tx_executor.js - β”œβ”€β”€ Token - β”‚ β”œβ”€β”€ zk-compression/ - β”‚ β”œβ”€β”€ burn.js - β”‚ β”œβ”€β”€ create.js - β”‚ └── revoke_authority.js - β”œβ”€β”€ raydium - β”‚ β”œβ”€β”€ Pool/ - β”‚ β”‚ β”œβ”€β”€ add_pool.js - β”‚ β”‚ β”œβ”€β”€ create_pool.js - β”‚ β”‚ β”œβ”€β”€ fetch_pool.js - β”‚ β”‚ β”œβ”€β”€ formatAmmKeysById.js - β”‚ β”‚ β”œβ”€β”€ query_pool.js - β”‚ β”‚ β”œβ”€β”€ remove_pool.js - β”‚ β”‚ └── swap.js - β”‚ β”œβ”€β”€ token-filters - β”‚ β”‚ β”œβ”€β”€ lp-burn.js - β”‚ β”‚ β”œβ”€β”€ maker-count.js - β”‚ β”‚ β”œβ”€β”€ marketcap.js - β”‚ β”‚ β”œβ”€β”€ pool-sol.js - β”‚ β”‚ β”œβ”€β”€ tx-count.js - β”‚ β”‚ └── volume.js - β”‚ β”œβ”€β”€ buy.js - β”‚ β”œβ”€β”€ constants.js - β”‚ β”œβ”€β”€ fetch-price.js - β”‚ β”œβ”€β”€ raydium_config.js - β”‚ └── sell.js - β”œβ”€β”€ jupiter - β”‚ β”œβ”€β”€ swap/ - β”‚ β”‚ β”œβ”€β”€ buy-helper.js - β”‚ β”‚ β”œβ”€β”€ sell-helper.js - β”‚ β”‚ └── swap-helper.js - β”‚ β”œβ”€β”€ dca.js - β”‚ └── limit-order.js - └── pumpfunsdk - β”œβ”€β”€ pump-keypair/ - └── pumpdotfun-sdk - β”œβ”€β”€ images/ - └── src - β”œβ”€β”€ IDL/ - β”œβ”€β”€ pump-events-listener/ - β”‚ └── listeners.js - β”œβ”€β”€ amm.js - β”œβ”€β”€ buy.js - β”œβ”€β”€ createAndBuy.js - β”œβ”€β”€ pumpfun.js - β”œβ”€β”€ sell.js - β”œβ”€β”€ tools.js - └── util.js - -``` - -## Contributing - Contributions is wellcome!!! - Fork it -- ``` git checkout -b feature/YourNewFeature ``` -- ``` git commit -m 'bug Fixed/added new feature' ``` -- ``` git push origin feature/YourNewFeature ``` +- `git checkout -b feature/YourNewFeature` +- `git commit -m 'bug Fixed/added new feature'` +- `git push origin feature/YourNewFeature` - And Please open a pull request -## Apply Latest Changes from remote repo -- ``` git stash -u # Stash your changes``` -- ``` git pull --rebase # Pull the latest changes``` -- ``` git stash pop # Apply Your stashed changes``` +### Apply Latest Changes from remote repo + +- `git stash -u # Stash your changes` +- `git pull --rebase # Pull the latest changes` +- `git stash pop # Apply Your stashed changes` -### If you think this project is useful, please give us a star🌟, it will help us a lot. +## βœ… Credits + +- https://github.com/raydium-io/raydium-sdk-V2 +- https://github.com/rckprtr/pumpdotfun-sdk +- https://github.com/rpcpool/yellowstone-grpc +- https://github.com/Al366io/solana-transactions-wrapper + +## ‼️ Disclaimer + +This software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software. + +**Use at your own risk.** The authors take no responsibility for any harm or damage caused by the use of this software. Users are responsible for ensuring the suitability and safety of this software for their specific use cases. + +By using this software, you acknowledge that you have read, understood, and agree to this disclaimer. ### Discord channel: https://discord.gg/hFhQeBCqWX -### It is a work in progress, if you have any suggestions or any problems, please let us know! -### Stay tuned for the updates.πŸ€–_** +### If you think this will steal your keys, i have no time to convince you to use it. + +## πŸ€– Plans + +- A local-based db to store your limit orders + +- Smart scripts to help you detect potential rug pulls on pump.fun, e.g. dev sold, master wallet, similar past rug patterns + +- More gRPC bots to come + +- More algos to trade on raydium/Pump.fun + +- Make it more easier to install, deploy the bot using docker + +## πŸͺ™ Final State of this repo + +- Best trading framework on Solana + +- Best package/library for trading development on solana, e.g.(we could make it easy to like Raydium.buy("token", 0.01sol, 1%slippage)) + +- Best open-soured trading bot + +- Succeed with Solana dev! diff --git a/data/.DS_Store b/data/.DS_Store deleted file mode 100644 index ef7ab4c..0000000 Binary files a/data/.DS_Store and /dev/null differ diff --git a/data/Image_file/FTW.jpeg b/data/Image_file/FTW.jpeg deleted file mode 100644 index f730622..0000000 Binary files a/data/Image_file/FTW.jpeg and /dev/null differ diff --git a/data/metadata_file/metadata.json b/data/metadata_file/metadata.json deleted file mode 100644 index 25d86b2..0000000 --- a/data/metadata_file/metadata.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "FuCK The WorLd", - "symbol": "FTW", - "description": "you mfers." -} diff --git a/data/payer_keypair/mainnet/.DS_Store b/data/payer_keypair/mainnet/.DS_Store deleted file mode 100644 index 5008ddf..0000000 Binary files a/data/payer_keypair/mainnet/.DS_Store and /dev/null differ diff --git a/data/payer_keypair/mainnet/test_wallet.json b/data/payer_keypair/mainnet/test_wallet.json deleted file mode 100644 index c9b527d..0000000 --- a/data/payer_keypair/mainnet/test_wallet.json +++ /dev/null @@ -1 +0,0 @@ -[1, 2, 3, 4, 5] diff --git a/data/token_keypair/devnet/.DS_Store b/data/token_keypair/devnet/.DS_Store deleted file mode 100644 index 5008ddf..0000000 Binary files a/data/token_keypair/devnet/.DS_Store and /dev/null differ diff --git a/package-lock.json b/package-lock.json index bfc3471..ed91ffb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "solana-memecoin-cli", + "name": "solana-trading-cli", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "solana-memecoin-cli", + "name": "solana-trading-cli", "version": "1.0.0", "license": "ISC", "dependencies": { @@ -31,7 +31,9 @@ "@raydium-io/raydium-sdk-v2": "^0.1.23-alpha", "@rollup/plugin-json": "^6.1.0", "@solana/spl-token": "^0.4.0", - "@solana/web3.js": "^1.95.3", + "@solana/web3.js": "^1.89.1", + "@triton-one/yellowstone-grpc": "^0.4.0", + "async-mutex": "^0.5.0", "axios": "^1.6.8", "bigint-buffer": "^1.1.5", "bip39": "^3.1.0", @@ -42,53 +44,66 @@ "dotenv": "^16.4.5", "graphql-request": "^4.0.0", "i": "^0.3.7", + "jito-ts": "^4.0.0", "npm": "^10.5.2", "pino": "^8.18.0", "pino-pretty": "^10.3.1", "pino-std-serializers": "^6.2.2", "pumpdotfun-sdk": "^1.3.2", "random-js": "^2.1.0", - "rpc-websockets": "^7.11.2", - "ws": "^8.18.0" + "rpc-websockets": "7.10.0" + }, + "devDependencies": { + "typescript": "^5.5.4" + }, + "engines": { + "node": "22.2.0" } }, "node_modules/@aptos-labs/aptos-cli": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@aptos-labs/aptos-cli/-/aptos-cli-0.1.8.tgz", - "integrity": "sha512-xSWDchqoDR4aR74xNoJZgOzIFtn+EKFGGFLG0vOb+6Ce8Jgg1Ui0Pqhvwbx6Z36dDxfKv0F4M7bnurvWpwAjXA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@aptos-labs/aptos-cli/-/aptos-cli-1.0.2.tgz", + "integrity": "sha512-PYPsd0Kk3ynkxNfe3S4fanI3DiUICCoh4ibQderbvjPFL5A0oK6F4lPEO2t0MDsQySTk2t4vh99Xjy6Bd9y+aQ==", + "dependencies": { + "commander": "^12.1.0" + }, "bin": { - "aptos": "bin/aptos" + "aptos": "dist/aptos.js" } }, "node_modules/@aptos-labs/aptos-client": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@aptos-labs/aptos-client/-/aptos-client-0.1.0.tgz", - "integrity": "sha512-q3s6pPq8H2buGp+tPuIRInWsYOuhSEwuNJPwd2YnsiID3YSLihn2ug39ktDJAcSOprUcp7Nid8WK7hKqnUmSdA==", - "dependencies": { - "axios": "1.6.2", - "got": "^11.8.6" - }, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@aptos-labs/aptos-client/-/aptos-client-1.0.0.tgz", + "integrity": "sha512-P/U/xz9w7+tTQDkaeAc693lDFcADO15bjD5RtP/2sa5FSIYbAyGI5A1RfSNPESuBjvskHBa6s47wajgSt4yX7g==", "engines": { "node": ">=15.10.0" + }, + "peerDependencies": { + "axios": "^1.7.7", + "got": "^11.8.6" } }, - "node_modules/@aptos-labs/aptos-client/node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "node_modules/@aptos-labs/aptos-dynamic-transaction-composer": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@aptos-labs/aptos-dynamic-transaction-composer/-/aptos-dynamic-transaction-composer-0.1.3.tgz", + "integrity": "sha512-bJl+Zq5QbhpcPIJakAkl9tnT3T02mxCYhZThQDhUmjsOZ5wMRlKJ0P7aaq1dmlybSHkVj7vRgOy2t86/NDKKng==" + }, + "node_modules/@aptos-labs/script-composer-pack": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@aptos-labs/script-composer-pack/-/script-composer-pack-0.0.9.tgz", + "integrity": "sha512-Y3kA1rgF65HETgoTn2omDymsgO+fnZouPLrKJZ9sbxTGdOekIIHtGee3A2gk84eCqa02ZKBumZmP+IDCXRtU/g==", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "@aptos-labs/aptos-dynamic-transaction-composer": "^0.1.3" } }, "node_modules/@aptos-labs/ts-sdk": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@aptos-labs/ts-sdk/-/ts-sdk-1.18.1.tgz", - "integrity": "sha512-+tsm+UAT8BEMJsT30RpIT8rv6yDwFcs7W/YvyHPG2wnOvTjnGQe1CT8sB/qqUt4OiVhyPdddPQDB4+4oJBVyAQ==", + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@aptos-labs/ts-sdk/-/ts-sdk-1.35.0.tgz", + "integrity": "sha512-ChW2Lvi6lKfEb0AYo0HAa98bYf0+935nMdjl40wFMWsR+mxFhtNA4EYINXsHVTMPfE/WV9sXEvDInvscJFrALQ==", "dependencies": { - "@aptos-labs/aptos-cli": "^0.1.2", - "@aptos-labs/aptos-client": "^0.1.0", + "@aptos-labs/aptos-cli": "^1.0.2", + "@aptos-labs/aptos-client": "^1.0.0", + "@aptos-labs/script-composer-pack": "^0.0.9", "@noble/curves": "^1.4.0", "@noble/hashes": "^1.4.0", "@scure/bip32": "^1.4.0", @@ -100,7 +115,7 @@ "poseidon-lite": "^0.2.0" }, "engines": { - "node": ">=11.0.0" + "node": ">=20.0.0" } }, "node_modules/@aptos-labs/ts-sdk/node_modules/eventemitter3": { @@ -109,12 +124,12 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "license": "MIT", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -122,96 +137,17 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/runtime": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz", - "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==", - "license": "MIT", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -220,10 +156,9 @@ } }, "node_modules/@bloxroute/solana-trader-client-ts": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@bloxroute/solana-trader-client-ts/-/solana-trader-client-ts-2.1.6.tgz", - "integrity": "sha512-xqbaJOGQJaA8NtH9YKCv7uwmNUiuhymoy0Yowe2d/MTvZFcAkfsB13wVFjq3yLNfqxSVvFK5O+COfjSFifvw1A==", - "license": "MIT", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@bloxroute/solana-trader-client-ts/-/solana-trader-client-ts-2.2.2.tgz", + "integrity": "sha512-xfBg3JqlwcpKNR9E7tMR7m+JUGz3dvOi87G/4Yf6/Nv9GAvZaDifXzjZTAwdq++aJi6Y8T+mO460zdfFbn3nVQ==", "dependencies": { "@grpc/grpc-js": "^1.10.2", "@pbkit/grpc-client": "^0.0.3", @@ -246,7 +181,6 @@ "version": "1.73.2", "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.73.2.tgz", "integrity": "sha512-9WACF8W4Nstj7xiDw3Oom22QmrhBh0VyZyZ7JvvG3gOxLWLlX3hvm5nPVJOGcCE/9fFavBbCUb5A6CIuvMGdoA==", - "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", "@noble/ed25519": "^1.7.0", @@ -273,164 +207,24 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", "dependencies": { "base-x": "^3.0.2" } }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "license": "MIT" - }, "node_modules/@bloxroute/solana-trader-client-ts/node_modules/axios": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz", "integrity": "sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA==", - "license": "MIT", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "license": "Apache-2.0", - "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/borsh/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", - "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/jayson": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz", - "integrity": "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==", - "license": "MIT", - "dependencies": { - "@types/connect": "^3.4.33", - "@types/node": "^12.12.54", - "@types/ws": "^7.4.4", - "commander": "^2.20.3", - "delay": "^5.0.0", - "es6-promisify": "^5.0.0", - "eyes": "^0.1.8", - "isomorphic-ws": "^4.0.1", - "json-stringify-safe": "^5.0.1", - "JSONStream": "^1.3.5", - "lodash": "^4.17.20", - "uuid": "^8.3.2", - "ws": "^7.4.5" - }, - "bin": { - "jayson": "bin/jayson.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/jayson/node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/jayson/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@bloxroute/solana-trader-client-ts/node_modules/superstruct": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", - "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==", - "license": "MIT" - }, "node_modules/@bloxroute/solana-trader-client-ts/node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -457,10 +251,33 @@ "resolved": "https://registry.npmjs.org/borsh/-/borsh-1.0.0.tgz", "integrity": "sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==" }, + "node_modules/@bonfida/sns-records/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/@bonfida/spl-name-service": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@bonfida/spl-name-service/-/spl-name-service-2.5.2.tgz", - "integrity": "sha512-b6kKIB0AQZPpygITUaJT/eVJ8MDHTgDvk06Gyzm/4NmXqsLl0IVu7pYj8gcFZfZqiyKl0dYh/k2m5LdyO8eU6w==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@bonfida/spl-name-service/-/spl-name-service-2.5.4.tgz", + "integrity": "sha512-HPdvdt6mgP6zoNMxPkCADgvqr//8U5Xli/k4whZL5ALtuVB4Jt4nssUKbNR4YJZ9NuMkyzgLyZ9iLUgSNHW4Lw==", "dependencies": { "@bonfida/sns-records": "0.0.1", "@noble/curves": "^1.3.0", @@ -493,21 +310,48 @@ "@solana/web3.js": "^1.47.4" } }, - "node_modules/@coral-xyz/anchor": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.30.1.tgz", - "integrity": "sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==", - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "@coral-xyz/anchor-errors": "^0.30.1", - "@coral-xyz/borsh": "^0.30.1", - "@noble/hashes": "^1.3.1", - "@solana/web3.js": "^1.68.0", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", + "node_modules/@bonfida/spl-name-service/node_modules/borsh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-2.0.0.tgz", + "integrity": "sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==" + }, + "node_modules/@bonfida/spl-name-service/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@coral-xyz/anchor": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.30.1.tgz", + "integrity": "sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==", + "dependencies": { + "@coral-xyz/anchor-errors": "^0.30.1", + "@coral-xyz/borsh": "^0.30.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.68.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", "crypto-hash": "^1.3.0", "eventemitter3": "^4.0.7", "pako": "^2.0.3", @@ -523,19 +367,10 @@ "version": "0.30.1", "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz", "integrity": "sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==", - "license": "Apache-2.0", "engines": { "node": ">=10" } }, - "node_modules/@coral-xyz/anchor/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/@coral-xyz/anchor/node_modules/bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", @@ -544,11 +379,31 @@ "base-x": "^3.0.2" } }, + "node_modules/@coral-xyz/anchor/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@coral-xyz/anchor/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/@coral-xyz/anchor/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + }, "node_modules/@coral-xyz/borsh": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.30.1.tgz", "integrity": "sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==", - "license": "Apache-2.0", "dependencies": { "bn.js": "^5.1.2", "buffer-layout": "^1.2.0" @@ -564,7 +419,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -572,6 +426,21 @@ "node": ">=12" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", @@ -579,7 +448,6 @@ "cpu": [ "arm" ], - "license": "MIT", "optional": true, "os": [ "android" @@ -595,7 +463,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "android" @@ -611,7 +478,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "android" @@ -627,7 +493,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -643,7 +508,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -659,7 +523,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -675,7 +538,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -691,7 +553,6 @@ "cpu": [ "arm" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -707,7 +568,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -723,7 +583,6 @@ "cpu": [ "ia32" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -739,7 +598,6 @@ "cpu": [ "loong64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -755,7 +613,6 @@ "cpu": [ "mips64el" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -771,7 +628,6 @@ "cpu": [ "ppc64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -787,7 +643,6 @@ "cpu": [ "riscv64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -803,7 +658,6 @@ "cpu": [ "s390x" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -819,7 +673,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -828,6 +681,21 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/netbsd-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", @@ -835,7 +703,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -844,6 +711,21 @@ "node": ">=12" } }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/openbsd-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", @@ -851,7 +733,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -867,7 +748,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "sunos" @@ -883,7 +763,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -899,7 +778,6 @@ "cpu": [ "ia32" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -915,7 +793,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -1377,7 +1254,6 @@ "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -1598,10 +1474,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.1.tgz", - "integrity": "sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==", - "license": "Apache-2.0", + "version": "1.12.6", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.6.tgz", + "integrity": "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==", "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" @@ -1614,7 +1489,6 @@ "version": "0.7.13", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", - "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", @@ -1631,145 +1505,350 @@ "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } }, + "node_modules/@inquirer/checkbox": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.2.tgz", + "integrity": "sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ==", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/figures": "^1.0.10", + "@inquirer/type": "^3.0.4", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@inquirer/confirm": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.14.tgz", - "integrity": "sha512-nbLSX37b2dGPtKWL3rPuR/5hOuD30S+pqJ/MuFiUEgN6GiMs8UMxiurKAMDzKt6C95ltjupa8zH6+3csXNHWpA==", - "license": "MIT", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.6.tgz", + "integrity": "sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==", "dependencies": { - "@inquirer/core": "^9.0.2", - "@inquirer/type": "^1.4.0" + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/core": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.2.tgz", - "integrity": "sha512-nguvH3TZar3ACwbytZrraRTzGqyxJfYJwv+ZwqZNatAosdWQMP1GV8zvmkNlBe2JeZSaw0WYBHZk52pDpWC9qA==", - "license": "MIT", + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.7.tgz", + "integrity": "sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA==", "dependencies": { - "@inquirer/figures": "^1.0.3", - "@inquirer/type": "^1.4.0", - "@types/mute-stream": "^0.0.4", - "@types/node": "^20.14.9", - "@types/wrap-ansi": "^3.0.0", + "@inquirer/figures": "^1.0.10", + "@inquirer/type": "^3.0.4", "ansi-escapes": "^4.3.2", - "cli-spinners": "^2.9.2", "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", + "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/core/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "license": "ISC", + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">= 12" + "node": ">=8" } }, - "node_modules/@inquirer/core/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "license": "ISC", + "node_modules/@inquirer/editor": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.7.tgz", + "integrity": "sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA==", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4", + "external-editor": "^3.1.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/core/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", + "node_modules/@inquirer/expand": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.9.tgz", + "integrity": "sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig==", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4", + "yoctocolors-cjs": "^2.1.2" + }, "engines": { - "node": ">=14" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/figures": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.3.tgz", - "integrity": "sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==", - "license": "MIT", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.10.tgz", + "integrity": "sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==", "engines": { "node": ">=18" } }, - "node_modules/@inquirer/type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.4.0.tgz", - "integrity": "sha512-AjOqykVyjdJQvtfkNDGUyMYGF8xN50VUxftCQWsOyIo4DFRLr6VQhW0VItGI1JIyQGCGgIpKa7hMMwNhZb4OIw==", - "license": "MIT", + "node_modules/@inquirer/input": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.6.tgz", + "integrity": "sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ==", "dependencies": { - "mute-stream": "^1.0.0" + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/type/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "license": "ISC", + "node_modules/@inquirer/number": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.9.tgz", + "integrity": "sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w==", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@irys/arweave": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@irys/arweave/-/arweave-0.0.2.tgz", - "integrity": "sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg==", + "node_modules/@inquirer/password": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.9.tgz", + "integrity": "sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ==", "dependencies": { - "asn1.js": "^5.4.1", - "async-retry": "^1.3.3", - "axios": "^1.4.0", - "base64-js": "^1.5.1", - "bignumber.js": "^9.1.1" + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@irys/query": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@irys/query/-/query-0.0.8.tgz", - "integrity": "sha512-J8zCZDos2vFogSbroCJHZJq5gnPZEal01Iy3duXAotjIMgrI2ElDANiqEbaP1JAImR1jdUo1ChJnZB7MRLN9Hw==", + "node_modules/@inquirer/prompts": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz", + "integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==", "dependencies": { - "async-retry": "^1.3.3", - "axios": "^1.4.0" + "@inquirer/checkbox": "^4.1.2", + "@inquirer/confirm": "^5.1.6", + "@inquirer/editor": "^4.2.7", + "@inquirer/expand": "^4.0.9", + "@inquirer/input": "^4.1.6", + "@inquirer/number": "^3.0.9", + "@inquirer/password": "^4.0.9", + "@inquirer/rawlist": "^4.0.9", + "@inquirer/search": "^3.0.9", + "@inquirer/select": "^4.0.9" }, "engines": { - "node": ">=16.10.0" - } - }, + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.9.tgz", + "integrity": "sha512-+5t6ebehKqgoxV8fXwE49HkSF2Rc9ijNiVGEQZwvbMI61/Q5RcD+jWD6Gs1tKdz5lkI8GRBL31iO0HjGK1bv+A==", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.9.tgz", + "integrity": "sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA==", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/figures": "^1.0.10", + "@inquirer/type": "^3.0.4", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.9.tgz", + "integrity": "sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg==", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/figures": "^1.0.10", + "@inquirer/type": "^3.0.4", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.4.tgz", + "integrity": "sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@irys/arweave": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@irys/arweave/-/arweave-0.0.2.tgz", + "integrity": "sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg==", + "dependencies": { + "asn1.js": "^5.4.1", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "base64-js": "^1.5.1", + "bignumber.js": "^9.1.1" + } + }, + "node_modules/@irys/query": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@irys/query/-/query-0.0.8.tgz", + "integrity": "sha512-J8zCZDos2vFogSbroCJHZJq5gnPZEal01Iy3duXAotjIMgrI2ElDANiqEbaP1JAImR1jdUo1ChJnZB7MRLN9Hw==", + "dependencies": { + "async-retry": "^1.3.3", + "axios": "^1.4.0" + }, + "engines": { + "node": ">=16.10.0" + } + }, "node_modules/@irys/sdk": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@irys/sdk/-/sdk-0.2.1.tgz", - "integrity": "sha512-ylSjawDGSgAxMwXxEiZBpY+QKHXR2Df1v0QSLED7vByt2D7NhZI1gBS1yoSUokSRuzuYJDlIPAe8ITQ1cVY7nQ==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@irys/sdk/-/sdk-0.2.11.tgz", + "integrity": "sha512-z3zKlKYEqRHuCGyyVoikL1lT4Jwt8wv7e4MrMThNfhfT/bdKQHD9lEVsX77DBnLJrBBKKg5rRcEzMtVkpNx3QA==", + "deprecated": "Arweave support is deprecated - We recommend migrating to the Irys datachain: https://migrate-to.irys.xyz/", "dependencies": { - "@aptos-labs/ts-sdk": "^1.9.0", + "@aptos-labs/ts-sdk": "^1.26.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", @@ -1804,6 +1883,40 @@ "node": ">=16.10.0" } }, + "node_modules/@irys/sdk/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@irys/sdk/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@irys/sdk/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, "node_modules/@irys/sdk/node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -1812,274 +1925,306 @@ "node": ">= 12" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", + "node_modules/@irys/sdk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=6.0.0" + "node": ">=0.8.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "license": "MIT", + "node_modules/@irys/sdk/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "node_modules/@irys/sdk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" } }, - "node_modules/@lightprotocol/compressed-token": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@lightprotocol/compressed-token/-/compressed-token-0.3.4.tgz", - "integrity": "sha512-nq39drCLuaFE+dahINlHnlQaCz73As3g3ewkjMXtEG6dGYvRHuGRd+xVtl6BhC6Ww1pMRxYxNhR4hXbPgaYB8Q==", - "license": "Apache-2.0", + "node_modules/@irys/sdk/node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dependencies": { - "@coral-xyz/anchor": "0.29.0", - "@solana/spl-token": "^0.3.11", - "buffer": "^6.0.3", - "tweetnacl": "^1.0.3" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, - "peerDependencies": { - "@lightprotocol/stateless.js": "0.4.4", - "@solana/web3.js": "^1.91.8" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@lightprotocol/compressed-token/node_modules/@coral-xyz/anchor": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz", - "integrity": "sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==", - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "@coral-xyz/borsh": "^0.29.0", - "@noble/hashes": "^1.3.1", - "@solana/web3.js": "^1.68.0", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "superstruct": "^0.15.4", - "toml": "^3.0.0" - }, + "node_modules/@irys/sdk/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { - "node": ">=11" + "node": ">=6" } }, - "node_modules/@lightprotocol/compressed-token/node_modules/@coral-xyz/borsh": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.29.0.tgz", - "integrity": "sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==", - "license": "Apache-2.0", + "node_modules/@irys/sdk/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/@irys/sdk/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, - "peerDependencies": { - "@solana/web3.js": "^1.68.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@lightprotocol/compressed-token/node_modules/@solana/spl-token": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", - "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", - "license": "Apache-2.0", + "node_modules/@irys/sdk/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-metadata": "^0.1.2", - "buffer": "^6.0.3" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=16" + "node": ">=8" + } + }, + "node_modules/@irys/sdk/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@irys/sdk/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/@irys/sdk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependencies": { - "@solana/web3.js": "^1.88.0" + "engines": { + "node": ">=8" } }, - "node_modules/@lightprotocol/compressed-token/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", + "node_modules/@irys/sdk/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { - "safe-buffer": "^5.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@lightprotocol/compressed-token/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": { - "base-x": "^3.0.2" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@lightprotocol/hasher.rs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@lightprotocol/hasher.rs/-/hasher.rs-0.2.0.tgz", - "integrity": "sha512-ttKBiKNmq0xJbKzT02r7KJH9Pmigu/8C2LJFCsz0aQNh6Xh3nH2by6RwxHTImE/N4UyAVb6ii0zAJl0DnZo/0w==", - "license": "ISC" + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/@lightprotocol/stateless.js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@lightprotocol/stateless.js/-/stateless.js-0.4.4.tgz", - "integrity": "sha512-FmnbH62G9BDtIwz3RF/j+dJsWy/dRRUJZ+AE2W6GsTzzebx6qkR8YvHh6spuEBFJSrJT9C2aHHVJ4uaxRcGeMg==", - "license": "Apache-2.0", - "dependencies": { - "@coral-xyz/anchor": "0.29.0", - "@noble/hashes": "^1.3.2", - "buffer": "^6.0.3", - "superstruct": "^1.0.3", - "tweetnacl": "^1.0.3" + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" }, - "peerDependencies": { - "@solana/web3.js": "^1.91.8" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@lightprotocol/stateless.js/node_modules/@coral-xyz/anchor": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz", - "integrity": "sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==", - "license": "(MIT OR Apache-2.0)", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "@coral-xyz/borsh": "^0.29.0", - "@noble/hashes": "^1.3.1", - "@solana/web3.js": "^1.68.0", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "superstruct": "^0.15.4", - "toml": "^3.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=11" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@lightprotocol/stateless.js/node_modules/@coral-xyz/anchor/node_modules/superstruct": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", - "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==", - "license": "MIT" + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "node_modules/@lightprotocol/stateless.js/node_modules/@coral-xyz/borsh": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.29.0.tgz", - "integrity": "sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==", - "license": "Apache-2.0", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, - "peerDependencies": { - "@solana/web3.js": "^1.68.0" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@lightprotocol/stateless.js/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dependencies": { - "safe-buffer": "^5.0.1" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@lightprotocol/stateless.js/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { - "base-x": "^3.0.2" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@lightprotocol/stateless.js/node_modules/superstruct": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", - "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", - "license": "MIT", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { - "node": ">=14.0.0" + "node": ">=6.0.0" } }, - "node_modules/@lightprotocol/zk-compression-cli": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/@lightprotocol/zk-compression-cli/-/zk-compression-cli-0.4.7.tgz", - "integrity": "sha512-tNWWRaS1vF4Jxe/jMg8Xtjy+vy3C/Jbx6x7EQnRc8InMtZkTHn+7IcrmBt9iTtEsBtZnSvE/b7dn2aOl41VL9A==", - "hasInstallScript": true, - "license": "Apache-2.0", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@lightprotocol/compressed-token": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@lightprotocol/compressed-token/-/compressed-token-0.3.4.tgz", + "integrity": "sha512-nq39drCLuaFE+dahINlHnlQaCz73As3g3ewkjMXtEG6dGYvRHuGRd+xVtl6BhC6Ww1pMRxYxNhR4hXbPgaYB8Q==", "dependencies": { "@coral-xyz/anchor": "0.29.0", - "@lightprotocol/compressed-token": "0.3.4", - "@lightprotocol/hasher.rs": "0.2.0", - "@lightprotocol/stateless.js": "0.4.4", - "@oclif/core": "^3.26.2", - "@oclif/plugin-autocomplete": "^3.0.13", - "@oclif/plugin-help": "^6.0.20", - "@oclif/plugin-not-found": "^3.1.2", - "@oclif/plugin-plugins": "^5.0.7", - "@solana-developers/helpers": "^1.5.1", - "@solana/web3.js": "^1.91.8", - "axios": "^1.6.8", - "case-anything": "^2.1.13", - "cli-progress": "^3.12.0", - "cli-spinners": "^2.9.2", - "dotenv": "^16.4.5", - "ffjavascript": "^0.3.0", - "find-process": "^1.4.7", - "node-fetch": "^3.3.2", - "snake-case": "^3.0.4", - "tar": "^6.2.1", - "tweetnacl": "^1.0.3", - "wait-on": "^7.2.0", - "which": "^4.0.0" - }, - "bin": { - "light": "test_bin/run" + "@solana/spl-token": "^0.3.11", + "buffer": "^6.0.3", + "tweetnacl": "^1.0.3" }, - "engines": { - "node": ">=12.0.0" + "peerDependencies": { + "@lightprotocol/stateless.js": "0.4.4", + "@solana/web3.js": "^1.91.8" } }, - "node_modules/@lightprotocol/zk-compression-cli/node_modules/@coral-xyz/anchor": { + "node_modules/@lightprotocol/compressed-token/node_modules/@coral-xyz/anchor": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz", "integrity": "sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==", - "license": "(MIT OR Apache-2.0)", "dependencies": { "@coral-xyz/borsh": "^0.29.0", "@noble/hashes": "^1.3.1", @@ -2100,11 +2245,10 @@ "node": ">=11" } }, - "node_modules/@lightprotocol/zk-compression-cli/node_modules/@coral-xyz/borsh": { + "node_modules/@lightprotocol/compressed-token/node_modules/@coral-xyz/borsh": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.29.0.tgz", "integrity": "sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==", - "license": "Apache-2.0", "dependencies": { "bn.js": "^5.1.2", "buffer-layout": "^1.2.0" @@ -2116,76 +2260,103 @@ "@solana/web3.js": "^1.68.0" } }, - "node_modules/@lightprotocol/zk-compression-cli/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", + "node_modules/@lightprotocol/compressed-token/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", "dependencies": { - "safe-buffer": "^5.0.1" + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" } }, - "node_modules/@lightprotocol/zk-compression-cli/node_modules/bs58": { + "node_modules/@lightprotocol/compressed-token/node_modules/bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", "dependencies": { "base-x": "^3.0.2" } }, - "node_modules/@lightprotocol/zk-compression-cli/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", + "node_modules/@lightprotocol/compressed-token/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@lightprotocol/compressed-token/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@mercurial-finance/dynamic-amm-sdk": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-1.0.3.tgz", - "integrity": "sha512-xrlhaGndacLrBGXGruPpsqhdYj4uxS/DSuTCxmzMb966Vt9rgV5OgO+KtCk8h8slzwFoyKyRLJzVKcos5IdxtA==", - "license": "MIT", + "node_modules/@lightprotocol/compressed-token/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/@lightprotocol/compressed-token/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + }, + "node_modules/@lightprotocol/hasher.rs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@lightprotocol/hasher.rs/-/hasher.rs-0.2.0.tgz", + "integrity": "sha512-ttKBiKNmq0xJbKzT02r7KJH9Pmigu/8C2LJFCsz0aQNh6Xh3nH2by6RwxHTImE/N4UyAVb6ii0zAJl0DnZo/0w==" + }, + "node_modules/@lightprotocol/stateless.js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@lightprotocol/stateless.js/-/stateless.js-0.4.4.tgz", + "integrity": "sha512-FmnbH62G9BDtIwz3RF/j+dJsWy/dRRUJZ+AE2W6GsTzzebx6qkR8YvHh6spuEBFJSrJT9C2aHHVJ4uaxRcGeMg==", "dependencies": { - "@coral-xyz/anchor": "^0.28.0", - "@coral-xyz/borsh": "^0.28.0", - "@mercurial-finance/token-math": "6.0.0", - "@mercurial-finance/vault-sdk": "2.1.0", - "@project-serum/anchor": "^0.24.2", - "@solana/buffer-layout": "^3 || ^4", - "@solana/spl-token": "^0.4.6", - "@solana/spl-token-registry": "^0.2.4574", - "@solana/web3.js": "^1.91.6", - "bn-sqrt": "^1.0.0", - "bn.js": "5.2.1", - "decimal.js": "^10.4.1", - "dotenv": "^16.0.1", - "invariant": "^2.2.4" + "@coral-xyz/anchor": "0.29.0", + "@noble/hashes": "^1.3.2", + "buffer": "^6.0.3", + "superstruct": "^1.0.3", + "tweetnacl": "^1.0.3" }, "peerDependencies": { - "@solana/buffer-layout": "^3 || ^4" + "@solana/web3.js": "^1.91.8" } }, - "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@coral-xyz/anchor": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz", - "integrity": "sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw==", - "license": "(MIT OR Apache-2.0)", + "node_modules/@lightprotocol/stateless.js/node_modules/@coral-xyz/anchor": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz", + "integrity": "sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==", "dependencies": { - "@coral-xyz/borsh": "^0.28.0", + "@coral-xyz/borsh": "^0.29.0", + "@noble/hashes": "^1.3.1", "@solana/web3.js": "^1.68.0", - "base64-js": "^1.5.1", "bn.js": "^5.1.2", "bs58": "^4.0.1", "buffer-layout": "^1.2.2", @@ -2193,7 +2364,6 @@ "cross-fetch": "^3.1.5", "crypto-hash": "^1.3.0", "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", "pako": "^2.0.3", "snake-case": "^3.0.4", "superstruct": "^0.15.4", @@ -2203,11 +2373,15 @@ "node": ">=11" } }, - "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@coral-xyz/borsh": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", - "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", - "license": "Apache-2.0", + "node_modules/@lightprotocol/stateless.js/node_modules/@coral-xyz/anchor/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + }, + "node_modules/@lightprotocol/stateless.js/node_modules/@coral-xyz/borsh": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.29.0.tgz", + "integrity": "sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==", "dependencies": { "bn.js": "^5.1.2", "buffer-layout": "^1.2.0" @@ -2219,95 +2393,236 @@ "@solana/web3.js": "^1.68.0" } }, - "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@project-serum/anchor": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", - "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", - "license": "(MIT OR Apache-2.0)", + "node_modules/@lightprotocol/stateless.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "@project-serum/borsh": "^0.2.5", - "@solana/web3.js": "^1.36.0", - "base64-js": "^1.5.1", + "base-x": "^3.0.2" + } + }, + "node_modules/@lightprotocol/stateless.js/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@lightprotocol/stateless.js/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lightprotocol/stateless.js/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/@lightprotocol/stateless.js/node_modules/superstruct": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@lightprotocol/zk-compression-cli": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/@lightprotocol/zk-compression-cli/-/zk-compression-cli-0.4.7.tgz", + "integrity": "sha512-tNWWRaS1vF4Jxe/jMg8Xtjy+vy3C/Jbx6x7EQnRc8InMtZkTHn+7IcrmBt9iTtEsBtZnSvE/b7dn2aOl41VL9A==", + "hasInstallScript": true, + "dependencies": { + "@coral-xyz/anchor": "0.29.0", + "@lightprotocol/compressed-token": "0.3.4", + "@lightprotocol/hasher.rs": "0.2.0", + "@lightprotocol/stateless.js": "0.4.4", + "@oclif/core": "^3.26.2", + "@oclif/plugin-autocomplete": "^3.0.13", + "@oclif/plugin-help": "^6.0.20", + "@oclif/plugin-not-found": "^3.1.2", + "@oclif/plugin-plugins": "^5.0.7", + "@solana-developers/helpers": "^1.5.1", + "@solana/web3.js": "^1.91.8", + "axios": "^1.6.8", + "case-anything": "^2.1.13", + "cli-progress": "^3.12.0", + "cli-spinners": "^2.9.2", + "dotenv": "^16.4.5", + "ffjavascript": "^0.3.0", + "find-process": "^1.4.7", + "node-fetch": "^3.3.2", + "snake-case": "^3.0.4", + "tar": "^6.2.1", + "tweetnacl": "^1.0.3", + "wait-on": "^7.2.0", + "which": "^4.0.0" + }, + "bin": { + "light": "test_bin/run" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@lightprotocol/zk-compression-cli/node_modules/@coral-xyz/anchor": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz", + "integrity": "sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==", + "dependencies": { + "@coral-xyz/borsh": "^0.29.0", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.68.0", "bn.js": "^5.1.2", "bs58": "^4.0.1", "buffer-layout": "^1.2.2", - "camelcase": "^5.3.1", + "camelcase": "^6.3.0", "cross-fetch": "^3.1.5", "crypto-hash": "^1.3.0", "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", "pako": "^2.0.3", "snake-case": "^3.0.4", + "superstruct": "^0.15.4", "toml": "^3.0.0" }, "engines": { "node": ">=11" } }, - "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@project-serum/anchor/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", + "node_modules/@lightprotocol/zk-compression-cli/node_modules/@coral-xyz/borsh": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.29.0.tgz", + "integrity": "sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==", "dependencies": { - "safe-buffer": "^5.0.1" + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" } }, - "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/bs58": { + "node_modules/@lightprotocol/zk-compression-cli/node_modules/bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", "dependencies": { "base-x": "^3.0.2" } }, - "node_modules/@mercurial-finance/token-math": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@mercurial-finance/token-math/-/token-math-6.0.0.tgz", - "integrity": "sha512-/o2Kr+gXXE4UvkBJ4QLcbiBmKUyBvU1C0tty6y4smJxEItJYiH6yQzRSWpkBhP5Q387n/j05nqoizX4uZkBlwg==", - "license": "MIT", + "node_modules/@lightprotocol/zk-compression-cli/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lightprotocol/zk-compression-cli/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@lightprotocol/zk-compression-cli/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dependencies": { - "@types/big.js": "^6.2.2", - "big.js": "^6.2.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.6.2" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/@mercurial-finance/vault-sdk": { + "node_modules/@lightprotocol/zk-compression-cli/node_modules/pako": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@mercurial-finance/vault-sdk/-/vault-sdk-2.1.0.tgz", - "integrity": "sha512-B3HQD9gQ6l6nAMN5DItgYZP3RZXzhQgZiaNqong4GkEmMkPQaNep4K5kokBAPksWAWCpELi0u+TcpOc/6S4u2g==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/@lightprotocol/zk-compression-cli/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + }, + "node_modules/@lightprotocol/zk-compression-cli/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@mercurial-finance/dynamic-amm-sdk": { + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-1.1.23.tgz", + "integrity": "sha512-bI1X+785iqGiys5iLbuI6G1oGSP5crE1Taw2HEFIhKGbEssi6nRHVI9F6YyZbKq00PKKi8DjFoVAwN7J3RNmPg==", "dependencies": { "@coral-xyz/anchor": "^0.28.0", - "@solana/buffer-layout": "^4.0.1", + "@coral-xyz/borsh": "^0.28.0", + "@mercurial-finance/token-math": "6.0.0", + "@mercurial-finance/vault-sdk": "2.2.0", + "@metaplex-foundation/mpl-token-metadata": "~2.13.0", + "@meteora-ag/m3m3": "1.0.4", + "@project-serum/anchor": "^0.24.2", + "@solana/buffer-layout": "^3 || ^4", "@solana/spl-token": "^0.4.6", "@solana/spl-token-registry": "^0.2.4574", - "@solana/web3.js": "^1.91.6", + "@solana/web3.js": "^1.95.8", + "bn-sqrt": "^1.0.0", "bn.js": "5.2.1", - "cross-fetch": "^3.1.5", - "decimal.js": "10.3.1", - "jsbi": "4.3.0" + "decimal.js": "^10.4.1", + "dotenv": "^16.0.1", + "invariant": "^2.2.4" + }, + "peerDependencies": { + "@solana/buffer-layout": "^3 || ^4" } }, - "node_modules/@mercurial-finance/vault-sdk/node_modules/@coral-xyz/anchor": { + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@coral-xyz/anchor": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz", "integrity": "sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw==", - "license": "(MIT OR Apache-2.0)", "dependencies": { "@coral-xyz/borsh": "^0.28.0", "@solana/web3.js": "^1.68.0", @@ -2329,11 +2644,10 @@ "node": ">=11" } }, - "node_modules/@mercurial-finance/vault-sdk/node_modules/@coral-xyz/borsh": { + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@coral-xyz/borsh": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", - "license": "Apache-2.0", "dependencies": { "bn.js": "^5.1.2", "buffer-layout": "^1.2.0" @@ -2345,162 +2659,7 @@ "@solana/web3.js": "^1.68.0" } }, - "node_modules/@mercurial-finance/vault-sdk/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@mercurial-finance/vault-sdk/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/@mercurial-finance/vault-sdk/node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "license": "MIT" - }, - "node_modules/@metaplex-foundation/beet": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.7.1.tgz", - "integrity": "sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==", - "dependencies": { - "ansicolors": "^0.3.2", - "bn.js": "^5.2.0", - "debug": "^4.3.3" - } - }, - "node_modules/@metaplex-foundation/beet-solana": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz", - "integrity": "sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==", - "dependencies": { - "@metaplex-foundation/beet": ">=0.1.0", - "@solana/web3.js": "^1.56.2", - "bs58": "^5.0.0", - "debug": "^4.3.4" - } - }, - "node_modules/@metaplex-foundation/cusper": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz", - "integrity": "sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==" - }, - "node_modules/@metaplex-foundation/js": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/js/-/js-0.20.1.tgz", - "integrity": "sha512-aqiLoEiToXdfI5pS+17/GN/dIO2D31gLoVQvEKDQi9XcnOPVhfJerXDmwgKbhp79OGoYxtlvVw+b2suacoUzGQ==", - "dependencies": { - "@irys/sdk": "^0.0.2", - "@metaplex-foundation/beet": "0.7.1", - "@metaplex-foundation/mpl-auction-house": "^2.3.0", - "@metaplex-foundation/mpl-bubblegum": "^0.6.2", - "@metaplex-foundation/mpl-candy-guard": "^0.3.0", - "@metaplex-foundation/mpl-candy-machine": "^5.0.0", - "@metaplex-foundation/mpl-candy-machine-core": "^0.1.2", - "@metaplex-foundation/mpl-token-metadata": "^2.11.0", - "@noble/ed25519": "^1.7.1", - "@noble/hashes": "^1.1.3", - "@solana/spl-account-compression": "^0.1.8", - "@solana/spl-token": "^0.3.5", - "@solana/web3.js": "^1.63.1", - "bignumber.js": "^9.0.2", - "bn.js": "^5.2.1", - "bs58": "^5.0.0", - "buffer": "^6.0.3", - "debug": "^4.3.4", - "eventemitter3": "^4.0.7", - "lodash.clonedeep": "^4.5.0", - "lodash.isequal": "^4.5.0", - "merkletreejs": "^0.3.11", - "mime": "^3.0.0", - "node-fetch": "^2.6.7" - } - }, - "node_modules/@metaplex-foundation/js/node_modules/@irys/query": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@irys/query/-/query-0.0.1.tgz", - "integrity": "sha512-7TCyR+Qn+F54IQQx5PlERgqNwgIQik8hY55iZl/silTHhCo1MI2pvx5BozqPUVCc8/KqRsc2nZd8Bc29XGUjRQ==", - "dependencies": { - "async-retry": "^1.3.3", - "axios": "^1.4.0" - }, - "engines": { - "node": ">=16.10.0" - } - }, - "node_modules/@metaplex-foundation/js/node_modules/@irys/sdk": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@irys/sdk/-/sdk-0.0.2.tgz", - "integrity": "sha512-un/e/CmTpgT042gDwCN3AtISrR9OYGMY6V+442pFmSWKrwrsDoIXZ8VlLiYKnrtTm+yquGhjfYy0LDqGWq41pA==", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/wallet": "^5.7.0", - "@irys/query": "^0.0.1", - "@near-js/crypto": "^0.0.3", - "@near-js/keystores-browser": "^0.0.3", - "@near-js/providers": "^0.0.4", - "@near-js/transactions": "^0.1.0", - "@solana/web3.js": "^1.36.0", - "@supercharge/promise-pool": "^3.0.0", - "algosdk": "^1.13.1", - "aptos": "=1.8.5", - "arbundles": "^0.10.0", - "async-retry": "^1.3.3", - "axios": "^1.4.0", - "base64url": "^3.0.1", - "bignumber.js": "^9.0.1", - "bs58": "5.0.0", - "commander": "^8.2.0", - "csv": "5.5.3", - "inquirer": "^8.2.0", - "js-sha256": "^0.9.0", - "mime-types": "^2.1.34", - "near-seed-phrase": "^0.2.0" - }, - "bin": { - "irys": "build/cjs/node/cli.js", - "irys-esm": "build/esm/node/cli.js" - }, - "engines": { - "node": ">=16.10.0" - } - }, - "node_modules/@metaplex-foundation/js/node_modules/@metaplex-foundation/beet-solana": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", - "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", - "dependencies": { - "@metaplex-foundation/beet": ">=0.1.0", - "@solana/web3.js": "^1.56.2", - "bs58": "^5.0.0", - "debug": "^4.3.4" - } - }, - "node_modules/@metaplex-foundation/js/node_modules/@metaplex-foundation/mpl-candy-machine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-5.1.0.tgz", - "integrity": "sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==", - "dependencies": { - "@metaplex-foundation/beet": "^0.7.1", - "@metaplex-foundation/beet-solana": "^0.4.0", - "@metaplex-foundation/cusper": "^0.0.2", - "@solana/spl-token": "^0.3.6", - "@solana/web3.js": "^1.66.2" - } - }, - "node_modules/@metaplex-foundation/js/node_modules/@metaplex-foundation/mpl-token-metadata": { + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@metaplex-foundation/mpl-token-metadata": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz", "integrity": "sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==", @@ -2514,7 +2673,7 @@ "debug": "^4.3.4" } }, - "node_modules/@metaplex-foundation/js/node_modules/@solana/spl-token": { + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@solana/spl-token": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", @@ -2531,33 +2690,39 @@ "@solana/web3.js": "^1.88.0" } }, - "node_modules/@metaplex-foundation/js/node_modules/arbundles": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/arbundles/-/arbundles-0.10.1.tgz", - "integrity": "sha512-QYFepxessLCirvRkQK9iQmjxjHz+s50lMNGRwZwpyPWLohuf6ISyj1gkFXJHlMT+rNSrsHxb532glHnKbjwu3A==", + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@project-serum/anchor": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", + "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@irys/arweave": "^0.0.2", - "@noble/ed25519": "^1.6.1", - "base64url": "^3.0.1", + "@project-serum/borsh": "^0.2.5", + "@solana/web3.js": "^1.36.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", "bs58": "^4.0.1", - "keccak": "^3.0.2", - "secp256k1": "^5.0.0" + "buffer-layout": "^1.2.2", + "camelcase": "^5.3.1", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "toml": "^3.0.0" }, - "optionalDependencies": { - "@randlabs/myalgo-connect": "^1.1.2", - "algosdk": "^1.13.1", - "arweave-stream-tx": "^1.1.0", - "multistream": "^4.1.0", - "tmp-promise": "^3.0.2" + "engines": { + "node": ">=11" } }, - "node_modules/@metaplex-foundation/js/node_modules/arbundles/node_modules/bs58": { + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@project-serum/anchor/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", @@ -2565,2903 +2730,2856 @@ "base-x": "^3.0.2" } }, - "node_modules/@metaplex-foundation/js/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "safe-buffer": "^5.0.1" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@metaplex-foundation/js/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": ">= 12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@metaplex-foundation/mpl-auction-house": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-auction-house/-/mpl-auction-house-2.5.1.tgz", - "integrity": "sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==", - "dependencies": { - "@metaplex-foundation/beet": "^0.6.1", - "@metaplex-foundation/beet-solana": "^0.3.1", - "@metaplex-foundation/cusper": "^0.0.2", - "@solana/spl-token": "^0.3.5", - "@solana/web3.js": "^1.56.2", - "bn.js": "^5.2.0" - } + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, - "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@metaplex-foundation/beet": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.6.1.tgz", - "integrity": "sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==", - "dependencies": { - "ansicolors": "^0.3.2", - "bn.js": "^5.2.0", - "debug": "^4.3.3" - } + "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" }, - "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@solana/spl-token": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", - "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "node_modules/@mercurial-finance/token-math": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@mercurial-finance/token-math/-/token-math-6.0.0.tgz", + "integrity": "sha512-/o2Kr+gXXE4UvkBJ4QLcbiBmKUyBvU1C0tty6y4smJxEItJYiH6yQzRSWpkBhP5Q387n/j05nqoizX4uZkBlwg==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-metadata": "^0.1.2", - "buffer": "^6.0.3" + "@types/big.js": "^6.2.2", + "big.js": "^6.2.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.88.0" - } - }, - "node_modules/@metaplex-foundation/mpl-bubblegum": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-bubblegum/-/mpl-bubblegum-0.6.2.tgz", - "integrity": "sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==", - "dependencies": { - "@metaplex-foundation/beet": "0.7.1", - "@metaplex-foundation/beet-solana": "0.4.0", - "@metaplex-foundation/cusper": "^0.0.2", - "@metaplex-foundation/mpl-token-metadata": "^2.5.2", - "@solana/spl-account-compression": "^0.1.4", - "@solana/spl-token": "^0.1.8", - "@solana/web3.js": "^1.50.1", - "bn.js": "^5.2.0", - "js-sha3": "^0.8.0" + "node": ">=10" } }, - "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/beet-solana": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz", - "integrity": "sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==", + "node_modules/@mercurial-finance/vault-sdk": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mercurial-finance/vault-sdk/-/vault-sdk-2.2.0.tgz", + "integrity": "sha512-Q6Ejkl/mDXR+d4K1p9TL0FJ8p18hQH2rUwPwq+1twLxoHvmHeHM+9bfU3iMLQ+odcC6vh3LXBiMEBdyzgMGXlg==", "dependencies": { - "@metaplex-foundation/beet": ">=0.1.0", - "@solana/web3.js": "^1.56.2", - "bs58": "^5.0.0", - "debug": "^4.3.4" + "@coral-xyz/anchor": "^0.28.0", + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.4.6", + "@solana/spl-token-registry": "^0.2.4574", + "@solana/web3.js": "^1.91.6", + "bn.js": "5.2.1", + "cross-fetch": "^3.1.5", + "decimal.js": "10.3.1", + "jsbi": "4.3.0" } }, - "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/mpl-token-metadata": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz", - "integrity": "sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==", + "node_modules/@mercurial-finance/vault-sdk/node_modules/@coral-xyz/anchor": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz", + "integrity": "sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw==", "dependencies": { - "@metaplex-foundation/beet": "^0.7.1", - "@metaplex-foundation/beet-solana": "^0.4.0", - "@metaplex-foundation/cusper": "^0.0.2", - "@solana/spl-token": "^0.3.6", - "@solana/web3.js": "^1.66.2", - "bn.js": "^5.2.0", - "debug": "^4.3.4" + "@coral-xyz/borsh": "^0.28.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" } }, - "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@solana/spl-token": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", - "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "node_modules/@mercurial-finance/vault-sdk/node_modules/@coral-xyz/borsh": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", + "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-metadata": "^0.1.2", - "buffer": "^6.0.3" + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" }, "engines": { - "node": ">=16" + "node": ">=10" }, "peerDependencies": { - "@solana/web3.js": "^1.88.0" + "@solana/web3.js": "^1.68.0" } }, - "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@solana/spl-token": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", - "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", + "node_modules/@mercurial-finance/vault-sdk/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "@babel/runtime": "^7.10.5", - "@solana/web3.js": "^1.21.0", - "bn.js": "^5.1.0", - "buffer": "6.0.3", - "buffer-layout": "^1.2.0", - "dotenv": "10.0.0" - }, - "engines": { - "node": ">= 10" + "base-x": "^3.0.2" } }, - "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "node_modules/@mercurial-finance/vault-sdk/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@metaplex-foundation/mpl-candy-guard": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-guard/-/mpl-candy-guard-0.3.2.tgz", - "integrity": "sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==", - "dependencies": { - "@metaplex-foundation/beet": "^0.4.0", - "@metaplex-foundation/beet-solana": "^0.3.0", - "@metaplex-foundation/cusper": "^0.0.2", - "@solana/web3.js": "^1.66.2", - "bn.js": "^5.2.0" - } + "node_modules/@mercurial-finance/vault-sdk/node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" }, - "node_modules/@metaplex-foundation/mpl-candy-guard/node_modules/@metaplex-foundation/beet": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", - "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", + "node_modules/@mercurial-finance/vault-sdk/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/@mercurial-finance/vault-sdk/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + }, + "node_modules/@metaplex-foundation/beet": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.7.2.tgz", + "integrity": "sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==", "dependencies": { "ansicolors": "^0.3.2", + "assert": "^2.1.0", "bn.js": "^5.2.0", "debug": "^4.3.3" } }, - "node_modules/@metaplex-foundation/mpl-candy-machine": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-6.0.1.tgz", - "integrity": "sha512-ODm7JWQBPg7w4DXEkLejgLtMqfjxMcQkH+GSMgq9i0KyGd0asD2PVOQoL4QMorNQ4E1pIPAdc31Td57qxG059g==", - "dependencies": { - "@metaplex-foundation/mpl-token-metadata": "3.0.0-alpha.27", - "@metaplex-foundation/mpl-toolbox": "^0.9.0", - "@noble/hashes": "^1.2.0", - "merkletreejs": "^0.3.9" - }, - "peerDependencies": { - "@metaplex-foundation/umi": ">= 0.8.2 < 1" - } - }, - "node_modules/@metaplex-foundation/mpl-candy-machine-core": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine-core/-/mpl-candy-machine-core-0.1.2.tgz", - "integrity": "sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==", + "node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", + "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", "dependencies": { - "@metaplex-foundation/beet": "^0.4.0", - "@metaplex-foundation/beet-solana": "^0.3.0", - "@metaplex-foundation/cusper": "^0.0.2", + "@metaplex-foundation/beet": ">=0.1.0", "@solana/web3.js": "^1.56.2", - "bn.js": "^5.2.0" + "bs58": "^5.0.0", + "debug": "^4.3.4" } }, - "node_modules/@metaplex-foundation/mpl-candy-machine-core/node_modules/@metaplex-foundation/beet": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", - "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", + "node_modules/@metaplex-foundation/cusper": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz", + "integrity": "sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==" + }, + "node_modules/@metaplex-foundation/js": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/js/-/js-0.20.1.tgz", + "integrity": "sha512-aqiLoEiToXdfI5pS+17/GN/dIO2D31gLoVQvEKDQi9XcnOPVhfJerXDmwgKbhp79OGoYxtlvVw+b2suacoUzGQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dependencies": { - "ansicolors": "^0.3.2", - "bn.js": "^5.2.0", - "debug": "^4.3.3" + "@irys/sdk": "^0.0.2", + "@metaplex-foundation/beet": "0.7.1", + "@metaplex-foundation/mpl-auction-house": "^2.3.0", + "@metaplex-foundation/mpl-bubblegum": "^0.6.2", + "@metaplex-foundation/mpl-candy-guard": "^0.3.0", + "@metaplex-foundation/mpl-candy-machine": "^5.0.0", + "@metaplex-foundation/mpl-candy-machine-core": "^0.1.2", + "@metaplex-foundation/mpl-token-metadata": "^2.11.0", + "@noble/ed25519": "^1.7.1", + "@noble/hashes": "^1.1.3", + "@solana/spl-account-compression": "^0.1.8", + "@solana/spl-token": "^0.3.5", + "@solana/web3.js": "^1.63.1", + "bignumber.js": "^9.0.2", + "bn.js": "^5.2.1", + "bs58": "^5.0.0", + "buffer": "^6.0.3", + "debug": "^4.3.4", + "eventemitter3": "^4.0.7", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0", + "merkletreejs": "^0.3.11", + "mime": "^3.0.0", + "node-fetch": "^2.6.7" } }, - "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@metaplex-foundation/mpl-token-metadata": { - "version": "3.0.0-alpha.27", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-3.0.0-alpha.27.tgz", - "integrity": "sha512-MSERz5HB2XZ/K+FOMh0tPeqcZZEpGVzdy7e+Cy3MHg7x52JtbGBDtWIoxBJn1OBZayCBfX9gytEoqrXe2YRGqQ==", + "node_modules/@metaplex-foundation/js/node_modules/@irys/query": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@irys/query/-/query-0.0.1.tgz", + "integrity": "sha512-7TCyR+Qn+F54IQQx5PlERgqNwgIQik8hY55iZl/silTHhCo1MI2pvx5BozqPUVCc8/KqRsc2nZd8Bc29XGUjRQ==", "dependencies": { - "@metaplex-foundation/mpl-toolbox": "^0.9.0" + "async-retry": "^1.3.3", + "axios": "^1.4.0" }, - "peerDependencies": { - "@metaplex-foundation/umi": "^0.8.2" + "engines": { + "node": ">=16.10.0" } }, - "node_modules/@metaplex-foundation/mpl-token-metadata": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-3.2.1.tgz", - "integrity": "sha512-26W1NhQwDWmLOg/pBRYut7x/vEs/5kFS2sWVEY5/X0f2jJOLhnd4NaZQcq+5u+XZsXvm1jq2AtrRGPNK43oqWQ==", + "node_modules/@metaplex-foundation/js/node_modules/@irys/sdk": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@irys/sdk/-/sdk-0.0.2.tgz", + "integrity": "sha512-un/e/CmTpgT042gDwCN3AtISrR9OYGMY6V+442pFmSWKrwrsDoIXZ8VlLiYKnrtTm+yquGhjfYy0LDqGWq41pA==", + "deprecated": "Arweave support is deprecated - We recommend migrating to the Irys datachain: https://migrate-to.irys.xyz/", "dependencies": { - "@metaplex-foundation/mpl-toolbox": "^0.9.4" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/wallet": "^5.7.0", + "@irys/query": "^0.0.1", + "@near-js/crypto": "^0.0.3", + "@near-js/keystores-browser": "^0.0.3", + "@near-js/providers": "^0.0.4", + "@near-js/transactions": "^0.1.0", + "@solana/web3.js": "^1.36.0", + "@supercharge/promise-pool": "^3.0.0", + "algosdk": "^1.13.1", + "aptos": "=1.8.5", + "arbundles": "^0.10.0", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "base64url": "^3.0.1", + "bignumber.js": "^9.0.1", + "bs58": "5.0.0", + "commander": "^8.2.0", + "csv": "5.5.3", + "inquirer": "^8.2.0", + "js-sha256": "^0.9.0", + "mime-types": "^2.1.34", + "near-seed-phrase": "^0.2.0" }, - "peerDependencies": { - "@metaplex-foundation/umi": ">= 0.8.2 < 1" - } - }, - "node_modules/@metaplex-foundation/mpl-toolbox": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-toolbox/-/mpl-toolbox-0.9.4.tgz", - "integrity": "sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ==", - "peerDependencies": { - "@metaplex-foundation/umi": ">= 0.8.2 < 1" + "bin": { + "irys": "build/cjs/node/cli.js", + "irys-esm": "build/esm/node/cli.js" + }, + "engines": { + "node": ">=16.10.0" } }, - "node_modules/@metaplex-foundation/umi": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi/-/umi-0.9.1.tgz", - "integrity": "sha512-IhHoOvp4vfO/++YL+78+iVuLM53+FDwUOZDYgH6lx0jYXyQ27BeaieeR5i+q3A9dz4KxQo5Nzc5aCA1109QGCQ==", + "node_modules/@metaplex-foundation/js/node_modules/@metaplex-foundation/beet": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.7.1.tgz", + "integrity": "sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==", "dependencies": { - "@metaplex-foundation/umi-options": "^0.8.9", - "@metaplex-foundation/umi-public-keys": "^0.8.9", - "@metaplex-foundation/umi-serializers": "^0.9.0" + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" } }, - "node_modules/@metaplex-foundation/umi-bundle-defaults": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-bundle-defaults/-/umi-bundle-defaults-0.9.1.tgz", - "integrity": "sha512-QBaCLrb2D5uhY6pbWdxGPdD3LNKOAZ/Wfp7gEzhAipWmEV75KO7ya3AzaU4JZPHaf9juwdU4wO50WEPRb7YyQg==", - "dependencies": { - "@metaplex-foundation/umi-downloader-http": "^0.9.1", - "@metaplex-foundation/umi-eddsa-web3js": "^0.9.1", - "@metaplex-foundation/umi-http-fetch": "^0.9.1", - "@metaplex-foundation/umi-program-repository": "^0.9.1", - "@metaplex-foundation/umi-rpc-chunk-get-accounts": "^0.9.1", - "@metaplex-foundation/umi-rpc-web3js": "^0.9.1", - "@metaplex-foundation/umi-serializer-data-view": "^0.9.1", - "@metaplex-foundation/umi-transaction-factory-web3js": "^0.9.1" - }, - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1", - "@solana/web3.js": "^1.72.0" + "node_modules/@metaplex-foundation/js/node_modules/@metaplex-foundation/mpl-candy-machine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-5.1.0.tgz", + "integrity": "sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2" } }, - "node_modules/@metaplex-foundation/umi-downloader-http": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-downloader-http/-/umi-downloader-http-0.9.1.tgz", - "integrity": "sha512-T/t9YtkDxovIz5hG0SEBolzet0nTd77hZJSSGCNfrhhgJJtNeIHz+/0K+o7U+ubLddFmtPNxF4KBfmh1jCYCQQ==", - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1" + "node_modules/@metaplex-foundation/js/node_modules/@metaplex-foundation/mpl-token-metadata": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz", + "integrity": "sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0", + "debug": "^4.3.4" } }, - "node_modules/@metaplex-foundation/umi-eddsa-web3js": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-eddsa-web3js/-/umi-eddsa-web3js-0.9.1.tgz", - "integrity": "sha512-D+ZP8jOEzfr1ncF18zRdxfE820xjTf6AIBZd926TRj8dlOFIDfu1J0FGS7pC+52CAC9BRNrRvYQyc1TPORkfTQ==", + "node_modules/@metaplex-foundation/js/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", "dependencies": { - "@metaplex-foundation/umi-web3js-adapters": "^0.9.1", - "@noble/curves": "^1.0.0" + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1", - "@solana/web3.js": "^1.72.0" + "@solana/web3.js": "^1.88.0" } }, - "node_modules/@metaplex-foundation/umi-http-fetch": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-http-fetch/-/umi-http-fetch-0.9.1.tgz", - "integrity": "sha512-Flh5wSbiYmeDg4V6IE9BNX1BH3eewcIzHxZ1RT1sagU0PlDwy37dm0gcU+svYM/usDvnbk4hwOMGcZkhQLN1QQ==", + "node_modules/@metaplex-foundation/js/node_modules/arbundles": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/arbundles/-/arbundles-0.10.1.tgz", + "integrity": "sha512-QYFepxessLCirvRkQK9iQmjxjHz+s50lMNGRwZwpyPWLohuf6ISyj1gkFXJHlMT+rNSrsHxb532glHnKbjwu3A==", "dependencies": { - "node-fetch": "^2.6.7" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@irys/arweave": "^0.0.2", + "@noble/ed25519": "^1.6.1", + "base64url": "^3.0.1", + "bs58": "^4.0.1", + "keccak": "^3.0.2", + "secp256k1": "^5.0.0" }, - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1" - } - }, - "node_modules/@metaplex-foundation/umi-options": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-options/-/umi-options-0.8.9.tgz", - "integrity": "sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==" - }, - "node_modules/@metaplex-foundation/umi-program-repository": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-program-repository/-/umi-program-repository-0.9.1.tgz", - "integrity": "sha512-6SawFMO4IZdk4y+D/+o8CyYnfmy8kcOqhQsX3fUMqIXSzz0vzMT2/dDTMfLsuTVyULnaW/VYm26cmYBjVqZTlw==", - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1" + "optionalDependencies": { + "@randlabs/myalgo-connect": "^1.1.2", + "algosdk": "^1.13.1", + "arweave-stream-tx": "^1.1.0", + "multistream": "^4.1.0", + "tmp-promise": "^3.0.2" } }, - "node_modules/@metaplex-foundation/umi-public-keys": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-public-keys/-/umi-public-keys-0.8.9.tgz", - "integrity": "sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==", + "node_modules/@metaplex-foundation/js/node_modules/arbundles/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "@metaplex-foundation/umi-serializers-encodings": "^0.8.9" + "base-x": "^3.0.2" } }, - "node_modules/@metaplex-foundation/umi-rpc-chunk-get-accounts": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-rpc-chunk-get-accounts/-/umi-rpc-chunk-get-accounts-0.9.1.tgz", - "integrity": "sha512-WxF4DxSBJXzrGfmJ+X4DjF4rk9as/0EnkpGo0DdtHTZNqIfRY9mqi8OPRe/JhSjYzWFCC0ngjanqShhcEetB4A==", - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1" + "node_modules/@metaplex-foundation/js/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@metaplex-foundation/umi-rpc-web3js": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-rpc-web3js/-/umi-rpc-web3js-0.9.1.tgz", - "integrity": "sha512-kOJEc9IWMX+H7dI5zZZimww1w0A6yd2V/fsQHKB/kHddja7JoPK4Au68n45Pi0vb3HY7riCQN9XMqOOPD5tcxA==", + "node_modules/@metaplex-foundation/js/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "@metaplex-foundation/umi-web3js-adapters": "^0.9.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1", - "@solana/web3.js": "^1.72.0" - } - }, - "node_modules/@metaplex-foundation/umi-serializer-data-view": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializer-data-view/-/umi-serializer-data-view-0.9.1.tgz", - "integrity": "sha512-teilMc3abBrdLtgQ0PqnNXvmdsjNFPk4sVbM/flxoh9edyRQCAJmyK7DEA7cXCYfhBVX0jwSJIEcqTDa+r+jdw==", - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@metaplex-foundation/umi-serializers": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers/-/umi-serializers-0.9.0.tgz", - "integrity": "sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==", + "node_modules/@metaplex-foundation/js/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { - "@metaplex-foundation/umi-options": "^0.8.9", - "@metaplex-foundation/umi-public-keys": "^0.8.9", - "@metaplex-foundation/umi-serializers-core": "^0.8.9", - "@metaplex-foundation/umi-serializers-encodings": "^0.8.9", - "@metaplex-foundation/umi-serializers-numbers": "^0.8.9" + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@metaplex-foundation/umi-serializers-core": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-0.8.9.tgz", - "integrity": "sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==" - }, - "node_modules/@metaplex-foundation/umi-serializers-encodings": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-0.8.9.tgz", - "integrity": "sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==", - "dependencies": { - "@metaplex-foundation/umi-serializers-core": "^0.8.9" + "node_modules/@metaplex-foundation/js/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" } }, - "node_modules/@metaplex-foundation/umi-serializers-numbers": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-0.8.9.tgz", - "integrity": "sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==", - "dependencies": { - "@metaplex-foundation/umi-serializers-core": "^0.8.9" + "node_modules/@metaplex-foundation/js/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" } }, - "node_modules/@metaplex-foundation/umi-transaction-factory-web3js": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-transaction-factory-web3js/-/umi-transaction-factory-web3js-0.9.1.tgz", - "integrity": "sha512-DBBvaMpR6pR3ZpyaRD/0QSTjS+3lxHIUZYAqZi0JYsTyYqNTNsdKVbeu6uLjbeyoJbmqgKVZ0nZgcokEKx49eg==", - "dependencies": { - "@metaplex-foundation/umi-web3js-adapters": "^0.9.1" - }, - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1", - "@solana/web3.js": "^1.72.0" + "node_modules/@metaplex-foundation/js/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/@metaplex-foundation/umi-web3js-adapters": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-web3js-adapters/-/umi-web3js-adapters-0.9.1.tgz", - "integrity": "sha512-O6lQGJFebRM8P67ajvUpuctJ/J39Lylp4wyg8E1tHmFxUsdBC7M9qBixi/WmCiNKgSfVrq6MmiYaba3OSrtqwg==", + "node_modules/@metaplex-foundation/js/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { - "buffer": "^6.0.3" + "escape-string-regexp": "^1.0.5" }, - "peerDependencies": { - "@metaplex-foundation/umi": "^0.9.1", - "@solana/web3.js": "^1.72.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@meteora-ag/dlmm": { - "version": "1.0.54", - "resolved": "https://registry.npmjs.org/@meteora-ag/dlmm/-/dlmm-1.0.54.tgz", - "integrity": "sha512-CDPsGgrqpv1LlQGb7y3rnogRJMh29pGtWigmtbD9aoBl90L/nj1jAeJStyqpij3zsG6Eeo2EG6QvL0nqLtbi6Q==", - "license": "ISC", - "dependencies": { - "@coral-xyz/anchor": "^0.28.0", - "@solana/buffer-layout": "^4.0.1", - "@solana/spl-token": "0.3.5", - "@solana/web3.js": "~1.78.3", - "decimal.js": "^10.4.2", - "gaussian": "^1.3.0" + "node_modules/@metaplex-foundation/js/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" } }, - "node_modules/@meteora-ag/dlmm/node_modules/@coral-xyz/anchor": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz", - "integrity": "sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw==", - "license": "(MIT OR Apache-2.0)", + "node_modules/@metaplex-foundation/js/node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dependencies": { - "@coral-xyz/borsh": "^0.28.0", - "@solana/web3.js": "^1.68.0", - "base64-js": "^1.5.1", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "superstruct": "^0.15.4", - "toml": "^3.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { - "node": ">=11" + "node": ">=12.0.0" } }, - "node_modules/@meteora-ag/dlmm/node_modules/@coral-xyz/borsh": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", - "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", - "license": "Apache-2.0", + "node_modules/@metaplex-foundation/js/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@metaplex-foundation/js/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/@metaplex-foundation/js/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, - "peerDependencies": { - "@solana/web3.js": "^1.68.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@meteora-ag/dlmm/node_modules/@solana/spl-token": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.5.tgz", - "integrity": "sha512-0bGC6n415lGjKu02gkLOIpP1wzndSP0SHwN9PefJ+wKAhmfU1rl3AV1Pa41uap2kzSCD6F9642ngNO8KXPvh/g==", - "license": "Apache-2.0", + "node_modules/@metaplex-foundation/js/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "buffer": "^6.0.3" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.47.4" + "node": ">=8" } }, - "node_modules/@meteora-ag/dlmm/node_modules/@solana/web3.js": { - "version": "1.78.8", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.78.8.tgz", - "integrity": "sha512-y6kMa0ohRjamBGtxIGX4TkdAzL8Cs2bzM4JDPCyYLFPdo7kWk0Cx+BkbhX8hEV4IfvCONF92KIniV7hDvHuq8A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.22.6", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.1", - "@solana/buffer-layout": "^4.0.0", - "agentkeepalive": "^4.3.0", - "bigint-buffer": "^1.1.5", - "bn.js": "^5.2.1", - "borsh": "^0.7.0", - "bs58": "^4.0.1", - "buffer": "6.0.3", - "fast-stable-stringify": "^1.0.0", - "jayson": "^4.1.0", - "node-fetch": "^2.6.12", - "rpc-websockets": "^7.5.1", - "superstruct": "^0.14.2" + "node_modules/@metaplex-foundation/js/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" } }, - "node_modules/@meteora-ag/dlmm/node_modules/@solana/web3.js/node_modules/superstruct": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", - "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==", - "license": "MIT" + "node_modules/@metaplex-foundation/js/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/@meteora-ag/dlmm/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", + "node_modules/@metaplex-foundation/js/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "safe-buffer": "^5.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@meteora-ag/dlmm/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "license": "Apache-2.0", + "node_modules/@metaplex-foundation/js/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@meteora-ag/dlmm/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", + "node_modules/@metaplex-foundation/mpl-auction-house": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-auction-house/-/mpl-auction-house-2.5.1.tgz", + "integrity": "sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==", "dependencies": { - "base-x": "^3.0.2" + "@metaplex-foundation/beet": "^0.6.1", + "@metaplex-foundation/beet-solana": "^0.3.1", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.5", + "@solana/web3.js": "^1.56.2", + "bn.js": "^5.2.0" } }, - "node_modules/@near-js/crypto": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.3.tgz", - "integrity": "sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw==", + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@metaplex-foundation/beet": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.6.1.tgz", + "integrity": "sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==", "dependencies": { - "@near-js/types": "0.0.3", - "bn.js": "5.2.1", - "borsh": "^0.7.0", - "tweetnacl": "^1.0.1" + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" } }, - "node_modules/@near-js/crypto/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@near-js/crypto/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz", + "integrity": "sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==", "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" } }, - "node_modules/@near-js/crypto/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", "dependencies": { - "base-x": "^3.0.2" + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" } }, - "node_modules/@near-js/keystores": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.3.tgz", - "integrity": "sha512-mnwLYUt4Td8u1I4QE1FBx2d9hMt3ofiriE93FfOluJ4XiqRqVFakFYiHg6pExg5iEkej/sXugBUFeQ4QizUnew==", + "node_modules/@metaplex-foundation/mpl-auction-house/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "@near-js/crypto": "0.0.3", - "@near-js/types": "0.0.3" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@near-js/keystores-browser": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@near-js/keystores-browser/-/keystores-browser-0.0.3.tgz", - "integrity": "sha512-Ve/JQ1SBxdNk3B49lElJ8Y54AoBY+yOStLvdnUIpe2FBOczzwDCkcnPcMDV0NMwVlHpEnOWICWHbRbAkI5Vs+A==", + "node_modules/@metaplex-foundation/mpl-bubblegum": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-bubblegum/-/mpl-bubblegum-0.6.2.tgz", + "integrity": "sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==", "dependencies": { - "@near-js/crypto": "0.0.3", - "@near-js/keystores": "0.0.3" + "@metaplex-foundation/beet": "0.7.1", + "@metaplex-foundation/beet-solana": "0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@metaplex-foundation/mpl-token-metadata": "^2.5.2", + "@solana/spl-account-compression": "^0.1.4", + "@solana/spl-token": "^0.1.8", + "@solana/web3.js": "^1.50.1", + "bn.js": "^5.2.0", + "js-sha3": "^0.8.0" } }, - "node_modules/@near-js/providers": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@near-js/providers/-/providers-0.0.4.tgz", - "integrity": "sha512-g/2pJTYmsIlTW4mGqeRlqDN9pZeN+1E2/wfoMIf3p++boBVxVlaSebtQgawXAf2lkfhb9RqXz5pHqewXIkTBSw==", + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/beet": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.7.1.tgz", + "integrity": "sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==", "dependencies": { - "@near-js/transactions": "0.1.0", - "@near-js/types": "0.0.3", - "@near-js/utils": "0.0.3", - "bn.js": "5.2.1", - "borsh": "^0.7.0", - "http-errors": "^1.7.2" - }, - "optionalDependencies": { - "node-fetch": "^2.6.1" + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" } }, - "node_modules/@near-js/providers/node_modules/@near-js/signers": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.3.tgz", - "integrity": "sha512-u1R+DDIua5PY1PDFnpVYqdMgQ7c4dyeZsfqMjE7CtgzdqupgTYCXzJjBubqMlAyAx843PoXmLt6CSSKcMm0WUA==", + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz", + "integrity": "sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==", "dependencies": { - "@near-js/crypto": "0.0.3", - "@near-js/keystores": "0.0.3", - "js-sha256": "^0.9.0" + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" } }, - "node_modules/@near-js/providers/node_modules/@near-js/transactions": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.0.tgz", - "integrity": "sha512-OrrDFqhX0rtH+6MV3U3iS+zmzcPQI+L4GJi9na4Uf8FgpaVPF0mtSmVrpUrS5CC3LwWCzcYF833xGYbXOV4Kfg==", + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/mpl-token-metadata": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz", + "integrity": "sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==", "dependencies": { - "@near-js/crypto": "0.0.3", - "@near-js/signers": "0.0.3", - "@near-js/types": "0.0.3", - "@near-js/utils": "0.0.3", - "bn.js": "5.2.1", - "borsh": "^0.7.0", - "js-sha256": "^0.9.0" + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/spl-token": "^0.3.6", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0", + "debug": "^4.3.4" } }, - "node_modules/@near-js/providers/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", "dependencies": { - "safe-buffer": "^5.0.1" + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" } }, - "node_modules/@near-js/providers/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/@solana/spl-token": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", + "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" + "@babel/runtime": "^7.10.5", + "@solana/web3.js": "^1.21.0", + "bn.js": "^5.1.0", + "buffer": "6.0.3", + "buffer-layout": "^1.2.0", + "dotenv": "10.0.0" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/@near-js/providers/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "base-x": "^3.0.2" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@near-js/signers": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.4.tgz", - "integrity": "sha512-xCglo3U/WIGsz/izPGFMegS5Q3PxOHYB8a1E7RtVhNm5QdqTlQldLCm/BuMg2G/u1l1ZZ0wdvkqRTG9joauf3Q==", - "dependencies": { - "@near-js/crypto": "0.0.4", - "@near-js/keystores": "0.0.4", - "js-sha256": "^0.9.0" + "node_modules/@metaplex-foundation/mpl-bubblegum/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" } }, - "node_modules/@near-js/signers/node_modules/@near-js/crypto": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", - "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", + "node_modules/@metaplex-foundation/mpl-candy-guard": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-guard/-/mpl-candy-guard-0.3.2.tgz", + "integrity": "sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==", "dependencies": { - "@near-js/types": "0.0.4", - "bn.js": "5.2.1", - "borsh": "^0.7.0", - "tweetnacl": "^1.0.1" + "@metaplex-foundation/beet": "^0.4.0", + "@metaplex-foundation/beet-solana": "^0.3.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/web3.js": "^1.66.2", + "bn.js": "^5.2.0" } }, - "node_modules/@near-js/signers/node_modules/@near-js/keystores": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.4.tgz", - "integrity": "sha512-+vKafmDpQGrz5py1liot2hYSjPGXwihveeN+BL11aJlLqZnWBgYJUWCXG+uyGjGXZORuy2hzkKK6Hi+lbKOfVA==", + "node_modules/@metaplex-foundation/mpl-candy-guard/node_modules/@metaplex-foundation/beet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", + "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", "dependencies": { - "@near-js/crypto": "0.0.4", - "@near-js/types": "0.0.4" + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" } }, - "node_modules/@near-js/signers/node_modules/@near-js/types": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", - "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", + "node_modules/@metaplex-foundation/mpl-candy-guard/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz", + "integrity": "sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==", "dependencies": { - "bn.js": "5.2.1" + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" } }, - "node_modules/@near-js/signers/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/@metaplex-foundation/mpl-candy-machine": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine/-/mpl-candy-machine-6.1.0.tgz", + "integrity": "sha512-Y58wVkK9kU3ur22xnmYG/IOzJfo450dlUMl8FSuSRThV82IJte11ggtw5fEWIQQO/jhLWsjlkRHn4vd5RGmeGg==", "dependencies": { - "safe-buffer": "^5.0.1" + "@metaplex-foundation/mpl-token-metadata": "3.0.0-alpha.27", + "@metaplex-foundation/mpl-toolbox": "0.10.0", + "@noble/hashes": "^1.2.0", + "merkletreejs": "^0.3.9" + }, + "peerDependencies": { + "@metaplex-foundation/umi": ">= 0.8.2 <= 1" } }, - "node_modules/@near-js/signers/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" + "node_modules/@metaplex-foundation/mpl-candy-machine-core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-candy-machine-core/-/mpl-candy-machine-core-0.1.2.tgz", + "integrity": "sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==", + "dependencies": { + "@metaplex-foundation/beet": "^0.4.0", + "@metaplex-foundation/beet-solana": "^0.3.0", + "@metaplex-foundation/cusper": "^0.0.2", + "@solana/web3.js": "^1.56.2", + "bn.js": "^5.2.0" } }, - "node_modules/@near-js/signers/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@metaplex-foundation/mpl-candy-machine-core/node_modules/@metaplex-foundation/beet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet/-/beet-0.4.0.tgz", + "integrity": "sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==", "dependencies": { - "base-x": "^3.0.2" + "ansicolors": "^0.3.2", + "bn.js": "^5.2.0", + "debug": "^4.3.3" } }, - "node_modules/@near-js/transactions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.1.tgz", - "integrity": "sha512-Fk83oLLFK7nz4thawpdv9bGyMVQ2i48iUtZEVYhuuuqevl17tSXMlhle9Me1ZbNyguJG/cWPdNybe1UMKpyGxA==", + "node_modules/@metaplex-foundation/mpl-candy-machine-core/node_modules/@metaplex-foundation/beet-solana": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz", + "integrity": "sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==", "dependencies": { - "@near-js/crypto": "0.0.4", - "@near-js/signers": "0.0.4", - "@near-js/types": "0.0.4", - "@near-js/utils": "0.0.4", - "bn.js": "5.2.1", - "borsh": "^0.7.0", - "js-sha256": "^0.9.0" + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" } }, - "node_modules/@near-js/transactions/node_modules/@near-js/crypto": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", - "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@metaplex-foundation/mpl-token-metadata": { + "version": "3.0.0-alpha.27", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-3.0.0-alpha.27.tgz", + "integrity": "sha512-MSERz5HB2XZ/K+FOMh0tPeqcZZEpGVzdy7e+Cy3MHg7x52JtbGBDtWIoxBJn1OBZayCBfX9gytEoqrXe2YRGqQ==", "dependencies": { - "@near-js/types": "0.0.4", - "bn.js": "5.2.1", - "borsh": "^0.7.0", - "tweetnacl": "^1.0.1" + "@metaplex-foundation/mpl-toolbox": "^0.9.0" + }, + "peerDependencies": { + "@metaplex-foundation/umi": "^0.8.2" } }, - "node_modules/@near-js/transactions/node_modules/@near-js/types": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", - "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", - "dependencies": { - "bn.js": "5.2.1" + "node_modules/@metaplex-foundation/mpl-candy-machine/node_modules/@metaplex-foundation/mpl-token-metadata/node_modules/@metaplex-foundation/mpl-toolbox": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-toolbox/-/mpl-toolbox-0.9.4.tgz", + "integrity": "sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ==", + "peerDependencies": { + "@metaplex-foundation/umi": ">= 0.8.2 < 1" } }, - "node_modules/@near-js/transactions/node_modules/@near-js/utils": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.4.tgz", - "integrity": "sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==", + "node_modules/@metaplex-foundation/mpl-token-metadata": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-3.4.0.tgz", + "integrity": "sha512-AxBAYCK73JWxY3g9//z/C9krkR0t1orXZDknUPS4+GjwGH2vgPfsk04yfZ31Htka2AdS9YE/3wH7sMUBHKn9Rg==", "dependencies": { - "@near-js/types": "0.0.4", - "bn.js": "5.2.1", - "depd": "^2.0.0", - "mustache": "^4.0.0" + "@metaplex-foundation/mpl-toolbox": "^0.10.0" + }, + "peerDependencies": { + "@metaplex-foundation/umi": ">= 0.8.2 <= 1" } }, - "node_modules/@near-js/transactions/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" + "node_modules/@metaplex-foundation/mpl-toolbox": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/mpl-toolbox/-/mpl-toolbox-0.10.0.tgz", + "integrity": "sha512-84KD1L5cFyw5xnntHwL4uPwfcrkKSiwuDeypiVr92qCUFuF3ZENa2zlFVPu+pQcjTlod2LmEX3MhBmNjRMpdKg==", + "peerDependencies": { + "@metaplex-foundation/umi": ">= 0.8.2 <= 1" } }, - "node_modules/@near-js/transactions/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "node_modules/@metaplex-foundation/umi": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi/-/umi-0.9.2.tgz", + "integrity": "sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==", "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" + "@metaplex-foundation/umi-options": "^0.8.9", + "@metaplex-foundation/umi-public-keys": "^0.8.9", + "@metaplex-foundation/umi-serializers": "^0.9.0" } }, - "node_modules/@near-js/transactions/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@metaplex-foundation/umi-bundle-defaults": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-bundle-defaults/-/umi-bundle-defaults-0.9.2.tgz", + "integrity": "sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==", + "dependencies": { + "@metaplex-foundation/umi-downloader-http": "^0.9.2", + "@metaplex-foundation/umi-eddsa-web3js": "^0.9.2", + "@metaplex-foundation/umi-http-fetch": "^0.9.2", + "@metaplex-foundation/umi-program-repository": "^0.9.2", + "@metaplex-foundation/umi-rpc-chunk-get-accounts": "^0.9.2", + "@metaplex-foundation/umi-rpc-web3js": "^0.9.2", + "@metaplex-foundation/umi-serializer-data-view": "^0.9.2", + "@metaplex-foundation/umi-transaction-factory-web3js": "^0.9.2" + }, + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2", + "@solana/web3.js": "^1.72.0" + } + }, + "node_modules/@metaplex-foundation/umi-downloader-http": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-downloader-http/-/umi-downloader-http-0.9.2.tgz", + "integrity": "sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==", + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2" + } + }, + "node_modules/@metaplex-foundation/umi-eddsa-web3js": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-eddsa-web3js/-/umi-eddsa-web3js-0.9.2.tgz", + "integrity": "sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==", "dependencies": { - "base-x": "^3.0.2" + "@metaplex-foundation/umi-web3js-adapters": "^0.9.2", + "@noble/curves": "^1.0.0" + }, + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2", + "@solana/web3.js": "^1.72.0" } }, - "node_modules/@near-js/types": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.3.tgz", - "integrity": "sha512-gC3iGUT+r2JjVsE31YharT+voat79ToMUMLCGozHjp/R/UW1M2z4hdpqTUoeWUBGBJuVc810gNTneHGx0jvzwQ==", + "node_modules/@metaplex-foundation/umi-http-fetch": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-http-fetch/-/umi-http-fetch-0.9.2.tgz", + "integrity": "sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==", "dependencies": { - "bn.js": "5.2.1" + "node-fetch": "^2.6.7" + }, + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2" } }, - "node_modules/@near-js/utils": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.3.tgz", - "integrity": "sha512-J72n/EL0VfLRRb4xNUF4rmVrdzMkcmkwJOhBZSTWz3PAZ8LqNeU9ZConPfMvEr6lwdaD33ZuVv70DN6IIjPr1A==", + "node_modules/@metaplex-foundation/umi-options": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-options/-/umi-options-0.8.9.tgz", + "integrity": "sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==" + }, + "node_modules/@metaplex-foundation/umi-program-repository": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-program-repository/-/umi-program-repository-0.9.2.tgz", + "integrity": "sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==", + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2" + } + }, + "node_modules/@metaplex-foundation/umi-public-keys": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-public-keys/-/umi-public-keys-0.8.9.tgz", + "integrity": "sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==", "dependencies": { - "@near-js/types": "0.0.3", - "bn.js": "5.2.1", - "depd": "^2.0.0", - "mustache": "^4.0.0" + "@metaplex-foundation/umi-serializers-encodings": "^0.8.9" } }, - "node_modules/@noble/curves": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", - "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "node_modules/@metaplex-foundation/umi-rpc-chunk-get-accounts": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-rpc-chunk-get-accounts/-/umi-rpc-chunk-get-accounts-0.9.2.tgz", + "integrity": "sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==", + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2" + } + }, + "node_modules/@metaplex-foundation/umi-rpc-web3js": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-rpc-web3js/-/umi-rpc-web3js-0.9.2.tgz", + "integrity": "sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==", "dependencies": { - "@noble/hashes": "1.4.0" + "@metaplex-foundation/umi-web3js-adapters": "^0.9.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2", + "@solana/web3.js": "^1.72.0" } }, - "node_modules/@noble/ed25519": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", - "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "node_modules/@metaplex-foundation/umi-serializer-data-view": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializer-data-view/-/umi-serializer-data-view-0.9.2.tgz", + "integrity": "sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==", + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2" + } }, - "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/@metaplex-foundation/umi-serializers": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers/-/umi-serializers-0.9.0.tgz", + "integrity": "sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==", + "dependencies": { + "@metaplex-foundation/umi-options": "^0.8.9", + "@metaplex-foundation/umi-public-keys": "^0.8.9", + "@metaplex-foundation/umi-serializers-core": "^0.8.9", + "@metaplex-foundation/umi-serializers-encodings": "^0.8.9", + "@metaplex-foundation/umi-serializers-numbers": "^0.8.9" } }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" + "node_modules/@metaplex-foundation/umi-serializers-core": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-0.8.9.tgz", + "integrity": "sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==" }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", + "node_modules/@metaplex-foundation/umi-serializers-encodings": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-0.8.9.tgz", + "integrity": "sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@metaplex-foundation/umi-serializers-core": "^0.8.9" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" + "node_modules/@metaplex-foundation/umi-serializers-numbers": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-0.8.9.tgz", + "integrity": "sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==", + "dependencies": { + "@metaplex-foundation/umi-serializers-core": "^0.8.9" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", + "node_modules/@metaplex-foundation/umi-transaction-factory-web3js": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-transaction-factory-web3js/-/umi-transaction-factory-web3js-0.9.2.tgz", + "integrity": "sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@metaplex-foundation/umi-web3js-adapters": "^0.9.2" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2", + "@solana/web3.js": "^1.72.0" } }, - "node_modules/@oclif/core": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-3.27.0.tgz", - "integrity": "sha512-Fg93aNFvXzBq5L7ztVHFP2nYwWU1oTCq48G0TjF/qC1UN36KWa2H5Hsm72kERd5x/sjy2M2Tn4kDEorUlpXOlw==", - "license": "MIT", + "node_modules/@metaplex-foundation/umi-web3js-adapters": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-web3js-adapters/-/umi-web3js-adapters-0.9.2.tgz", + "integrity": "sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==", "dependencies": { - "@types/cli-progress": "^3.11.5", - "ansi-escapes": "^4.3.2", - "ansi-styles": "^4.3.0", - "cardinal": "^2.1.1", - "chalk": "^4.1.2", - "clean-stack": "^3.0.1", - "cli-progress": "^3.12.0", - "color": "^4.2.3", - "debug": "^4.3.5", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "globby": "^11.1.0", - "hyperlinker": "^1.0.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "js-yaml": "^3.14.1", - "minimatch": "^9.0.4", - "natural-orderby": "^2.0.3", - "object-treeify": "^1.1.33", - "password-prompt": "^1.1.3", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "supports-color": "^8.1.1", - "supports-hyperlinks": "^2.2.0", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" + "buffer": "^6.0.3" }, - "engines": { - "node": ">=18.0.0" + "peerDependencies": { + "@metaplex-foundation/umi": "^0.9.2", + "@solana/web3.js": "^1.72.0" } }, - "node_modules/@oclif/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", + "node_modules/@metaplex-foundation/umi-web3js-adapters/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@oclif/core/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", + "node_modules/@meteora-ag/dlmm": { + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@meteora-ag/dlmm/-/dlmm-1.3.12.tgz", + "integrity": "sha512-uoBjrl8yLVqKmpdcoC9Jj6Zg5mmo/2CeDEsWFrk6OiAoQ6g1+WBnr8lX/RWxXZ6r18YeP+QAKQbo1Tjf3HU0Cg==", "dependencies": { - "has-flag": "^4.0.0" + "@coral-xyz/anchor": "^0.28.0", + "@coral-xyz/borsh": "^0.28.0", + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.4.6", + "@solana/web3.js": "^1.91.6", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.2", + "express": "^4.19.2", + "gaussian": "^1.3.0" + } + }, + "node_modules/@meteora-ag/dlmm/node_modules/@coral-xyz/anchor": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz", + "integrity": "sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw==", + "dependencies": { + "@coral-xyz/borsh": "^0.28.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=11" } }, - "node_modules/@oclif/core/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", + "node_modules/@meteora-ag/dlmm/node_modules/@coral-xyz/borsh": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", + "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", "dependencies": { - "has-flag": "^4.0.0" + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" }, "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "peerDependencies": { + "@solana/web3.js": "^1.68.0" } }, - "node_modules/@oclif/core/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "node_modules/@meteora-ag/dlmm/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "base-x": "^3.0.2" + } + }, + "node_modules/@meteora-ag/dlmm/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@oclif/plugin-autocomplete": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.1.6.tgz", - "integrity": "sha512-Eo13RHSr7c5I5miatEBGhKVkLEADzN8taUlYOs5vbRWtWlR/FoDnwSZJ72gBvvayvCHEqlBOaNBn/wufxdrDAg==", - "license": "MIT", + "node_modules/@meteora-ag/dlmm/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/@meteora-ag/dlmm/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + }, + "node_modules/@meteora-ag/m3m3": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@meteora-ag/m3m3/-/m3m3-1.0.4.tgz", + "integrity": "sha512-tjNsQ7qCE9LAyZ8TpyNsg8kOiaarAQ91ckAGObKO/gcDkUfm5m/qrDo3qypN9aCAcFnNmvsuJecrJnLhRGq33g==", "dependencies": { - "@oclif/core": "^4", - "ansis": "^3.2.0", - "debug": "^4.3.5", - "ejs": "^3.1.10" - }, - "engines": { - "node": ">=18.0.0" + "@coral-xyz/anchor": "0.28.0", + "@coral-xyz/borsh": "^0.30.1", + "@solana-developers/helpers": "^2.5.6", + "@solana/spl-token": "^0.4.8", + "@solana/web3.js": "^1.95.5", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.3" } }, - "node_modules/@oclif/plugin-autocomplete/node_modules/@oclif/core": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.11.tgz", - "integrity": "sha512-cZLLdSm9tGSbuoRjjgXf128zvPZH+afjQMQcrvDfoN347KvPg75ne8YJ8qHix+T3Vl03iXfgIH6guQN0kLgmjg==", - "license": "MIT", + "node_modules/@meteora-ag/m3m3/node_modules/@coral-xyz/anchor": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz", + "integrity": "sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw==", "dependencies": { - "ansi-escapes": "^4.3.2", - "ansis": "^3.1.1", - "clean-stack": "^3.0.1", - "cli-spinners": "^2.9.2", - "debug": "^4.3.5", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "globby": "^11.1.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "lilconfig": "^3.1.2", - "minimatch": "^9.0.5", - "string-width": "^4.2.3", - "supports-color": "^8", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" + "@coral-xyz/borsh": "^0.28.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=11" } }, - "node_modules/@oclif/plugin-autocomplete/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", + "node_modules/@meteora-ag/m3m3/node_modules/@coral-xyz/anchor/node_modules/@coral-xyz/borsh": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", + "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", "dependencies": { - "has-flag": "^4.0.0" + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" }, "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "peerDependencies": { + "@solana/web3.js": "^1.68.0" } }, - "node_modules/@oclif/plugin-autocomplete/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "node_modules/@meteora-ag/m3m3/node_modules/@solana-developers/helpers": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@solana-developers/helpers/-/helpers-2.7.0.tgz", + "integrity": "sha512-b00myc4LkKgdJarAk6ILAMQ4IDd+ixNua71GDCejoOie+SkL1cTedyBLQw0h6OJqA2NgigQRKM+apEop9ozXQw==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@coral-xyz/anchor": "^0.30.1", + "@solana/spl-token": "^0.4.8", + "@solana/spl-token-metadata": "^0.1.4", + "@solana/web3.js": "^1.98.0", + "bs58": "^6.0.0", + "dotenv": "^16.4.5" } }, - "node_modules/@oclif/plugin-help": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.5.tgz", - "integrity": "sha512-/NgP6j5THCWDxQj3Mba+IIidf8fBtOT5Wh6ygb2WdWLSxcsRXSQUiJKKOXu8e/N5+KQeuG2Yko2hFxd2cZUzMQ==", - "license": "MIT", + "node_modules/@meteora-ag/m3m3/node_modules/@solana-developers/helpers/node_modules/@coral-xyz/anchor": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.30.1.tgz", + "integrity": "sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==", "dependencies": { - "@oclif/core": "^4" + "@coral-xyz/anchor-errors": "^0.30.1", + "@coral-xyz/borsh": "^0.30.1", + "@noble/hashes": "^1.3.1", + "@solana/web3.js": "^1.68.0", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=11" } }, - "node_modules/@oclif/plugin-help/node_modules/@oclif/core": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.11.tgz", - "integrity": "sha512-cZLLdSm9tGSbuoRjjgXf128zvPZH+afjQMQcrvDfoN347KvPg75ne8YJ8qHix+T3Vl03iXfgIH6guQN0kLgmjg==", - "license": "MIT", + "node_modules/@meteora-ag/m3m3/node_modules/@solana-developers/helpers/node_modules/@coral-xyz/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "ansi-escapes": "^4.3.2", - "ansis": "^3.1.1", - "clean-stack": "^3.0.1", - "cli-spinners": "^2.9.2", - "debug": "^4.3.5", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "globby": "^11.1.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "lilconfig": "^3.1.2", - "minimatch": "^9.0.5", - "string-width": "^4.2.3", - "supports-color": "^8", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=18.0.0" + "base-x": "^3.0.2" } }, - "node_modules/@oclif/plugin-help/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", + "node_modules/@meteora-ag/m3m3/node_modules/@solana-developers/helpers/node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "base-x": "^5.0.0" } }, - "node_modules/@oclif/plugin-help/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "node_modules/@meteora-ag/m3m3/node_modules/@solana-developers/helpers/node_modules/bs58/node_modules/base-x": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", + "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==" + }, + "node_modules/@meteora-ag/m3m3/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "base-x": "^3.0.2" + } + }, + "node_modules/@meteora-ag/m3m3/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@oclif/plugin-not-found": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.10.tgz", - "integrity": "sha512-Bevp3hcv1IhNgljugIhxL5ARcwxsQmiR9yGOozURuZBX3IjsHBPhI2I92wKA2KM5zRgh4zOm6gvoP8gcHlhLJA==", - "license": "MIT", + "node_modules/@meteora-ag/m3m3/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/@meteora-ag/m3m3/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + }, + "node_modules/@near-js/crypto": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.3.tgz", + "integrity": "sha512-3WC2A1a1cH8Cqrx+0iDjp1ASEEhxN/KHEMENYb0KZH6Hp5bXIY7Akt4quC7JlgJS5ESvEiLa40tS5h0zAhBWGw==", "dependencies": { - "@inquirer/confirm": "^3.1.14", - "@oclif/core": "^4", - "ansis": "^3.2.0", - "fast-levenshtein": "^3.0.0" - }, - "engines": { - "node": ">=18.0.0" + "@near-js/types": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" } }, - "node_modules/@oclif/plugin-not-found/node_modules/@oclif/core": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.11.tgz", - "integrity": "sha512-cZLLdSm9tGSbuoRjjgXf128zvPZH+afjQMQcrvDfoN347KvPg75ne8YJ8qHix+T3Vl03iXfgIH6guQN0kLgmjg==", - "license": "MIT", + "node_modules/@near-js/keystores": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.3.tgz", + "integrity": "sha512-mnwLYUt4Td8u1I4QE1FBx2d9hMt3ofiriE93FfOluJ4XiqRqVFakFYiHg6pExg5iEkej/sXugBUFeQ4QizUnew==", "dependencies": { - "ansi-escapes": "^4.3.2", - "ansis": "^3.1.1", - "clean-stack": "^3.0.1", - "cli-spinners": "^2.9.2", - "debug": "^4.3.5", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "globby": "^11.1.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "lilconfig": "^3.1.2", - "minimatch": "^9.0.5", - "string-width": "^4.2.3", - "supports-color": "^8", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=18.0.0" + "@near-js/crypto": "0.0.3", + "@near-js/types": "0.0.3" } }, - "node_modules/@oclif/plugin-not-found/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", + "node_modules/@near-js/keystores-browser": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/keystores-browser/-/keystores-browser-0.0.3.tgz", + "integrity": "sha512-Ve/JQ1SBxdNk3B49lElJ8Y54AoBY+yOStLvdnUIpe2FBOczzwDCkcnPcMDV0NMwVlHpEnOWICWHbRbAkI5Vs+A==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "@near-js/crypto": "0.0.3", + "@near-js/keystores": "0.0.3" } }, - "node_modules/@oclif/plugin-not-found/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "node_modules/@near-js/providers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/providers/-/providers-0.0.4.tgz", + "integrity": "sha512-g/2pJTYmsIlTW4mGqeRlqDN9pZeN+1E2/wfoMIf3p++boBVxVlaSebtQgawXAf2lkfhb9RqXz5pHqewXIkTBSw==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "@near-js/transactions": "0.1.0", + "@near-js/types": "0.0.3", + "@near-js/utils": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "http-errors": "^1.7.2" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "optionalDependencies": { + "node-fetch": "^2.6.1" } }, - "node_modules/@oclif/plugin-plugins": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-5.3.4.tgz", - "integrity": "sha512-gbLe+rfqP3dlphqOisFvbZ+adjobvIEhc78ferl3wFL4EazkIrcqrHYle77EjsaEiATqtCIeh3Ef41QCGoK9pA==", - "license": "MIT", + "node_modules/@near-js/providers/node_modules/@near-js/transactions": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.0.tgz", + "integrity": "sha512-OrrDFqhX0rtH+6MV3U3iS+zmzcPQI+L4GJi9na4Uf8FgpaVPF0mtSmVrpUrS5CC3LwWCzcYF833xGYbXOV4Kfg==", "dependencies": { - "@oclif/core": "^4", - "ansis": "^3.2.0", - "debug": "^4.3.4", - "npm": "^10.8.1", - "npm-package-arg": "^11.0.2", - "npm-run-path": "^5.3.0", - "object-treeify": "^4.0.1", - "semver": "^7.6.2", - "validate-npm-package-name": "^5.0.1", - "which": "^4.0.0", - "yarn": "^1.22.22" - }, - "engines": { - "node": ">=18.0.0" + "@near-js/crypto": "0.0.3", + "@near-js/signers": "0.0.3", + "@near-js/types": "0.0.3", + "@near-js/utils": "0.0.3", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" } }, - "node_modules/@oclif/plugin-plugins/node_modules/@oclif/core": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.11.tgz", - "integrity": "sha512-cZLLdSm9tGSbuoRjjgXf128zvPZH+afjQMQcrvDfoN347KvPg75ne8YJ8qHix+T3Vl03iXfgIH6guQN0kLgmjg==", - "license": "MIT", + "node_modules/@near-js/signers": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.3.tgz", + "integrity": "sha512-u1R+DDIua5PY1PDFnpVYqdMgQ7c4dyeZsfqMjE7CtgzdqupgTYCXzJjBubqMlAyAx843PoXmLt6CSSKcMm0WUA==", "dependencies": { - "ansi-escapes": "^4.3.2", - "ansis": "^3.1.1", - "clean-stack": "^3.0.1", - "cli-spinners": "^2.9.2", - "debug": "^4.3.5", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "globby": "^11.1.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "lilconfig": "^3.1.2", - "minimatch": "^9.0.5", - "string-width": "^4.2.3", - "supports-color": "^8", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=18.0.0" + "@near-js/crypto": "0.0.3", + "@near-js/keystores": "0.0.3", + "js-sha256": "^0.9.0" } }, - "node_modules/@oclif/plugin-plugins/node_modules/object-treeify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-4.0.1.tgz", - "integrity": "sha512-Y6tg5rHfsefSkfKujv2SwHulInROy/rCL5F4w0QOWxut8AnxYxf0YmNhTh95Zfyxpsudo66uqkux0ACFnyMSgQ==", - "license": "MIT", - "engines": { - "node": ">= 16" + "node_modules/@near-js/transactions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-0.1.1.tgz", + "integrity": "sha512-Fk83oLLFK7nz4thawpdv9bGyMVQ2i48iUtZEVYhuuuqevl17tSXMlhle9Me1ZbNyguJG/cWPdNybe1UMKpyGxA==", + "dependencies": { + "@near-js/crypto": "0.0.4", + "@near-js/signers": "0.0.4", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" } }, - "node_modules/@oclif/plugin-plugins/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", + "node_modules/@near-js/transactions/node_modules/@near-js/crypto": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-0.0.4.tgz", + "integrity": "sha512-2mSIVv6mZway1rQvmkktrXAFoUvy7POjrHNH3LekKZCMCs7qMM/23Hz2+APgxZPqoV2kjarSNOEYJjxO7zQ/rQ==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "borsh": "^0.7.0", + "tweetnacl": "^1.0.1" } }, - "node_modules/@oclif/plugin-plugins/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "node_modules/@near-js/transactions/node_modules/@near-js/keystores": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.0.4.tgz", + "integrity": "sha512-+vKafmDpQGrz5py1liot2hYSjPGXwihveeN+BL11aJlLqZnWBgYJUWCXG+uyGjGXZORuy2hzkKK6Hi+lbKOfVA==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@near-js/crypto": "0.0.4", + "@near-js/types": "0.0.4" } }, - "node_modules/@orca-so/common-sdk": { - "version": "0.6.0-alpha.3", - "resolved": "https://registry.npmjs.org/@orca-so/common-sdk/-/common-sdk-0.6.0-alpha.3.tgz", - "integrity": "sha512-+M+i/B/Ol+FqphJYwQaTds67G1ZNNQNLnebFpN4sBdxUucmWzuzZ/W75GSlIaT5XSZ8UqUjSEe/LAxauNyvfiQ==", + "node_modules/@near-js/transactions/node_modules/@near-js/signers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.0.4.tgz", + "integrity": "sha512-xCglo3U/WIGsz/izPGFMegS5Q3PxOHYB8a1E7RtVhNm5QdqTlQldLCm/BuMg2G/u1l1ZZ0wdvkqRTG9joauf3Q==", "dependencies": { - "tiny-invariant": "^1.3.1" - }, - "peerDependencies": { - "@solana/spl-token": "^0.4.1", - "@solana/web3.js": "^1.90.0", - "decimal.js": "^10.4.3" + "@near-js/crypto": "0.0.4", + "@near-js/keystores": "0.0.4", + "js-sha256": "^0.9.0" } }, - "node_modules/@orca-so/whirlpools-sdk": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@orca-so/whirlpools-sdk/-/whirlpools-sdk-0.11.9.tgz", - "integrity": "sha512-M83l42yOUZ99KO6dbG3awzFObNs751QskdKYrB5217mwKPNuUonAdDh3EXkpyxBDmuUtM8iSlrLDxqfxEv1c7w==", + "node_modules/@near-js/transactions/node_modules/@near-js/types": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.4.tgz", + "integrity": "sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==", "dependencies": { - "@coral-xyz/anchor": "~0.27.0", - "@orca-so/common-sdk": "^0.3.6", - "@solana/spl-token": "^0.3.8", - "@solana/web3.js": "^1.75.0", - "decimal.js": "^10.3.1", - "tiny-invariant": "^1.2.0" + "bn.js": "5.2.1" } }, - "node_modules/@orca-so/whirlpools-sdk/node_modules/@coral-xyz/anchor": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.27.0.tgz", - "integrity": "sha512-+P/vPdORawvg3A9Wj02iquxb4T0C5m4P6aZBVYysKl4Amk+r6aMPZkUhilBkD6E4Nuxnoajv3CFykUfkGE0n5g==", - "license": "(MIT OR Apache-2.0)", + "node_modules/@near-js/transactions/node_modules/@near-js/utils": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.4.tgz", + "integrity": "sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==", "dependencies": { - "@coral-xyz/borsh": "^0.27.0", - "@solana/web3.js": "^1.68.0", - "base64-js": "^1.5.1", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "superstruct": "^0.15.4", - "toml": "^3.0.0" - }, - "engines": { - "node": ">=11" + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "depd": "^2.0.0", + "mustache": "^4.0.0" } }, - "node_modules/@orca-so/whirlpools-sdk/node_modules/@coral-xyz/borsh": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.27.0.tgz", - "integrity": "sha512-tJKzhLukghTWPLy+n8K8iJKgBq1yLT/AxaNd10yJrX8mI56ao5+OFAKAqW/h0i79KCvb4BK0VGO5ECmmolFz9A==", - "license": "Apache-2.0", + "node_modules/@near-js/types": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.0.3.tgz", + "integrity": "sha512-gC3iGUT+r2JjVsE31YharT+voat79ToMUMLCGozHjp/R/UW1M2z4hdpqTUoeWUBGBJuVc810gNTneHGx0jvzwQ==", "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@solana/web3.js": "^1.68.0" + "bn.js": "5.2.1" } }, - "node_modules/@orca-so/whirlpools-sdk/node_modules/@orca-so/common-sdk": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@orca-so/common-sdk/-/common-sdk-0.3.7.tgz", - "integrity": "sha512-rSYpEyTYNlvoU1BHX/Sv07CxtDkRxQIm/9853ANnSakbnIQeapf/cBremEVlTTXWEDDOTe7DSjPVHku4Bn5nyg==", + "node_modules/@near-js/utils": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@near-js/utils/-/utils-0.0.3.tgz", + "integrity": "sha512-J72n/EL0VfLRRb4xNUF4rmVrdzMkcmkwJOhBZSTWz3PAZ8LqNeU9ZConPfMvEr6lwdaD33ZuVv70DN6IIjPr1A==", "dependencies": { - "@solana/spl-token": "^0.3.8", - "@solana/web3.js": "^1.75.0", - "decimal.js": "^10.3.1", - "tiny-invariant": "^1.2.0" + "@near-js/types": "0.0.3", + "bn.js": "5.2.1", + "depd": "^2.0.0", + "mustache": "^4.0.0" } }, - "node_modules/@orca-so/whirlpools-sdk/node_modules/@solana/spl-token": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", - "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "node_modules/@noble/curves": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", + "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-metadata": "^0.1.2", - "buffer": "^6.0.3" + "@noble/hashes": "1.7.1" }, "engines": { - "node": ">=16" + "node": "^14.21.3 || >=16" }, - "peerDependencies": { - "@solana/web3.js": "^1.88.0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@orca-so/whirlpools-sdk/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } + "node_modules/@noble/ed25519": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", + "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, - "node_modules/@orca-so/whirlpools-sdk/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" + "node_modules/@noble/hashes": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@pbkit/grpc-client": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@pbkit/grpc-client/-/grpc-client-0.0.3.tgz", - "integrity": "sha512-VVWZ15jDxoAXNylW+dp6eRfxSaXlZwN/emPhxrHGhIj97K87VnVyl+532A6kEAhBldjJLTIoZQ/9dth1qIlGvQ==", - "license": "(MIT OR Apache-2.0)", + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "@pbkit/runtime": "^0.0.35" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "peerDependencies": { - "@grpc/grpc-js": "*" + "engines": { + "node": ">= 8" } }, - "node_modules/@pbkit/runtime": { - "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@pbkit/runtime/-/runtime-0.0.35.tgz", - "integrity": "sha512-QPey6r26Dfh1gVfUmGH0qn4lhbH2RVRC7St3mnERISyT1Gx1RgBpGIQJs14Pwt8E7TfJB+a0Btj6nr6teUADTg==", - "license": "(MIT OR Apache-2.0)" - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { - "node": ">=12.22.0" + "node": ">= 8" } }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { - "graceful-fs": "4.2.10" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=12.22.0" + "node": ">= 8" } }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", + "node_modules/@oclif/core": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-3.27.0.tgz", + "integrity": "sha512-Fg93aNFvXzBq5L7ztVHFP2nYwWU1oTCq48G0TjF/qC1UN36KWa2H5Hsm72kERd5x/sjy2M2Tn4kDEorUlpXOlw==", "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "@types/cli-progress": "^3.11.5", + "ansi-escapes": "^4.3.2", + "ansi-styles": "^4.3.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.2", + "clean-stack": "^3.0.1", + "cli-progress": "^3.12.0", + "color": "^4.2.3", + "debug": "^4.3.5", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "globby": "^11.1.0", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.14.1", + "minimatch": "^9.0.4", + "natural-orderby": "^2.0.3", + "object-treeify": "^1.1.33", + "password-prompt": "^1.1.3", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "supports-color": "^8.1.1", + "supports-hyperlinks": "^2.2.0", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@project-serum/anchor": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.26.0.tgz", - "integrity": "sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==", - "license": "(MIT OR Apache-2.0)", + "node_modules/@oclif/core/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "@coral-xyz/borsh": "^0.26.0", - "@solana/web3.js": "^1.68.0", - "base64-js": "^1.5.1", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "superstruct": "^0.15.4", - "toml": "^3.0.0" - }, - "engines": { - "node": ">=11" + "sprintf-js": "~1.0.2" } }, - "node_modules/@project-serum/anchor/node_modules/@coral-xyz/borsh": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", - "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", - "license": "Apache-2.0", + "node_modules/@oclif/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, - "peerDependencies": { - "@solana/web3.js": "^1.68.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@project-serum/anchor/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/@oclif/core/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "safe-buffer": "^5.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@project-serum/anchor/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@oclif/core/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "base-x": "^3.0.2" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@project-serum/borsh": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz", - "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==", - "license": "Apache-2.0", - "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "node_modules/@oclif/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/core/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@oclif/core/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@oclif/core/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=8" }, - "peerDependencies": { - "@solana/web3.js": "^1.2.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@project-serum/serum": { - "version": "0.13.65", - "resolved": "https://registry.npmjs.org/@project-serum/serum/-/serum-0.13.65.tgz", - "integrity": "sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA==", + "node_modules/@oclif/core/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "@project-serum/anchor": "^0.11.1", - "@solana/spl-token": "^0.1.6", - "@solana/web3.js": "^1.21.0", - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@project-serum/serum/node_modules/@project-serum/anchor": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.11.1.tgz", - "integrity": "sha512-oIdm4vTJkUy6GmE6JgqDAuQPKI7XM4TPJkjtoIzp69RZe0iAD9JP2XHx7lV1jLdYXeYHqDXfBt3zcq7W91K6PA==", - "license": "(MIT OR Apache-2.0)", + "node_modules/@oclif/core/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { - "@project-serum/borsh": "^0.2.2", - "@solana/web3.js": "^1.17.0", - "base64-js": "^1.5.1", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.0", - "camelcase": "^5.3.1", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "find": "^0.3.0", - "js-sha256": "^0.9.0", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "toml": "^3.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@oclif/core/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { - "node": ">=11" + "node": ">=8" } }, - "node_modules/@project-serum/serum/node_modules/@solana/spl-token": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", - "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", + "node_modules/@oclif/core/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dependencies": { - "@babel/runtime": "^7.10.5", - "@solana/web3.js": "^1.21.0", - "bn.js": "^5.1.0", - "buffer": "6.0.3", - "buffer-layout": "^1.2.0", - "dotenv": "10.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/@project-serum/serum/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", + "node_modules/@oclif/core/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "safe-buffer": "^5.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@project-serum/serum/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", + "node_modules/@oclif/core/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { - "base-x": "^3.0.2" + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@project-serum/serum/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "license": "MIT", + "node_modules/@oclif/plugin-autocomplete": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.22.tgz", + "integrity": "sha512-oj68qowjaPifKttINdTbCUUeVwMMumSn7HJck3R84E+HpkED7ih0BSO5Jx1Gs0jbH7ZfohKugSRmOCe5JZYb5A==", + "dependencies": { + "@oclif/core": "^4", + "ansis": "^3.14.0", + "debug": "^4.4.0", + "ejs": "^3.1.10" + }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@project-serum/serum/node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "node_modules/@oclif/plugin-autocomplete/node_modules/@oclif/core": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.7.tgz", + "integrity": "sha512-49wtIlSEw9UyxdSMPjJ2Ookj5e056Qbqr6A+uN7Ea8XCK6b8Q03KciTEpX5t0rfNggvewJc9e3SHY6uWZIkXVw==", + "dependencies": { + "ansi-escapes": "^4.3.2", + "ansis": "^3.14.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "globby": "^11.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^9.0.5", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-autocomplete/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" + "node_modules/@oclif/plugin-autocomplete/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" + "node_modules/@oclif/plugin-autocomplete/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" + "node_modules/@oclif/plugin-autocomplete/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" + "node_modules/@oclif/plugin-autocomplete/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", + "node_modules/@oclif/plugin-autocomplete/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, - "node_modules/@randlabs/communication-bridge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz", - "integrity": "sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==", - "optional": true - }, - "node_modules/@randlabs/myalgo-connect": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz", - "integrity": "sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==", - "optional": true, - "dependencies": { - "@randlabs/communication-bridge": "1.0.1" + "node_modules/@oclif/plugin-autocomplete/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" } }, - "node_modules/@raydium-io/raydium-sdk": { - "version": "1.3.1-beta.52", - "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.52.tgz", - "integrity": "sha512-NnCIfmFLT5QZLjeMhAwEofNuzZEPAU7q2O0P0o67O1fsGdVq5HJgLL8bI6UMKX2d2Ed4MEz7ip2bSng2tHp+5w==", + "node_modules/@oclif/plugin-autocomplete/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "@solana/buffer-layout": "^4.0.1", - "@solana/spl-token": "^0.3.9", - "axios": "^1.6.2", - "big.js": "^6.2.1", - "bn.js": "^5.2.1", - "decimal.js": "^10.4.3", - "decimal.js-light": "^2.5.1", - "fecha": "^4.2.3", - "lodash": "^4.17.21", - "toformat": "^2.0.0" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "@solana/web3.js": "^1.73.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@raydium-io/raydium-sdk-v2": { - "version": "0.1.23-alpha", - "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk-v2/-/raydium-sdk-v2-0.1.23-alpha.tgz", - "integrity": "sha512-xQsbHVMpjAnwY9JScGFwN/Co5F9UruwTLzExJjPTDohqqrxLzeNHjk6RfN/8etUP7QwzR1YwbdyGLBpkBhav1A==", + "node_modules/@oclif/plugin-autocomplete/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { - "@project-serum/serum": "^0.13.65", - "@solana/buffer-layout": "^4.0.1", - "@solana/spl-token": "^0.4.6", - "@solana/web3.js": "^1.91.8", - "axios": "^1.1.3", - "big.js": "^6.2.1", - "bn.js": "^5.2.1", - "buffer": "^6.0.3", - "dayjs": "^1.11.5", - "decimal.js-light": "^2.5.1", - "lodash": "^4.17.21", - "toformat": "^2.0.0" + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@raydium-io/raydium-sdk/node_modules/@solana/spl-token": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", - "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", + "node_modules/@oclif/plugin-help": { + "version": "6.2.25", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.25.tgz", + "integrity": "sha512-1WPSzSvlYaIFlGGKbefldpx49uTAtsOFuHTbjeBuzSR/MLmooQGHzluvwm2W5/vyoi4AGG+PdiDJFH/b+h+BGA==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-metadata": "^0.1.2", - "buffer": "^6.0.3" + "@oclif/core": "^4" }, "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.88.0" + "node": ">=18.0.0" } }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "license": "MIT", + "node_modules/@oclif/plugin-help/node_modules/@oclif/core": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.7.tgz", + "integrity": "sha512-49wtIlSEw9UyxdSMPjJ2Ookj5e056Qbqr6A+uN7Ea8XCK6b8Q03KciTEpX5t0rfNggvewJc9e3SHY6uWZIkXVw==", "dependencies": { - "@rollup/pluginutils": "^5.1.0" + "ansi-escapes": "^4.3.2", + "ansis": "^3.14.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "globby": "^11.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^9.0.5", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", - "license": "MIT", + "node_modules/@oclif/plugin-help/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", - "license": "MIT", - "dependencies": { - "any-observable": "^0.3.0" - }, + "node_modules/@oclif/plugin-help/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "rxjs": { - "optional": true - }, - "zen-observable": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@scure/base": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", - "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/@oclif/plugin-help/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" } }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/@oclif/plugin-help/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" } }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "node_modules/@oclif/plugin-help/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "license": "BSD-3-Clause", + "node_modules/@oclif/plugin-help/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "@hapi/hoek": "^9.0.0" + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" + "node_modules/@oclif/plugin-help/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "node_modules/@oclif/plugin-help/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@solana-developers/helpers": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@solana-developers/helpers/-/helpers-1.5.1.tgz", - "integrity": "sha512-FysSkUc6fkmK7sQ3wFyIZovSvQqFQjIj9MMy0lVRfNhIJ+24G24qztGxx0IosGSbuxtO97sN6Ij09la/4Bvwlg==", - "license": "MIT", + "node_modules/@oclif/plugin-help/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { - "@solana/web3.js": "^1.78.4", - "bs58": "^5.0.0", - "dotenv": "^16.3.1", - "prettier": "^3.0.3", - "typescript": "^5.2.2" + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@solana/buffer-layout": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", - "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "node_modules/@oclif/plugin-not-found": { + "version": "3.2.42", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.42.tgz", + "integrity": "sha512-hoPkt32xtXnsIFOHDK6ISCbh3v0FskDHvzmUpIKQYsojJhU9Xz/ygCyBVoFrOaJow9y/84ZARQWau2CswaprHQ==", "dependencies": { - "buffer": "~6.0.3" + "@inquirer/prompts": "^7.3.2", + "@oclif/core": "^4", + "ansis": "^3.14.0", + "fast-levenshtein": "^3.0.0" }, "engines": { - "node": ">=5.10" + "node": ">=18.0.0" } }, - "node_modules/@solana/buffer-layout-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", - "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", + "node_modules/@oclif/plugin-not-found/node_modules/@oclif/core": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.7.tgz", + "integrity": "sha512-49wtIlSEw9UyxdSMPjJ2Ookj5e056Qbqr6A+uN7Ea8XCK6b8Q03KciTEpX5t0rfNggvewJc9e3SHY6uWZIkXVw==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/web3.js": "^1.32.0", - "bigint-buffer": "^1.1.5", - "bignumber.js": "^9.0.1" + "ansi-escapes": "^4.3.2", + "ansis": "^3.14.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "globby": "^11.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^9.0.5", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18.0.0" } }, - "node_modules/@solana/codecs": { - "version": "2.0.0-preview.2", - "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-preview.2.tgz", - "integrity": "sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==", + "node_modules/@oclif/plugin-not-found/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "@solana/codecs-core": "2.0.0-preview.2", - "@solana/codecs-data-structures": "2.0.0-preview.2", - "@solana/codecs-numbers": "2.0.0-preview.2", - "@solana/codecs-strings": "2.0.0-preview.2", - "@solana/options": "2.0.0-preview.2" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@solana/codecs-core": { - "version": "2.0.0-preview.2", - "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-preview.2.tgz", - "integrity": "sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==", - "dependencies": { - "@solana/errors": "2.0.0-preview.2" + "node_modules/@oclif/plugin-not-found/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" } }, - "node_modules/@solana/codecs-data-structures": { - "version": "2.0.0-preview.2", - "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.2.tgz", - "integrity": "sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==", - "dependencies": { - "@solana/codecs-core": "2.0.0-preview.2", - "@solana/codecs-numbers": "2.0.0-preview.2", - "@solana/errors": "2.0.0-preview.2" + "node_modules/@oclif/plugin-not-found/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" } }, - "node_modules/@solana/codecs-numbers": { - "version": "2.0.0-preview.2", - "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.2.tgz", - "integrity": "sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==", - "dependencies": { - "@solana/codecs-core": "2.0.0-preview.2", - "@solana/errors": "2.0.0-preview.2" + "node_modules/@oclif/plugin-not-found/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" } }, - "node_modules/@solana/codecs-strings": { - "version": "2.0.0-preview.2", - "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.2.tgz", - "integrity": "sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==", - "dependencies": { - "@solana/codecs-core": "2.0.0-preview.2", - "@solana/codecs-numbers": "2.0.0-preview.2", - "@solana/errors": "2.0.0-preview.2" + "node_modules/@oclif/plugin-not-found/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" }, - "peerDependencies": { - "fastestsmallesttextencoderdecoder": "^1.0.22" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@solana/errors": { - "version": "2.0.0-preview.2", - "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-preview.2.tgz", - "integrity": "sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==", + "node_modules/@oclif/plugin-not-found/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "chalk": "^5.3.0", - "commander": "^12.0.0" + "is-docker": "^2.0.0" }, - "bin": { - "errors": "bin/cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/@solana/options": { - "version": "2.0.0-preview.2", - "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-preview.2.tgz", - "integrity": "sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==", - "dependencies": { - "@solana/codecs-core": "2.0.0-preview.2", - "@solana/codecs-numbers": "2.0.0-preview.2" + "node_modules/@oclif/plugin-not-found/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" } }, - "node_modules/@solana/spl-account-compression": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@solana/spl-account-compression/-/spl-account-compression-0.1.10.tgz", - "integrity": "sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==", + "node_modules/@oclif/plugin-not-found/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "@metaplex-foundation/beet": "^0.7.1", - "@metaplex-foundation/beet-solana": "^0.4.0", - "bn.js": "^5.2.1", - "borsh": "^0.7.0", - "js-sha3": "^0.8.0", - "typescript-collections": "^1.3.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16" + "node": ">=10" }, - "peerDependencies": { - "@solana/web3.js": "^1.50.1" - } - }, - "node_modules/@solana/spl-account-compression/node_modules/@metaplex-foundation/beet-solana": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/beet-solana/-/beet-solana-0.4.1.tgz", - "integrity": "sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==", - "dependencies": { - "@metaplex-foundation/beet": ">=0.1.0", - "@solana/web3.js": "^1.56.2", - "bs58": "^5.0.0", - "debug": "^4.3.4" - } - }, - "node_modules/@solana/spl-account-compression/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@solana/spl-account-compression/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "node_modules/@oclif/plugin-not-found/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@solana/spl-account-compression/node_modules/borsh/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dependencies": { - "base-x": "^3.0.2" + "node_modules/@oclif/plugin-plugins": { + "version": "5.4.33", + "resolved": "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-5.4.33.tgz", + "integrity": "sha512-rGeYqlJ3KghB95b0SAPDTSaV8qtbxIOnH71Qgb+QqdPqKL1iD402DrjmTDT6XpaFVeK04g3XhiB7K3JKjgFABA==", + "dependencies": { + "@oclif/core": "^4.2.6", + "ansis": "^3.14.0", + "debug": "^4.4.0", + "npm": "^10.9.2", + "npm-package-arg": "^11.0.3", + "npm-run-path": "^5.3.0", + "object-treeify": "^4.0.1", + "semver": "^7.7.0", + "validate-npm-package-name": "^5.0.1", + "which": "^4.0.0", + "yarn": "^1.22.22" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@solana/spl-token": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.6.tgz", - "integrity": "sha512-1nCnUqfHVtdguFciVWaY/RKcQz1IF4b31jnKgAmjU9QVN1q7dRUkTEWJZgTYIEtsULjVnC9jRqlhgGN39WbKKA==", + "node_modules/@oclif/plugin-plugins/node_modules/@oclif/core": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.7.tgz", + "integrity": "sha512-49wtIlSEw9UyxdSMPjJ2Ookj5e056Qbqr6A+uN7Ea8XCK6b8Q03KciTEpX5t0rfNggvewJc9e3SHY6uWZIkXVw==", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-group": "^0.0.4", - "@solana/spl-token-metadata": "^0.1.4", - "buffer": "^6.0.3" + "ansi-escapes": "^4.3.2", + "ansis": "^3.14.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "globby": "^11.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^9.0.5", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.91.6" + "node": ">=18.0.0" } }, - "node_modules/@solana/spl-token-group": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.4.tgz", - "integrity": "sha512-7+80nrEMdUKlK37V6kOe024+T7J4nNss0F8LQ9OOPYdWCCfJmsGUzVx2W3oeizZR4IHM6N4yC9v1Xqwc3BTPWw==", + "node_modules/@oclif/plugin-plugins/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "@solana/codecs": "2.0.0-preview.2", - "@solana/spl-type-length-value": "0.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=16" + "node": ">=10" }, - "peerDependencies": { - "@solana/web3.js": "^1.91.6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@solana/spl-token-metadata": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.4.tgz", - "integrity": "sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==", - "dependencies": { - "@solana/codecs": "2.0.0-preview.2", - "@solana/spl-type-length-value": "0.1.0" - }, + "node_modules/@oclif/plugin-plugins/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.91.6" + "node": ">=8" } }, - "node_modules/@solana/spl-token-registry": { - "version": "0.2.4574", - "resolved": "https://registry.npmjs.org/@solana/spl-token-registry/-/spl-token-registry-0.2.4574.tgz", - "integrity": "sha512-JzlfZmke8Rxug20VT/VpI2XsXlsqMlcORIUivF+Yucj7tFi7A0dXG7h+2UnD0WaZJw8BrUz2ABNkUnv89vbv1A==", - "license": "Apache", - "dependencies": { - "cross-fetch": "3.0.6" - }, + "node_modules/@oclif/plugin-plugins/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { - "node": ">=10" - } - }, - "node_modules/@solana/spl-token-registry/node_modules/cross-fetch": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", - "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", - "license": "MIT", - "dependencies": { - "node-fetch": "2.6.1" + "node": ">= 4" } }, - "node_modules/@solana/spl-token-registry/node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "license": "MIT", + "node_modules/@oclif/plugin-plugins/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { - "node": "4.x || >=6.0.0" + "node": ">=8" } }, - "node_modules/@solana/spl-type-length-value": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz", - "integrity": "sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==", - "dependencies": { - "buffer": "^6.0.3" + "node_modules/@oclif/plugin-plugins/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=16" - } - }, - "node_modules/@solana/web3.js": { - "version": "1.95.3", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.95.3.tgz", - "integrity": "sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.25.0", - "@noble/curves": "^1.4.2", - "@noble/hashes": "^1.4.0", - "@solana/buffer-layout": "^4.0.1", - "agentkeepalive": "^4.5.0", - "bigint-buffer": "^1.1.5", - "bn.js": "^5.2.1", - "borsh": "^0.7.0", - "bs58": "^4.0.1", - "buffer": "6.0.3", - "fast-stable-stringify": "^1.0.0", - "jayson": "^4.1.1", - "node-fetch": "^2.7.0", - "rpc-websockets": "^9.0.2", - "superstruct": "^2.0.2" - } - }, - "node_modules/@solana/web3.js/node_modules/@noble/curves": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.5.0.tgz", - "integrity": "sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" + "node": ">=8" }, "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@solana/web3.js/node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@solana/web3.js/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/@oclif/plugin-plugins/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "safe-buffer": "^5.0.1" + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@solana/web3.js/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" + "node_modules/@oclif/plugin-plugins/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" } }, - "node_modules/@solana/web3.js/node_modules/bs58": { + "node_modules/@oclif/plugin-plugins/node_modules/object-treeify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dependencies": { - "base-x": "^3.0.2" + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-4.0.1.tgz", + "integrity": "sha512-Y6tg5rHfsefSkfKujv2SwHulInROy/rCL5F4w0QOWxut8AnxYxf0YmNhTh95Zfyxpsudo66uqkux0ACFnyMSgQ==", + "engines": { + "node": ">= 16" } }, - "node_modules/@solana/web3.js/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" + "node_modules/@oclif/plugin-plugins/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } }, - "node_modules/@solana/web3.js/node_modules/rpc-websockets": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.2.tgz", - "integrity": "sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==", - "license": "LGPL-3.0-only", + "node_modules/@oclif/plugin-plugins/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "@swc/helpers": "^0.5.11", - "@types/uuid": "^8.3.4", - "@types/ws": "^8.2.2", - "buffer": "^6.0.3", - "eventemitter3": "^5.0.1", - "uuid": "^8.3.2", - "ws": "^8.5.0" + "has-flag": "^4.0.0" }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/kozjak" + "engines": { + "node": ">=10" }, - "optionalDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@solana/web3.js/node_modules/superstruct": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", - "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", - "license": "MIT", + "node_modules/@oclif/plugin-plugins/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, "engines": { - "node": ">=14.0.0" + "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@supercharge/promise-pool": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz", - "integrity": "sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg==", + "node_modules/@oclif/plugin-plugins/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/@swc/helpers": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz", - "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", - "license": "Apache-2.0", + "node_modules/@orca-so/common-sdk": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@orca-so/common-sdk/-/common-sdk-0.6.10.tgz", + "integrity": "sha512-MpRtgIObKrs0O+DgSLTJTkVurNJj0PSBDpQ4Yq478r2VCYUi1SCfi9Wj7ZrKqByniA2gtG1Q02r7OquADX6JXw==", "dependencies": { - "tslib": "^2.4.0" + "decimal.js": "^10.5.0", + "tiny-invariant": "^1.3.1" + }, + "peerDependencies": { + "@solana/spl-token": "^0.4.12", + "@solana/web3.js": "^1.90.0" } }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "node_modules/@orca-so/whirlpools-sdk": { + "version": "0.11.9", + "resolved": "https://registry.npmjs.org/@orca-so/whirlpools-sdk/-/whirlpools-sdk-0.11.9.tgz", + "integrity": "sha512-M83l42yOUZ99KO6dbG3awzFObNs751QskdKYrB5217mwKPNuUonAdDh3EXkpyxBDmuUtM8iSlrLDxqfxEv1c7w==", "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "@coral-xyz/anchor": "~0.27.0", + "@orca-so/common-sdk": "^0.3.6", + "@solana/spl-token": "^0.3.8", + "@solana/web3.js": "^1.75.0", + "decimal.js": "^10.3.1", + "tiny-invariant": "^1.2.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "license": "MIT" - }, - "node_modules/@types/big.js": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz", - "integrity": "sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==", - "license": "MIT" - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "node_modules/@orca-so/whirlpools-sdk/node_modules/@coral-xyz/anchor": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.27.0.tgz", + "integrity": "sha512-+P/vPdORawvg3A9Wj02iquxb4T0C5m4P6aZBVYysKl4Amk+r6aMPZkUhilBkD6E4Nuxnoajv3CFykUfkGE0n5g==", "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" + "@coral-xyz/borsh": "^0.27.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" } }, - "node_modules/@types/cli-progress": { - "version": "3.11.6", - "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.6.tgz", - "integrity": "sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==", - "license": "MIT", + "node_modules/@orca-so/whirlpools-sdk/node_modules/@coral-xyz/borsh": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.27.0.tgz", + "integrity": "sha512-tJKzhLukghTWPLy+n8K8iJKgBq1yLT/AxaNd10yJrX8mI56ao5+OFAKAqW/h0i79KCvb4BK0VGO5ECmmolFz9A==", "dependencies": { - "@types/node": "*" + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@orca-so/whirlpools-sdk/node_modules/@orca-so/common-sdk": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@orca-so/common-sdk/-/common-sdk-0.3.7.tgz", + "integrity": "sha512-rSYpEyTYNlvoU1BHX/Sv07CxtDkRxQIm/9853ANnSakbnIQeapf/cBremEVlTTXWEDDOTe7DSjPVHku4Bn5nyg==", "dependencies": { - "@types/node": "*" + "@solana/spl-token": "^0.3.8", + "@solana/web3.js": "^1.75.0", + "decimal.js": "^10.3.1", + "tiny-invariant": "^1.2.0" } }, - "node_modules/@types/emscripten": { - "version": "1.39.13", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", - "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "node_modules/@orca-so/whirlpools-sdk/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", "dependencies": { - "@types/node": "*" + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" } }, - "node_modules/@types/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", - "license": "MIT", + "node_modules/@orca-so/whirlpools-sdk/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "@types/node": "*" + "base-x": "^3.0.2" } }, - "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", - "license": "MIT", + "node_modules/@orca-so/whirlpools-sdk/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "undici-types": "~5.26.4" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "license": "MIT" - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dependencies": { - "@types/node": "*" + "node_modules/@orca-so/whirlpools-sdk/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "license": "MIT" - }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", - "license": "MIT" + "node_modules/@orca-so/whirlpools-sdk/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, - "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dependencies": { - "@types/node": "*" - } + "node_modules/@orca-so/whirlpools-sdk/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" }, - "node_modules/@yarnpkg/fslib": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.4.tgz", - "integrity": "sha512-WhaLwvXEMjCjGxOraQx+Qtmst13iAPOlSElSZfQFdLohva5owlqACRapJ78zZFEW6M9ArqdQlZaHKVN5/mM+SA==", - "license": "BSD-2-Clause", + "node_modules/@pbkit/grpc-client": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@pbkit/grpc-client/-/grpc-client-0.0.3.tgz", + "integrity": "sha512-VVWZ15jDxoAXNylW+dp6eRfxSaXlZwN/emPhxrHGhIj97K87VnVyl+532A6kEAhBldjJLTIoZQ/9dth1qIlGvQ==", "dependencies": { - "@yarnpkg/libzip": "^2.3.0", - "tslib": "^1.13.0" + "@pbkit/runtime": "^0.0.35" }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + "peerDependencies": { + "@grpc/grpc-js": "*" } }, - "node_modules/@yarnpkg/fslib/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/@pbkit/runtime": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@pbkit/runtime/-/runtime-0.0.35.tgz", + "integrity": "sha512-QPey6r26Dfh1gVfUmGH0qn4lhbH2RVRC7St3mnERISyT1Gx1RgBpGIQJs14Pwt8E7TfJB+a0Btj6nr6teUADTg==" }, - "node_modules/@yarnpkg/libzip": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", - "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", - "license": "BSD-2-Clause", - "dependencies": { - "@types/emscripten": "^1.39.6", - "tslib": "^1.13.0" - }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + "node": ">=14" } }, - "node_modules/@yarnpkg/libzip/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "engines": { + "node": ">=12.22.0" + } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dependencies": { - "event-target-shim": "^5.0.0" + "graceful-fs": "4.2.10" }, "engines": { - "node": ">=6.5" + "node": ">=12.22.0" } }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" }, "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "license": "MIT", + "node_modules/@project-serum/anchor": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.26.0.tgz", + "integrity": "sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==", "dependencies": { - "acorn": "^8.11.0" + "@coral-xyz/borsh": "^0.26.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=11" } }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "node_modules/@project-serum/anchor/node_modules/@coral-xyz/borsh": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", + "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", "dependencies": { - "humanize-ms": "^1.2.1" + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" } }, - "node_modules/aggregate-error": { + "node_modules/@project-serum/anchor/node_modules/bs58": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, + "base-x": "^3.0.2" + } + }, + "node_modules/@project-serum/anchor/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aggregate-error/node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "license": "MIT", + "node_modules/@project-serum/anchor/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/@project-serum/anchor/node_modules/superstruct": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + }, + "node_modules/@project-serum/borsh": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz", + "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==", "dependencies": { - "escape-string-regexp": "5.0.0" + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@solana/web3.js": "^1.2.0" } }, - "node_modules/aggregate-error/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@project-serum/serum": { + "version": "0.13.65", + "resolved": "https://registry.npmjs.org/@project-serum/serum/-/serum-0.13.65.tgz", + "integrity": "sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA==", + "dependencies": { + "@project-serum/anchor": "^0.11.1", + "@solana/spl-token": "^0.1.6", + "@solana/web3.js": "^1.21.0", + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/aggregate-error/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/algo-msgpack-with-bigint": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", - "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "node_modules/@project-serum/serum/node_modules/@project-serum/anchor": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.11.1.tgz", + "integrity": "sha512-oIdm4vTJkUy6GmE6JgqDAuQPKI7XM4TPJkjtoIzp69RZe0iAD9JP2XHx7lV1jLdYXeYHqDXfBt3zcq7W91K6PA==", + "dependencies": { + "@project-serum/borsh": "^0.2.2", + "@solana/web3.js": "^1.17.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.0", + "camelcase": "^5.3.1", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "find": "^0.3.0", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "toml": "^3.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=11" } }, - "node_modules/algosdk": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-1.24.1.tgz", - "integrity": "sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==", + "node_modules/@project-serum/serum/node_modules/@solana/spl-token": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", + "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", "dependencies": { - "algo-msgpack-with-bigint": "^2.1.1", - "buffer": "^6.0.2", - "cross-fetch": "^3.1.5", - "hi-base32": "^0.5.1", - "js-sha256": "^0.9.0", - "js-sha3": "^0.8.0", - "js-sha512": "^0.8.0", - "json-bigint": "^1.0.0", - "tweetnacl": "^1.0.3", - "vlq": "^2.0.4" + "@babel/runtime": "^7.10.5", + "@solana/web3.js": "^1.21.0", + "bn.js": "^5.1.0", + "buffer": "6.0.3", + "buffer-layout": "^1.2.0", + "dotenv": "10.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 10" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", + "node_modules/@project-serum/serum/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { - "string-width": "^4.1.0" + "base-x": "^3.0.2" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@project-serum/serum/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@project-serum/serum/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/@project-serum/serum/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + "node_modules/@project-serum/serum/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, - "node_modules/ansis": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.2.1.tgz", - "integrity": "sha512-SgzY+k2aa9UqJe3jzrPZhSVzLc2XrE4/h7rk0dMCDwhCq7ipmpPZvyODoxPCms4OpMLTiBTS+Mpl4VZQ6FDitw==", - "license": "ISC", - "engines": { - "node": ">=15" - } + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, - "node_modules/any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, - "node_modules/aptos": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.8.5.tgz", - "integrity": "sha512-iQxliWesNHjGQ5YYXCyss9eg4+bDGQWqAZa73vprqGQ9tungK0cRjUI2fmnp63Ed6UG6rurHrL+b0ckbZAOZZQ==", - "dependencies": { - "@noble/hashes": "1.1.3", - "@scure/bip39": "1.1.0", - "axios": "0.27.2", - "form-data": "4.0.0", - "tweetnacl": "1.0.3" - }, - "engines": { - "node": ">=11.0.0" - } + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, - "node_modules/aptos/node_modules/@noble/hashes": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", - "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, - "node_modules/aptos/node_modules/@scure/bip39": { + "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" - } - }, - "node_modules/aptos/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/arbundles": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/arbundles/-/arbundles-0.11.1.tgz", - "integrity": "sha512-H1hyI98VTggH7pyxaa6jKuzB3UYHKSwRQChT2pJp8uGGv20FQEQjug/n+mza4yM8dMcLHwXji0PLpmKQKoJs+g==", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@irys/arweave": "^0.0.2", - "@noble/ed25519": "^1.6.1", - "base64url": "^3.0.1", - "bs58": "^4.0.1", - "keccak": "^3.0.2", - "secp256k1": "^5.0.0" - }, - "optionalDependencies": { - "@randlabs/myalgo-connect": "^1.1.2", - "algosdk": "^1.13.1", - "arweave-stream-tx": "^1.1.0", - "multistream": "^4.1.0", - "tmp-promise": "^3.0.2" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/arbundles/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, - "node_modules/arbundles/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dependencies": { - "base-x": "^3.0.2" - } + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, - "node_modules/arconnect": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/arconnect/-/arconnect-0.4.2.tgz", - "integrity": "sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==", - "optional": true, - "peer": true, - "dependencies": { - "arweave": "^1.10.13" - } + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "license": "MIT" + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/@randlabs/communication-bridge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz", + "integrity": "sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==", + "optional": true }, - "node_modules/arweave": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/arweave/-/arweave-1.15.1.tgz", - "integrity": "sha512-rT7FOwqdudd5npqp4xOYdDT2035LtpcqePjwirh4wjRiEtVsz1FZkRiM2Yj+fOAwYzOm/hNG0GDOipDSaiEGGQ==", + "node_modules/@randlabs/myalgo-connect": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz", + "integrity": "sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==", "optional": true, - "peer": true, "dependencies": { - "arconnect": "^0.4.2", - "asn1.js": "^5.4.1", - "base64-js": "^1.5.1", - "bignumber.js": "^9.0.2" - }, - "engines": { - "node": ">=18" + "@randlabs/communication-bridge": "1.0.1" } }, - "node_modules/arweave-stream-tx": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz", - "integrity": "sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==", - "optional": true, + "node_modules/@raydium-io/raydium-sdk": { + "version": "1.3.1-beta.58", + "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk/-/raydium-sdk-1.3.1-beta.58.tgz", + "integrity": "sha512-9SMneQktR6CvxOJ6C3PxW8aMtBsg28+OViaSDwNHgZ/gJP47bvUgUTsFSmnut4Mv9blsnYFxyc5eVoIfPdXeJg==", "dependencies": { - "exponential-backoff": "^3.1.0" + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.3.9", + "axios": "^1.6.2", + "big.js": "^6.2.1", + "bn.js": "^5.2.1", + "decimal.js": "^10.4.3", + "decimal.js-light": "^2.5.1", + "fecha": "^4.2.3", + "lodash": "^4.17.21", + "toformat": "^2.0.0", + "tsup": "^8.1.0" }, "peerDependencies": { - "arweave": "^1.10.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "license": "MIT", - "engines": { - "node": ">=8" + "@solana/web3.js": "^1.73.0" } }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "license": "MIT" - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "node_modules/@raydium-io/raydium-sdk-v2": { + "version": "0.1.23-alpha", + "resolved": "https://registry.npmjs.org/@raydium-io/raydium-sdk-v2/-/raydium-sdk-v2-0.1.23-alpha.tgz", + "integrity": "sha512-xQsbHVMpjAnwY9JScGFwN/Co5F9UruwTLzExJjPTDohqqrxLzeNHjk6RfN/8etUP7QwzR1YwbdyGLBpkBhav1A==", "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "engines": { - "node": ">=8.0.0" + "@project-serum/serum": "^0.13.65", + "@solana/buffer-layout": "^4.0.1", + "@solana/spl-token": "^0.4.6", + "@solana/web3.js": "^1.91.8", + "axios": "^1.1.3", + "big.js": "^6.2.1", + "bn.js": "^5.2.1", + "buffer": "^6.0.3", + "dayjs": "^1.11.5", + "decimal.js-light": "^2.5.1", + "lodash": "^4.17.21", + "toformat": "^2.0.0" } }, - "node_modules/atomically": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", - "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", + "node_modules/@raydium-io/raydium-sdk-v2/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "stubborn-fs": "^1.2.5", - "when-exit": "^2.1.1" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "node_modules/@raydium-io/raydium-sdk/node_modules/@solana/spl-token": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", + "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-metadata": "^0.1.2", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.88.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/@raydium-io/raydium-sdk/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -5475,246 +5593,3125 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } }, - "node_modules/base64url": { - "version": "3.0.1", + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@samverschueren/stream-to-observable": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", + "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", + "dependencies": { + "any-observable": "^0.3.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "rxjs": { + "optional": true + }, + "zen-observable": { + "optional": true + } + } + }, + "node_modules/@scure/base": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.4.tgz", + "integrity": "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz", + "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==", + "dependencies": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "@scure/base": "~1.2.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz", + "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==", + "dependencies": { + "@noble/hashes": "~1.7.1", + "@scure/base": "~1.2.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@solana-developers/helpers": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@solana-developers/helpers/-/helpers-1.5.1.tgz", + "integrity": "sha512-FysSkUc6fkmK7sQ3wFyIZovSvQqFQjIj9MMy0lVRfNhIJ+24G24qztGxx0IosGSbuxtO97sN6Ij09la/4Bvwlg==", + "dependencies": { + "@solana/web3.js": "^1.78.4", + "bs58": "^5.0.0", + "dotenv": "^16.3.1", + "prettier": "^3.0.3", + "typescript": "^5.2.2" + } + }, + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "dependencies": { + "buffer": "~6.0.3" + }, + "engines": { + "node": ">=5.10" + } + }, + "node_modules/@solana/buffer-layout-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", + "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/web3.js": "^1.32.0", + "bigint-buffer": "^1.1.5", + "bignumber.js": "^9.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@solana/buffer-layout/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@solana/codecs": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-rc.1.tgz", + "integrity": "sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-data-structures": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/codecs-strings": "2.0.0-rc.1", + "@solana/options": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-core": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz", + "integrity": "sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==", + "dependencies": { + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-data-structures": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz", + "integrity": "sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-numbers": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz", + "integrity": "sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/codecs-strings": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz", + "integrity": "sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "fastestsmallesttextencoderdecoder": "^1.0.22", + "typescript": ">=5" + } + }, + "node_modules/@solana/errors": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-rc.1.tgz", + "integrity": "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==", + "dependencies": { + "chalk": "^5.3.0", + "commander": "^12.1.0" + }, + "bin": { + "errors": "bin/cli.mjs" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/options": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-rc.1.tgz", + "integrity": "sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==", + "dependencies": { + "@solana/codecs-core": "2.0.0-rc.1", + "@solana/codecs-data-structures": "2.0.0-rc.1", + "@solana/codecs-numbers": "2.0.0-rc.1", + "@solana/codecs-strings": "2.0.0-rc.1", + "@solana/errors": "2.0.0-rc.1" + }, + "peerDependencies": { + "typescript": ">=5" + } + }, + "node_modules/@solana/spl-account-compression": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@solana/spl-account-compression/-/spl-account-compression-0.1.10.tgz", + "integrity": "sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==", + "dependencies": { + "@metaplex-foundation/beet": "^0.7.1", + "@metaplex-foundation/beet-solana": "^0.4.0", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "js-sha3": "^0.8.0", + "typescript-collections": "^1.3.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.50.1" + } + }, + "node_modules/@solana/spl-token": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.12.tgz", + "integrity": "sha512-K6CxzSoO1vC+WBys25zlSDaW0w4UFZO/IvEZquEI35A/PjqXNQHeVigmDCZYEJfESvYarKwsr8tYr/29lPtvaw==", + "dependencies": { + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-group": "^0.0.7", + "@solana/spl-token-metadata": "^0.1.6", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.5" + } + }, + "node_modules/@solana/spl-token-group": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.7.tgz", + "integrity": "sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==", + "dependencies": { + "@solana/codecs": "2.0.0-rc.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.3" + } + }, + "node_modules/@solana/spl-token-metadata": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz", + "integrity": "sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==", + "dependencies": { + "@solana/codecs": "2.0.0-rc.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.95.3" + } + }, + "node_modules/@solana/spl-token-registry": { + "version": "0.2.4574", + "resolved": "https://registry.npmjs.org/@solana/spl-token-registry/-/spl-token-registry-0.2.4574.tgz", + "integrity": "sha512-JzlfZmke8Rxug20VT/VpI2XsXlsqMlcORIUivF+Yucj7tFi7A0dXG7h+2UnD0WaZJw8BrUz2ABNkUnv89vbv1A==", + "dependencies": { + "cross-fetch": "3.0.6" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@solana/spl-token-registry/node_modules/cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "dependencies": { + "node-fetch": "2.6.1" + } + }, + "node_modules/@solana/spl-token-registry/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@solana/spl-token/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@solana/spl-type-length-value": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz", + "integrity": "sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==", + "dependencies": { + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@solana/spl-type-length-value/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@solana/web3.js": { + "version": "1.98.0", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.0.tgz", + "integrity": "sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==", + "dependencies": { + "@babel/runtime": "^7.25.0", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "agentkeepalive": "^4.5.0", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.1", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^2.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/@solana/web3.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@solana/web3.js/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/@solana/web3.js/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/@solana/web3.js/node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/@solana/web3.js/node_modules/jayson": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.3.tgz", + "integrity": "sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ==", + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "uuid": "^8.3.2", + "ws": "^7.5.10" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@solana/web3.js/node_modules/rpc-websockets": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.4.tgz", + "integrity": "sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==", + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/rpc-websockets/node_modules/@types/ws": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", + "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@solana/web3.js/node_modules/rpc-websockets/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@solana/web3.js/node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@solana/web3.js/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@supercharge/promise-pool": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz", + "integrity": "sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@triton-one/yellowstone-grpc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@triton-one/yellowstone-grpc/-/yellowstone-grpc-0.4.0.tgz", + "integrity": "sha512-YJaX+ByPtN6aG4HiKfd62Yd5NUZIiEMoBmSfxdRLBEgT3J9WWqoCRqVTzS93sWpP7IJ5pkGBfxMpDlugM8zn3g==", + "dependencies": { + "@grpc/grpc-js": "^1.8.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "node_modules/@types/big.js": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==" + }, + "node_modules/@types/bs58": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-4.0.4.tgz", + "integrity": "sha512-0IEpMFXXQi2zXaXl9GJ3sRwQo0uEkD+yFOv+FnAU5lkPtcu6h61xb7jc2CFPEZ5BUOaiP13ThuGc9HD4R8lR5g==", + "dependencies": { + "@types/node": "*", + "base-x": "^3.0.6" + } + }, + "node_modules/@types/cli-progress": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.6.tgz", + "integrity": "sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/emscripten": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.40.0.tgz", + "integrity": "sha512-MD2JJ25S4tnjnhjWyalMS6K6p0h+zQV6+Ylm+aGbiS8tSn/aHLSGNzBgduj6FB4zH0ax2GRMGYi/8G1uOxhXWA==" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, + "node_modules/@types/node": { + "version": "22.13.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz", + "integrity": "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@yarnpkg/fslib": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.4.tgz", + "integrity": "sha512-WhaLwvXEMjCjGxOraQx+Qtmst13iAPOlSElSZfQFdLohva5owlqACRapJ78zZFEW6M9ArqdQlZaHKVN5/mM+SA==", + "dependencies": { + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + } + }, + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@yarnpkg/libzip": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", + "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "dependencies": { + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + } + }, + "node_modules/@yarnpkg/libzip/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/algo-msgpack-with-bigint": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", + "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/algosdk": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-1.24.1.tgz", + "integrity": "sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==", + "dependencies": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.2", + "cross-fetch": "^3.1.5", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/algosdk/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "node_modules/ansis": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.15.0.tgz", + "integrity": "sha512-zIcWDJ+Kwqxfdnogx66Gxzr0kVmCcRAdat9nlY2IHsshqTN4fBH6tMeRMPA/2w0rpBayIJvjQAaa2/4RDrNqwg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "engines": { + "node": ">=6" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/aptos": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.8.5.tgz", + "integrity": "sha512-iQxliWesNHjGQ5YYXCyss9eg4+bDGQWqAZa73vprqGQ9tungK0cRjUI2fmnp63Ed6UG6rurHrL+b0ckbZAOZZQ==", + "deprecated": "Package aptos is no longer supported, please migrate to https://www.npmjs.com/package/@aptos-labs/ts-sdk", + "dependencies": { + "@noble/hashes": "1.1.3", + "@scure/bip39": "1.1.0", + "axios": "0.27.2", + "form-data": "4.0.0", + "tweetnacl": "1.0.3" + }, + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/aptos/node_modules/@noble/hashes": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz", + "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/aptos/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/aptos/node_modules/@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, + "node_modules/aptos/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/aptos/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/arbundles": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/arbundles/-/arbundles-0.11.2.tgz", + "integrity": "sha512-vyX7vY6S8B4RFhGSoCixbnR/Z7ckpJjK+b/H7zcgRWJqqXjZqQ+3DQIJ19vKl5AvzNSsj5ja9kQDoZhMiGpBFw==", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@irys/arweave": "^0.0.2", + "@noble/ed25519": "^1.6.1", + "base64url": "^3.0.1", + "bs58": "^4.0.1", + "keccak": "^3.0.2", + "secp256k1": "^5.0.0" + }, + "optionalDependencies": { + "@randlabs/myalgo-connect": "^1.1.2", + "algosdk": "^1.13.1", + "arweave-stream-tx": "^1.1.0", + "multistream": "^4.1.0", + "tmp-promise": "^3.0.2" + } + }, + "node_modules/arbundles/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/arweave-stream-tx": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz", + "integrity": "sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==", + "optional": true, + "dependencies": { + "exponential-backoff": "^3.1.0" + }, + "peerDependencies": { + "arweave": "^1.10.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/atomically": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", + "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", + "dependencies": { + "stubborn-fs": "^1.2.5", + "when-exit": "^2.1.1" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64url": { + "version": "3.0.1", "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", "engines": { - "node": ">=6.0.0" + "node": ">=6.0.0" + } + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/big.js": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" + } + }, + "node_modules/bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip39": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", + "dependencies": { + "@noble/hashes": "^1.2.0" + } + }, + "node_modules/bip39-light": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", + "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bn-sqrt": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bn-sqrt/-/bn-sqrt-1.0.0.tgz", + "integrity": "sha512-XdCMQ7tfEF/f7nrQgnrJ+DLQBwQzSQyPOKIXdUOTcGEvsRKBcIsdfORp7B5H8DWo8FOzZ4+a2TjSZzaqKgzicg==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/borsh/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" + }, + "node_modules/boxen/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.35.0.tgz", + "integrity": "sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/bs58/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, + "node_modules/buffer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", + "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-layout": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", + "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==", + "engines": { + "node": ">=4.5" + } + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==" + }, + "node_modules/bufferutil": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/case-anything": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.13.tgz", + "integrity": "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk-template": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", + "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", + "dependencies": { + "chalk": "^5.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==", + "dependencies": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "engines": { + "node": ">=18" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/configstore": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", + "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", + "dependencies": { + "atomically": "^2.0.3", + "dot-prop": "^9.0.0", + "graceful-fs": "^4.2.11", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "node_modules/configstore/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/consola": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", + "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-js": { + "version": "3.18.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.1.tgz", + "integrity": "sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", + "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "node_modules/csv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", + "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", + "dependencies": { + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==" + }, + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==" + }, + "node_modules/csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "engines": { + "node": "*" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==" + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-8.0.0.tgz", + "integrity": "sha512-R6ep6JJ+eOBZsBr9esiNN1gxFbZE4Q2cULkUSFumGYecAiS6qodDvcPx/sFuWHMNul7DWmrtoEOpYSm7o6tbSA==", + "dependencies": { + "globby": "^14.0.2", + "is-glob": "^4.0.3", + "is-path-cwd": "^3.0.0", + "is-path-inside": "^4.0.0", + "p-map": "^7.0.2", + "slash": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/type-fest": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.35.0.tgz", + "integrity": "sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" } }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } }, - "node_modules/big.js": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", - "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==", + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "engines": { - "node": "*" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bigjs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bigint-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", - "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.3.0" - }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">= 10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, - "node_modules/bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "dependencies": { - "@noble/hashes": "^1.2.0" + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/bip39-light": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", - "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9" + "@noble/hashes": "^1.4.0" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/bn-sqrt": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bn-sqrt/-/bn-sqrt-1.0.0.tgz", - "integrity": "sha512-XdCMQ7tfEF/f7nrQgnrJ+DLQBwQzSQyPOKIXdUOTcGEvsRKBcIsdfORp7B5H8DWo8FOzZ4+a2TjSZzaqKgzicg==", - "license": "MIT", - "dependencies": { - "bn.js": "^5.2.0" + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/borsh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-2.0.0.tgz", - "integrity": "sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==" + "node_modules/ethereum-cryptography/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", - "license": "MIT", + "node_modules/ethereum-cryptography/node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/ethereum-cryptography/node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "license": "MIT", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.x" } }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=18" + "node": ">=16.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dependencies": { - "ansi-regex": "^6.0.1" + "mimic-fn": "^4.0.0" }, "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz", - "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "license": "MIT", - "dependencies": { - "string-width": "^7.0.0" - }, + "node_modules/exit-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz", + "integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==", "engines": { "node": ">=18" }, @@ -5722,1823 +8719,1616 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "optional": true + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=18" + "node": ">= 0.10.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "balanced-match": "^1.0.0" + "ms": "2.0.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", + "node_modules/express/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "fill-range": "^7.1.1" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" + "node": ">= 0.8" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/buffer-layout": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", - "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==", + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">=4.5" + "node": ">= 0.8" } }, - "node_modules/buffer-reverse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", - "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==" - }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "hasInstallScript": true, - "optional": true, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dependencies": { - "node-gyp-build": "^4.3.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=6.14.2" + "node": ">=4" } }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, + "node_modules/extract-files": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", + "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", "engines": { - "node": ">=18" + "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jaydenseric" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", "engines": { - "node": ">=10.6.0" + "node": "> 0.1.90" } }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6.0" } }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "license": "MIT", + "node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" + "fastest-levenshtein": "^1.0.7" } }, - "node_modules/case-anything": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.13.tgz", - "integrity": "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==", - "license": "MIT", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "engines": { + "node": ">=6" } }, - "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 4.9.1" } }, - "node_modules/chalk-template": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", - "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", - "license": "MIT", + "node_modules/fastq": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", "dependencies": { - "chalk": "^5.2.0" - }, - "engines": { - "node": ">=14.16" + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "peerDependencies": { + "picomatch": "^3 || ^4" }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, "engines": { - "node": ">=10" + "node": "^12.20 || >= 14.13" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/ffjavascript": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.3.1.tgz", + "integrity": "sha512-4PbK1WYodQtuF47D4pRI5KUg3Q392vuP5WjE1THSnceHdXwU3ijaoS0OqxTzLknCtz4Z2TtABzkBdBdMn3B/Aw==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "wasmbuilder": "0.0.16", + "wasmcurves": "0.2.2", + "web-worker": "1.2.0" } }, - "node_modules/clean-stack": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", - "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", - "license": "MIT", + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", "dependencies": { - "escape-string-regexp": "4.0.0" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/clean-stack/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" + "minimatch": "^5.0.1" } }, - "node_modules/cli-progress": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", - "license": "MIT", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { - "string-width": "^4.2.3" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "engines": { - "node": ">=6" + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==", - "license": "MIT", + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/cli-truncate/node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/find": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", + "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", + "dependencies": { + "traverse-chain": "~0.1.0" } }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "license": "MIT", + "node_modules/find-process": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.10.tgz", + "integrity": "sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "chalk": "~4.1.2", + "commander": "^12.1.0", + "loglevel": "^1.9.2" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "find-process": "bin/find-process.js" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "license": "MIT", + "node_modules/find-process/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "node_modules/find-process/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", + "node_modules/find-process/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/find-up-simple": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", + "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "license": "MIT", + "node_modules/find-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" + "is-callable": "^1.2.7" }, "engines": { - "node": ">=12.5.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dependencies": { - "color-name": "~1.1.4" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dependencies": { - "delayed-stream": "~1.0.0" + "fetch-blob": "^3.1.2" }, "engines": { - "node": ">= 0.8" + "node": ">=12.20.0" } }, - "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/configstore": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", - "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", - "license": "BSD-2-Clause", + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { - "atomically": "^2.0.3", - "dot-prop": "^9.0.0", - "graceful-fs": "^4.2.11", - "xdg-basedir": "^5.1.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/core-js": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.1.tgz", - "integrity": "sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "node": ">= 8" } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "license": "MIT", + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "node_modules/gaussian": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/gaussian/-/gaussian-1.3.0.tgz", + "integrity": "sha512-rYQ0ESfB+z0t7G95nHH80Zh7Pgg9A0FUYoZqV0yPec5WJZWKIHV2MPYpiJNy8oZAeVqyKwC10WXKSCnUQ5iDVg==", + "engines": { + "node": ">= 0.6.0" } }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "license": "MIT" - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { - "node-fetch": "^2.6.12" + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", + "node_modules/get-intrinsic": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cross-spawn/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/cross-spawn/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" } }, - "node_modules/crypto-hash": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", - "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==", + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + "node_modules/github-url-from-git": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.5.0.tgz", + "integrity": "sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==" }, - "node_modules/csv": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", - "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dependencies": { - "csv-generate": "^3.4.3", - "csv-parse": "^4.16.3", - "csv-stringify": "^5.6.5", - "stream-transform": "^2.1.3" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">= 0.1.90" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/csv-generate": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", - "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==" - }, - "node_modules/csv-parse": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", - "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==" - }, - "node_modules/csv-stringify": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", - "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==" - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">= 12" + "node": ">= 6" } }, - "node_modules/date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "license": "MIT" - }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dependencies": { - "ms": "2.1.2" + "ini": "4.1.1" }, "engines": { - "node": ">=6.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", "dependencies": { - "mimic-response": "^3.1.0" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/globby/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", + "node_modules/google-protobuf": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "engines": { - "node": ">=4.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "license": "MIT", + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/graphemesplit": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/graphemesplit/-/graphemesplit-2.6.0.tgz", + "integrity": "sha512-rG9w2wAfkpg0DILa1pjnjNfucng3usON360shisqIMUBw/87pojcBSrHmeE4UwryAuBih7g8m1oilf5/u8EWdQ==", "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" + "js-base64": "^3.6.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/graphql-request": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-4.3.0.tgz", + "integrity": "sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow==", + "dependencies": { + "cross-fetch": "^3.1.5", + "extract-files": "^9.0.0", + "form-data": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "graphql": "14 - 16" } }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "license": "MIT", - "engines": { - "node": ">=18" + "node_modules/graphql-request/node_modules/form-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", + "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dependencies": { - "clone": "^1.0.2" + "ansi-regex": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/define-lazy-prop": { + "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/del": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-7.1.0.tgz", - "integrity": "sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==", - "license": "MIT", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "globby": "^13.1.2", - "graceful-fs": "^4.2.10", - "is-glob": "^4.0.3", - "is-path-cwd": "^3.0.0", - "is-path-inside": "^4.0.0", - "p-map": "^5.5.0", - "rimraf": "^3.0.2", - "slash": "^4.0.0" - }, - "engines": { - "node": ">=14.16" + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/del/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/del/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { - "path-type": "^4.0.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" + }, + "node_modules/hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/dot-prop": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", - "license": "MIT", + "node_modules/hosted-git-info": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", + "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", "dependencies": { - "type-fest": "^4.18.2" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/dot-prop/node_modules/type-fest": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz", - "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" + "node": ">= 0.6" } }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==", - "license": "MIT", + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "engines": { - "node": ">=0.10.0" + "node": ">=16.17.0" } }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "ms": "^2.0.0" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/hyperlinker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", + "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", + "engines": { + "node": ">=4" + } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "node_modules/i": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", + "engines": { + "node": ">=0.4" + } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "once": "^1.4.0" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "engines": { + "node": ">= 4" } }, - "node_modules/error-ex/node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "node_modules/ignore-walk": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", + "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "minimatch": "^9.0.0" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "license": "MIT", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", "engines": { "node": ">=4" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz", - "integrity": "sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==", - "dependencies": { - "@noble/hashes": "^1.4.0" + "node_modules/index-to-position": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", + "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ethereum-cryptography": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.0.tgz", - "integrity": "sha512-hsm9JhfytIf8QME/3B7j4bc8V+VdTU+Vas1aJlvIS96ffoNAosudXvGoEvWmc7QZYdkC8mrMJz9r0fcbw7GyCA==", - "dependencies": { - "@noble/curves": "1.4.0", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "node_modules/inquirer": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.4.2.tgz", + "integrity": "sha512-reyjHcwyK2LObXgTJH4T1Dpfhwu88LNPTZmg/KenmTsy3T8lN/kZT8Oo7UwwkB9q8+ss2qjjN7GV8oFAfyz9Xg==", "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "@inquirer/core": "^10.1.7", + "@inquirer/prompts": "^7.3.2", + "@inquirer/type": "^3.0.4", + "ansi-escapes": "^4.3.2", + "mute-stream": "^2.0.0", + "run-async": "^3.0.0", + "rxjs": "^7.8.1" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "node_modules/inquirer-autosubmit-prompt": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/inquirer-autosubmit-prompt/-/inquirer-autosubmit-prompt-0.2.0.tgz", + "integrity": "sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==", + "dependencies": { + "chalk": "^2.4.1", + "inquirer": "^6.2.1", + "rxjs": "^6.3.3" + } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/inquirer-autosubmit-prompt/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/inquirer-autosubmit-prompt/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "engines": { - "node": ">=0.8.x" + "node": ">=4" } }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "license": "MIT", + "node_modules/inquirer-autosubmit-prompt/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=16.17" + "node": ">=4" + } + }, + "node_modules/inquirer-autosubmit-prompt/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-autosubmit-prompt/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, + "node_modules/inquirer-autosubmit-prompt/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "license": "MIT", + "node_modules/inquirer-autosubmit-prompt/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/inquirer-autosubmit-prompt/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, - "node_modules/execa/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/inquirer-autosubmit-prompt/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dependencies": { + "escape-string-regexp": "^1.0.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/execa/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "license": "MIT", + "node_modules/inquirer-autosubmit-prompt/node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dependencies": { - "mimic-fn": "^4.0.0" + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0.0" } }, - "node_modules/execa/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", + "node_modules/inquirer-autosubmit-prompt/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "node_modules/exit-hook": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz", - "integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==", - "license": "MIT", + "node_modules/inquirer-autosubmit-prompt/node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" + }, + "node_modules/inquirer-autosubmit-prompt/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.12.0" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "optional": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/inquirer-autosubmit-prompt/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "tslib": "^1.9.0" }, "engines": { - "node": ">=4" + "npm": ">=2.0.0" } }, - "node_modules/extract-files": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", - "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", - "engines": { - "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" + "node_modules/inquirer-autosubmit-prompt/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jaydenseric" - } - }, - "node_modules/eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", "engines": { - "node": "> 0.1.90" + "node": ">=4" } }, - "node_modules/fast-copy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", - "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "license": "MIT", + "node_modules/inquirer-autosubmit-prompt/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "ansi-regex": "^3.0.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=4" } }, - "node_modules/fast-levenshtein": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", - "license": "MIT", + "node_modules/inquirer-autosubmit-prompt/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "fastest-levenshtein": "^1.0.7" - } - }, - "node_modules/fast-redact": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "ansi-regex": "^4.1.0" + }, "engines": { "node": ">=6" } }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fast-stable-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", - "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "license": "MIT", + "node_modules/inquirer-autosubmit-prompt/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "engines": { - "node": ">= 4.9.1" + "node": ">=6" } }, - "node_modules/fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", - "peer": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", + "node_modules/inquirer-autosubmit-prompt/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "reusify": "^1.0.4" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "node_modules/inquirer-autosubmit-prompt/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" + "loose-envify": "^1.0.0" } }, - "node_modules/ffjavascript": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.3.0.tgz", - "integrity": "sha512-l7sR5kmU3gRwDy8g0Z2tYBXy5ttmafRPFOqY7S6af5cq51JqJWt5eQ/lSR/rs2wQNbDYaYlQr5O+OSUf/oMLoQ==", - "license": "GPL-3.0", - "dependencies": { - "wasmbuilder": "0.0.16", - "wasmcurves": "0.2.2", - "web-worker": "1.2.0" + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "engines": { + "node": ">= 10" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dependencies": { - "escape-string-regexp": "^1.0.5" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/find": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", - "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", - "license": "MIT", - "dependencies": { - "traverse-chain": "~0.1.0" + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" } }, - "node_modules/find-process": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz", - "integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==", - "license": "MIT", + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dependencies": { - "chalk": "^4.0.0", - "commander": "^5.1.0", - "debug": "^4.1.1" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, - "bin": { - "find-process": "bin/find-process.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-process/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/find-process/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "engines": { - "node": ">= 6" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "node_modules/is-in-ci": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", + "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", + "bin": { + "is-in-ci": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up-simple": { + "node_modules/is-inside-container": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", - "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, "engines": { - "node": ">=18" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", + "node_modules/is-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "engines": { - "node": ">=4.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "license": "MIT", - "dependencies": { - "fetch-blob": "^3.1.2" - }, + "node_modules/is-npm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", "engines": { - "node": ">=12.20.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">= 8" + "node": ">=0.12.0" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", + "node_modules/is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", "dependencies": { - "yallist": "^4.0.0" + "symbol-observable": "^1.1.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/gaussian": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/gaussian/-/gaussian-1.3.0.tgz", - "integrity": "sha512-rYQ0ESfB+z0t7G95nHH80Zh7Pgg9A0FUYoZqV0yPec5WJZWKIHV2MPYpiJNy8oZAeVqyKwC10WXKSCnUQ5iDVg==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" + "node": ">=4" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", + "node_modules/is-observable/node_modules/symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=0.10.0" } }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", - "license": "MIT", + "node_modules/is-path-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", + "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/github-url-from-git": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.5.0.tgz", - "integrity": "sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==", - "license": "MIT" + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", + "node_modules/is-scoped": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-3.0.0.tgz", + "integrity": "sha512-ezxLUq30kiTvP0w/5n9tj4qTOKlrA07Oty1hwTQ+lcqw11x6uc8sp7VRb2OVGRzKfCHZ2A22T5Zsau/Q2Akb0g==", "dependencies": { - "is-glob": "^4.0.1" + "scoped-regex": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dependencies": { - "brace-expansion": "^1.1.7" + "which-typed-array": "^1.1.16" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "license": "MIT", - "dependencies": { - "ini": "4.1.1" - }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "engines": { "node": ">=18" }, @@ -7546,278 +10336,279 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "node_modules/is-url-superb": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-6.1.0.tgz", + "integrity": "sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/google-protobuf": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", - "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==", - "license": "(BSD-3-Clause AND Apache-2.0)" - }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=10.19.0" + "node": ">=16" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemesplit": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/graphemesplit/-/graphemesplit-2.4.4.tgz", - "integrity": "sha512-lKrpp1mk1NH26USxC/Asw4OHbhSQf5XfrWZ+CDv/dFVvd1j17kFgMotdJvOesmHkbFX9P9sBfpH8VogxOWLg8w==", - "dependencies": { - "js-base64": "^3.6.0", - "unicode-trie": "^2.0.0" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "peerDependencies": { + "ws": "*" } }, - "node_modules/graphql-request": { + "node_modules/issue-regex": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-4.3.0.tgz", - "integrity": "sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow==", - "dependencies": { - "cross-fetch": "^3.1.5", - "extract-files": "^9.0.0", - "form-data": "^3.0.0" + "resolved": "https://registry.npmjs.org/issue-regex/-/issue-regex-4.3.0.tgz", + "integrity": "sha512-7731a/t2llyrk8Hdwl1x3LkhIFGzxHQGpJA7Ur9cIRViakQF2y25Lwhx8Ziy1B068+kBYUmYPBzw5uo3DdWrdQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "graphql": "14 - 16" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graphql-request/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "node": ">=10" } }, - "node_modules/help-me": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", - "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" - }, - "node_modules/hi-base32": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", - "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==" - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "license": "ISC", + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "lru-cache": "^10.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.6" + "node": "*" } }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/jayson": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz", + "integrity": "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "lodash": "^4.17.20", + "uuid": "^8.3.2", + "ws": "^7.4.5" + }, + "bin": { + "jayson": "bin/jayson.js" }, "engines": { - "node": ">=10.19.0" + "node": ">=8" } }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "license": "Apache-2.0", + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/jayson/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/jayson/node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/jayson/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { - "node": ">=16.17.0" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "node_modules/jito-ts": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jito-ts/-/jito-ts-4.2.0.tgz", + "integrity": "sha512-on2QaZ+6H/LgHiQgC7bz0b0Pm3UdPK2wEroX4eDMXAPDPL1C1pJyyXqyJFZ84SL+JX0ESc18zC7jaelI2IYpAQ==", "dependencies": { - "ms": "^2.0.0" + "@grpc/grpc-js": "^1.8.13", + "@noble/ed25519": "^1.7.1", + "@solana/web3.js": "~1.77.3", + "@types/bs58": "^4.0.4", + "agentkeepalive": "^4.3.0", + "bs58": "^6.0.0", + "dotenv": "^16.0.3", + "jayson": "^4.0.0", + "node-fetch": "^2.6.7", + "rpc-websockets": "7.10.0", + "superstruct": "^1.0.3" } }, - "node_modules/hyperlinker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", - "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", - "license": "MIT", - "engines": { - "node": ">=4" + "node_modules/jito-ts/node_modules/@solana/web3.js": { + "version": "1.77.4", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.77.4.tgz", + "integrity": "sha512-XdN0Lh4jdY7J8FYMyucxCwzn6Ga2Sr1DHDWRbqVzk7ZPmmpSPOVWHzO67X1cVT+jNi1D6gZi2tgjHgDPuj6e9Q==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", + "@solana/buffer-layout": "^4.0.0", + "agentkeepalive": "^4.2.1", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.0.0", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.0", + "node-fetch": "^2.6.7", + "rpc-websockets": "^7.5.1", + "superstruct": "^0.14.2" } }, - "node_modules/i": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", - "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", - "engines": { - "node": ">=0.4" + "node_modules/jito-ts/node_modules/@solana/web3.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/jito-ts/node_modules/@solana/web3.js/node_modules/superstruct": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", + "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" + }, + "node_modules/jito-ts/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/jito-ts/node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "base-x": "^5.0.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/jito-ts/node_modules/bs58/node_modules/base-x": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", + "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==" + }, + "node_modules/jito-ts/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -7831,1016 +10622,971 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "license": "ISC", + ], "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/jito-ts/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/jito-ts/node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "peerDependencies": { + "ws": "*" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "license": "MIT", + "node_modules/jito-ts/node_modules/jayson": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.3.tgz", + "integrity": "sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ==", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "uuid": "^8.3.2", + "ws": "^7.5.10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" + "bin": { + "jayson": "bin/jayson.js" }, "engines": { "node": ">=8" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", + "node_modules/jito-ts/node_modules/superstruct": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/index-to-position": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", - "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", - "license": "MIT", + "node_modules/jito-ts/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { - "node": ">=18" + "node": ">=8.3.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "license": "ISC", + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" }, - "node_modules/inquirer-autosubmit-prompt": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/inquirer-autosubmit-prompt/-/inquirer-autosubmit-prompt-0.2.0.tgz", - "integrity": "sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.1", - "inquirer": "^6.2.1", - "rxjs": "^6.3.3" - } + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" }, - "node_modules/inquirer-autosubmit-prompt/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, - "node_modules/inquirer-autosubmit-prompt/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" }, - "node_modules/inquirer-autosubmit-prompt/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "node_modules/inquirer-autosubmit-prompt/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "license": "MIT", + "node_modules/jsbi": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", + "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" + "bignumber.js": "^9.0.0" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "license": "ISC" + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/inquirer-autosubmit-prompt/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, - "node_modules/inquirer-autosubmit-prompt/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] }, - "node_modules/inquirer-autosubmit-prompt/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "license": "MIT", + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dependencies": { - "escape-string-regexp": "^1.0.5" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" }, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0.0" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "license": "MIT", + "node_modules/ky": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.5.tgz", + "integrity": "sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "license": "MIT", + "node_modules/latest-version": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", + "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", + "dependencies": { + "package-json": "^10.0.0" + }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "license": "ISC" + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "license": "MIT", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", "dependencies": { - "mimic-fn": "^1.0.0" + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "license": "MIT", + "node_modules/listr-input": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/listr-input/-/listr-input-0.2.1.tgz", + "integrity": "sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==", "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "inquirer": "^7.0.0", + "inquirer-autosubmit-prompt": "^0.2.0", + "rxjs": "^6.5.3", + "through": "^2.3.8" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "license": "Apache-2.0", + "node_modules/listr-input/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "tslib": "^1.9.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "npm": ">=2.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "license": "MIT", + "node_modules/listr-input/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "license": "MIT", + "node_modules/listr-input/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, + "node_modules/listr-input/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=4" + "node": ">=0.8.0" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "license": "MIT", + "node_modules/listr-input/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { - "ansi-regex": "^4.1.0" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", + "node_modules/listr-input/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/listr-input/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dependencies": { - "has-flag": "^3.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/inquirer-autosubmit-prompt/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/listr-input/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/listr-input/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/listr-input/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", + "node_modules/listr-input/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { - "loose-envify": "^1.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "node_modules/listr-input/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/listr-input/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/listr-input/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/listr-input/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" + "node_modules/listr-input/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" + "node_modules/listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "dependencies": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "listr": "^0.14.2" } }, - "node_modules/is-extglob": { + "node_modules/listr-update-renderer/node_modules/ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/listr-update-renderer/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", + "node_modules/listr-update-renderer/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dependencies": { - "is-extglob": "^2.1.1" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "node_modules/listr-update-renderer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=0.8.0" } }, - "node_modules/is-in-ci": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", - "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", - "license": "MIT", - "bin": { - "is-in-ci": "cli.js" + "node_modules/listr-update-renderer/node_modules/log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", + "dependencies": { + "chalk": "^1.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "license": "MIT", + "node_modules/listr-update-renderer/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" + "node_modules/listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "dependencies": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/is-installed-globally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", - "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", - "license": "MIT", + "node_modules/listr-verbose-renderer/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "global-directory": "^4.0.1", - "is-path-inside": "^4.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/listr-verbose-renderer/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/listr-verbose-renderer/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", + "node_modules/listr-verbose-renderer/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/listr-verbose-renderer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=0.12.0" + "node": ">=0.8.0" } }, - "node_modules/is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "license": "MIT", + "node_modules/listr-verbose-renderer/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dependencies": { - "symbol-observable": "^1.1.0" + "escape-string-regexp": "^1.0.5" }, "engines": { "node": ">=4" } }, - "node_modules/is-observable/node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", - "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/listr-verbose-renderer/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "license": "MIT", + "node_modules/listr/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "license": "MIT" + "node_modules/listr/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" + } }, - "node_modules/is-scoped": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-3.0.0.tgz", - "integrity": "sha512-ezxLUq30kiTvP0w/5n9tj4qTOKlrA07Oty1hwTQ+lcqw11x6uc8sp7VRb2OVGRzKfCHZ2A22T5Zsau/Q2Akb0g==", - "license": "MIT", + "node_modules/listr/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { - "scoped-regex": "^3.0.0" + "tslib": "^1.9.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "npm": ">=2.0.0" } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "license": "MIT", + "node_modules/listr/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/is-url-superb": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-6.1.0.tgz", - "integrity": "sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ==", - "license": "MIT", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==" + }, + "node_modules/log-symbols": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.0.tgz", + "integrity": "sha512-zrc91EDk2M+2AXo/9BTvK91pqb7qrPg2nX/Hy+u8a5qQlbaOflCKO+6SqgZ+M+xUFxGdKTgwnGiL96b1W3ikRA==", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", "dependencies": { - "is-docker": "^2.0.0" + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "license": "ISC", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "engines": { - "node": ">=16" + "node": ">=4" } }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "peerDependencies": { - "ws": "*" + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" } }, - "node_modules/issue-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/issue-regex/-/issue-regex-4.1.0.tgz", - "integrity": "sha512-X3HBmm7+Th+l4/kMtqwcHHgELD0Lfl0Ina6S3+grr+mKmTxsrM84NAO1UuRPIxIbGLIl3TCEu45S1kdu21HYbQ==", - "license": "MIT", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/jake": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", - "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", - "license": "Apache-2.0", + "node_modules/log-update/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", "engines": { - "node": "*" + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" } }, - "node_modules/jayson": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.2.tgz", - "integrity": "sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==", - "license": "MIT", + "node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "@types/connect": "^3.4.33", - "@types/node": "^12.12.54", - "@types/ws": "^7.4.4", - "commander": "^2.20.3", - "delay": "^5.0.0", - "es6-promisify": "^5.0.0", - "eyes": "^0.1.8", - "isomorphic-ws": "^4.0.1", - "json-stringify-safe": "^5.0.1", - "JSONStream": "^1.3.5", - "uuid": "^8.3.2", - "ws": "^7.5.10" + "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { - "jayson": "bin/jayson.js" - }, - "engines": { - "node": ">=8" + "loose-envify": "cli.js" } }, - "node_modules/jayson/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } }, - "node_modules/jayson/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "node_modules/jayson/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "license": "BSD-3-Clause", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" - }, - "node_modules/js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/js-sha512": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", - "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", + "node_modules/merkletreejs": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", + "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^4.2.0", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 7.6.0" } }, - "node_modules/jsbi": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", - "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==", - "license": "Apache-2.0" - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ] + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "bin": { - "JSONStream": "bin.js" + "mime": "cli.js" }, "engines": { - "node": "*" + "node": ">=10.0.0" } }, - "node_modules/jwt-decode": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", - "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "hasInstallScript": true, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": { - "json-buffer": "3.0.1" + "node": ">= 0.6" } }, - "node_modules/ky": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.1.tgz", - "integrity": "sha512-KJ/IXXkFhTDqxcN8wKqMXk1/UoOpc0UnOB6H7QcqlPInh/M2B5Mlj+i9exez1w4RSwJhNFmHiUDPriAYFwb5VA==", - "license": "MIT", + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/latest-version": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", - "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", - "license": "MIT", - "dependencies": { - "package-json": "^10.0.0" - }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "engines": { "node": ">=18" }, @@ -8848,1481 +11594,1542 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, - "node_modules/listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "license": "MIT", + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/listr-input": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/listr-input/-/listr-input-0.2.1.tgz", - "integrity": "sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==", - "license": "MIT", + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { - "inquirer": "^7.0.0", - "inquirer-autosubmit-prompt": "^0.2.0", - "rxjs": "^6.5.3", - "through": "^2.3.8" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/listr-input/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/listr-input/node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, + "node_modules/mixme": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz", + "integrity": "sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==", "engines": { - "node": ">=8.0.0" + "node": ">= 8.0.0" } }, - "node_modules/listr-input/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "npm": ">=2.0.0" + "node": ">=10" } }, - "node_modules/listr-input/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==", - "license": "MIT", + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "engines": { "node": ">=4" } }, - "node_modules/listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "license": "MIT", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, "dependencies": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "listr": "^0.14.2" + "once": "^1.4.0", + "readable-stream": "^3.6.0" } }, - "node_modules/listr-update-renderer/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "bin": { + "mustache": "bin/mustache" } }, - "node_modules/listr-update-renderer/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "license": "MIT", + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/listr-update-renderer/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "license": "MIT", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/listr-update-renderer/node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, + "node_modules/natural-orderby": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/listr-update-renderer/node_modules/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", - "license": "MIT", - "engines": { - "node": ">=4" + "node_modules/near-hd-key": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/near-hd-key/-/near-hd-key-1.2.1.tgz", + "integrity": "sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==", + "dependencies": { + "bip39": "3.0.2", + "create-hmac": "1.1.7", + "tweetnacl": "1.0.3" } }, - "node_modules/listr-update-renderer/node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", - "license": "MIT", + "node_modules/near-hd-key/node_modules/@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" + }, + "node_modules/near-hd-key/node_modules/bip39": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", + "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", "dependencies": { - "chalk": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" } }, - "node_modules/listr-update-renderer/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "license": "MIT", + "node_modules/near-seed-phrase": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/near-seed-phrase/-/near-seed-phrase-0.2.1.tgz", + "integrity": "sha512-feMuums+kVL3LSuPcP4ld07xHCb2mu6z48SGfP3W+8tl1Qm5xIcjiQzY2IDPBvFgajRDxWSb8GzsRHoInazByw==", "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "bip39-light": "^1.0.7", + "bs58": "^4.0.1", + "near-hd-key": "^1.2.1", + "tweetnacl": "^1.0.2" + } + }, + "node_modules/near-seed-phrase/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" } }, - "node_modules/listr-update-renderer/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "license": "MIT", + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { - "node": ">=0.8.0" + "node": ">= 0.6" } }, - "node_modules/listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "license": "MIT", + "node_modules/new-github-release-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz", + "integrity": "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==", "dependencies": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" + "type-fest": "^2.5.1" }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr-verbose-renderer/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/new-github-release-url/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "engines": { - "node": ">=4" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr-verbose-renderer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], "engines": { - "node": ">=4" + "node": ">=10.5.0" } }, - "node_modules/listr-verbose-renderer/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "license": "MIT", + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { - "restore-cursor": "^2.0.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=4" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/listr-verbose-renderer/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/listr-verbose-renderer/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/listr-verbose-renderer/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "license": "MIT", + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dependencies": { - "escape-string-regexp": "^1.0.5" + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=4" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/listr-verbose-renderer/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": ">=4" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/listr-verbose-renderer/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "license": "MIT", + "node_modules/np": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/np/-/np-10.2.0.tgz", + "integrity": "sha512-7Pwk8qcsks2c9ETS35aeJSON6uJAbOsx7TwTFzZNUGgH4djT+Yt/p9S7PZuqH5pkcpNUhasne3cDRBzaUtvetg==", + "dependencies": { + "chalk": "^5.4.1", + "chalk-template": "^1.1.0", + "cosmiconfig": "^8.3.6", + "del": "^8.0.0", + "escape-goat": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "execa": "^8.0.1", + "exit-hook": "^4.0.0", + "github-url-from-git": "^1.5.0", + "hosted-git-info": "^8.0.2", + "ignore-walk": "^7.0.0", + "import-local": "^3.2.0", + "inquirer": "^12.3.2", + "is-installed-globally": "^1.0.0", + "is-interactive": "^2.0.0", + "is-scoped": "^3.0.0", + "issue-regex": "^4.3.0", + "listr": "^0.14.3", + "listr-input": "^0.2.1", + "log-symbols": "^7.0.0", + "meow": "^13.2.0", + "new-github-release-url": "^2.0.0", + "npm-name": "^8.0.0", + "onetime": "^7.0.0", + "open": "^10.0.4", + "p-memoize": "^7.1.1", + "p-timeout": "^6.1.4", + "path-exists": "^5.0.0", + "pkg-dir": "^8.0.0", + "read-package-up": "^11.0.0", + "read-pkg": "^9.0.1", + "rxjs": "^7.8.1", + "semver": "^7.6.0", + "symbol-observable": "^4.0.0", + "terminal-link": "^3.0.0", + "update-notifier": "^7.3.1" + }, + "bin": { + "np": "source/cli.js" + }, "engines": { - "node": ">=4" + "bun": ">=1", + "git": ">=2.11.0", + "node": ">=18", + "npm": ">=9", + "pnpm": ">=8", + "yarn": ">=1.7.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/np?sponsor=1" } }, - "node_modules/listr-verbose-renderer/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "license": "MIT", + "node_modules/npm": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.2.tgz", + "integrity": "sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "normalize-package-data", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], "dependencies": { - "mimic-fn": "^1.0.0" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^8.0.0", + "@npmcli/config": "^9.0.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/map-workspaces": "^4.0.2", + "@npmcli/package-json": "^6.1.0", + "@npmcli/promise-spawn": "^8.0.2", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "@sigstore/tuf": "^3.0.0", + "abbrev": "^3.0.0", + "archy": "~1.0.0", + "cacache": "^19.0.1", + "chalk": "^5.3.0", + "ci-info": "^4.1.0", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.4.5", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^8.0.2", + "ini": "^5.0.0", + "init-package-json": "^7.0.2", + "is-cidr": "^5.1.0", + "json-parse-even-better-errors": "^4.0.0", + "libnpmaccess": "^9.0.0", + "libnpmdiff": "^7.0.0", + "libnpmexec": "^9.0.0", + "libnpmfund": "^6.0.0", + "libnpmhook": "^11.0.0", + "libnpmorg": "^7.0.0", + "libnpmpack": "^8.0.0", + "libnpmpublish": "^10.0.1", + "libnpmsearch": "^8.0.0", + "libnpmteam": "^7.0.0", + "libnpmversion": "^7.0.0", + "make-fetch-happen": "^14.0.3", + "minimatch": "^9.0.5", + "minipass": "^7.1.1", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^11.0.0", + "nopt": "^8.0.0", + "normalize-package-data": "^7.0.0", + "npm-audit-report": "^6.0.0", + "npm-install-checks": "^7.1.1", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-profile": "^11.0.1", + "npm-registry-fetch": "^18.0.2", + "npm-user-validate": "^3.0.0", + "p-map": "^4.0.0", + "pacote": "^19.0.1", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^4.0.0", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "ssri": "^12.0.0", + "supports-color": "^9.4.0", + "tar": "^6.2.1", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^6.0.0", + "which": "^5.0.0", + "write-file-atomic": "^6.0.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/listr-verbose-renderer/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", + "node_modules/npm-name": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-name/-/npm-name-8.0.0.tgz", + "integrity": "sha512-DIuCGcKYYhASAZW6Xh/tiaGMko8IHOHe0n3zOA7SzTi0Yvy00x8L7sa5yNiZ75Ny58O/KeRtNouy8Ut6gPbKiw==", "dependencies": { - "has-flag": "^3.0.0" + "is-scoped": "^3.0.0", + "is-url-superb": "^6.1.0", + "ky": "^1.2.0", + "lodash.zip": "^4.2.0", + "org-regex": "^1.0.0", + "p-map": "^7.0.1", + "registry-auth-token": "^5.0.2", + "registry-url": "^6.0.1", + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/listr/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "license": "Apache-2.0", + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", "dependencies": { - "tslib": "^1.9.0" + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, "engines": { - "npm": ">=2.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/listr/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dependencies": { - "p-locate": "^4.1.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, - "node_modules/lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", - "license": "MIT", + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "inBundle": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, "license": "MIT", "dependencies": { - "restore-cursor": "^2.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "license": "MIT", + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, "engines": { - "node": ">=4" + "node": ">=18.0.0" } }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "license": "MIT", + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "mimic-fn": "^1.0.0" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "8.0.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/metavuln-calculator": "^8.0.0", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.1", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "bin-links": "^5.0.0", + "cacache": "^19.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.1", + "pacote": "^19.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "ssri": "^12.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/config": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", + "ci-info": "^4.0.0", + "ini": "^5.0.0", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/log-update/node_modules/strip-ansi": { + "node_modules/npm/node_modules/@npmcli/fs": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "ansi-regex": "^3.0.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/git": { + "version": "6.0.1", + "inBundle": true, + "license": "ISC", "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "license": "Apache-2.0" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "bin": { - "loose-envify": "cli.js" + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", "dependencies": { - "tslib": "^2.0.3" + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "8.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^19.0.0", + "json-parse-even-better-errors": "^4.0.0", + "pacote": "^20.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5" + }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "license": "ISC" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { + "version": "20.0.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/merkletreejs": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", - "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "6.1.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "bignumber.js": "^9.0.1", - "buffer-reverse": "^1.0.1", - "crypto-js": "^4.2.0", - "treeify": "^1.1.0", - "web3-utils": "^1.3.4" + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "normalize-package-data": "^7.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3" }, "engines": { - "node": ">= 7.6.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "which": "^5.0.0" }, "engines": { - "node": ">=8.6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" + "node_modules/npm/node_modules/@npmcli/query": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "9.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, "license": "MIT", + "optional": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "inBundle": true, + "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "3.0.0", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^3.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/npm/node_modules/abbrev": { + "version": "3.0.0", + "inBundle": true, "license": "ISC", "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.1", + "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "debug": "^4.3.4" }, "engines": { - "node": ">= 8" + "node": ">= 14" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/mixme": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz", - "integrity": "sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==", - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/npm/node_modules/ansi-styles": { + "version": "6.2.1", + "inBundle": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multistream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", - "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "once": "^1.4.0", - "readable-stream": "^3.6.0" - } + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "bin": { - "mustache": "bin/mustache" - } + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" }, - "node_modules/natural-orderby": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", - "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", - "license": "MIT", + "node_modules/npm/node_modules/bin-links": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, "engines": { - "node": "*" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/near-hd-key": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/near-hd-key/-/near-hd-key-1.2.1.tgz", - "integrity": "sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==", - "dependencies": { - "bip39": "3.0.2", - "create-hmac": "1.1.7", - "tweetnacl": "1.0.3" + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/near-hd-key/node_modules/@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" - }, - "node_modules/near-hd-key/node_modules/bip39": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", - "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" + "balanced-match": "^1.0.0" } }, - "node_modules/near-seed-phrase": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/near-seed-phrase/-/near-seed-phrase-0.2.0.tgz", - "integrity": "sha512-NpmrnejpY1AdlRpDZ0schJQJtfBaoUheRfiYtQpcq9TkwPgqKZCRULV5L3hHmLc0ep7KRtikbPQ9R2ztN/3cyQ==", + "node_modules/npm/node_modules/cacache": { + "version": "19.0.1", + "inBundle": true, + "license": "ISC", "dependencies": { - "bip39-light": "^1.0.7", - "bs58": "^4.0.1", - "near-hd-key": "^1.2.1", - "tweetnacl": "^1.0.2" + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/near-seed-phrase/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" + "node_modules/npm/node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, - "node_modules/near-seed-phrase/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/npm/node_modules/cacache/node_modules/minizlib": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/new-github-release-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz", - "integrity": "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==", + "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "inBundle": true, "license": "MIT", - "dependencies": { - "type-fest": "^2.5.1" + "bin": { + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/new-github-release-url/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", + "node_modules/npm/node_modules/cacache/node_modules/p-map": { + "version": "7.0.2", + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/npm/node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "inBundle": true, + "license": "ISC", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "node_modules/npm/node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "node_modules/npm/node_modules/chalk": { + "version": "5.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.1.0", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" + "url": "https://github.com/sponsors/sibiraj-s" } ], + "inBundle": true, "license": "MIT", "engines": { - "node": ">=10.5.0" + "node": ">=8" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/npm/node_modules/cidr-regex": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause", "dependencies": { - "whatwg-url": "^5.0.0" + "ip-regex": "^5.0.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=14" } }, - "node_modules/node-gyp-build": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", - "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "license": "BSD-2-Clause", + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/npm/node_modules/cmd-shim": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/np": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/np/-/np-10.0.7.tgz", - "integrity": "sha512-vIPKQwOYKpQU40PU5x/vLfN2haj8ObxMvR1QGt7EZnBPWdm4WEbHdumYAnMV7AeR9kACsMqcqAP37sAo5cW5jA==", + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.6", + "inBundle": true, "license": "MIT", "dependencies": { - "chalk": "^5.3.0", - "chalk-template": "^1.1.0", - "cosmiconfig": "^8.3.6", - "del": "^7.1.0", - "escape-goat": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "execa": "^8.0.1", - "exit-hook": "^4.0.0", - "github-url-from-git": "^1.5.0", - "hosted-git-info": "^7.0.1", - "ignore-walk": "^6.0.4", - "import-local": "^3.1.0", - "inquirer": "^9.2.15", - "is-installed-globally": "^1.0.0", - "is-interactive": "^2.0.0", - "is-scoped": "^3.0.0", - "issue-regex": "^4.1.0", - "listr": "^0.14.3", - "listr-input": "^0.2.1", - "log-symbols": "^6.0.0", - "meow": "^13.2.0", - "new-github-release-url": "^2.0.0", - "npm-name": "^8.0.0", - "onetime": "^7.0.0", - "open": "^10.0.4", - "p-memoize": "^7.1.1", - "p-timeout": "^6.1.2", - "path-exists": "^5.0.0", - "pkg-dir": "^8.0.0", - "read-package-up": "^11.0.0", - "read-pkg": "^9.0.1", - "rxjs": "^7.8.1", - "semver": "^7.6.0", - "symbol-observable": "^4.0.0", - "terminal-link": "^3.0.0", - "update-notifier": "^7.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" }, "bin": { - "np": "source/cli.js" + "node-which": "bin/node-which" }, "engines": { - "git": ">=2.11.0", - "node": ">=18", - "npm": ">=9", - "pnpm": ">=8", - "yarn": ">=1.7.0" + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, - "funding": { - "url": "https://github.com/sindresorhus/np?sponsor=1" + "engines": { + "node": ">=4" } }, - "node_modules/np/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "license": "ISC", + "node_modules/npm/node_modules/debug": { + "version": "4.3.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.2.0", + "inBundle": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 12" + "node": ">=0.3.1" } }, - "node_modules/np/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/np/node_modules/inquirer": { - "version": "9.3.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.6.tgz", - "integrity": "sha512-riK/iQB2ctwkpWYgjjWIRv3MBLt2gzb2Sj0JNQNbyTXgyXsLWcDPJ5WS5ZDTCx7BRFnJsARtYh+58fjP5M2Y0Q==", + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.3", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/np/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4.9.1" } }, - "node_modules/np/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "license": "MIT", + "node_modules/npm/node_modules/foreground-child": { + "version": "3.3.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/np/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", - "license": "MIT", + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=18" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.4.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/np/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "8.0.2", + "inBundle": true, "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/np/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "inBundle": true, "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/np/node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.5", + "inBundle": true, "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 14" } }, - "node_modules/npm": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.1.tgz", - "integrity": "sha512-Dp1C6SvSMYQI7YHq/y2l94uvI+59Eqbu1EpuKQHQ8p16txXRuRit5gH3Lnaagk2aXDIjg/Iru9pd05bnneKgdw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/redact", - "@npmcli/run-script", - "@sigstore/tuf", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "normalize-package-data", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "spdx-expression-parse", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "workspaces": [ - "docs", - "smoke-tests", - "mock-globals", - "mock-registry", - "workspaces/*" - ], + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^7.5.3", - "@npmcli/config": "^8.3.3", - "@npmcli/fs": "^3.1.1", - "@npmcli/map-workspaces": "^3.0.6", - "@npmcli/package-json": "^5.1.1", - "@npmcli/promise-spawn": "^7.0.2", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "@sigstore/tuf": "^2.3.4", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^18.0.3", - "chalk": "^5.3.0", - "ci-info": "^4.0.0", - "cli-columns": "^4.0.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.3", - "glob": "^10.4.1", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^7.0.2", - "ini": "^4.1.3", - "init-package-json": "^6.0.3", - "is-cidr": "^5.1.0", - "json-parse-even-better-errors": "^3.0.2", - "libnpmaccess": "^8.0.6", - "libnpmdiff": "^6.1.3", - "libnpmexec": "^8.1.2", - "libnpmfund": "^5.0.11", - "libnpmhook": "^10.0.5", - "libnpmorg": "^6.0.6", - "libnpmpack": "^7.0.3", - "libnpmpublish": "^9.0.9", - "libnpmsearch": "^7.0.6", - "libnpmteam": "^6.0.5", - "libnpmversion": "^6.0.3", - "make-fetch-happen": "^13.0.1", - "minimatch": "^9.0.4", - "minipass": "^7.1.1", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^10.1.0", - "nopt": "^7.2.1", - "normalize-package-data": "^6.0.1", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.3.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-profile": "^10.0.0", - "npm-registry-fetch": "^17.0.1", - "npm-user-validate": "^2.0.1", - "p-map": "^4.0.0", - "pacote": "^18.0.6", - "parse-conflict-json": "^3.0.1", - "proc-log": "^4.2.0", - "qrcode-terminal": "^0.12.0", - "read": "^3.0.1", - "semver": "^7.6.2", - "spdx-expression-parse": "^4.0.0", - "ssri": "^10.0.6", - "supports-color": "^9.4.0", - "tar": "^6.2.1", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.1", - "which": "^4.0.0", - "write-file-atomic": "^5.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm-name": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/npm-name/-/npm-name-8.0.0.tgz", - "integrity": "sha512-DIuCGcKYYhASAZW6Xh/tiaGMko8IHOHe0n3zOA7SzTi0Yvy00x8L7sa5yNiZ75Ny58O/KeRtNouy8Ut6gPbKiw==", + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, "license": "MIT", - "dependencies": { - "is-scoped": "^3.0.0", - "is-url-superb": "^6.1.0", - "ky": "^1.2.0", - "lodash.zip": "^4.2.0", - "org-regex": "^1.0.0", - "p-map": "^7.0.1", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "validate-npm-package-name": "^5.0.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.19" } }, - "node_modules/npm-name/node_modules/p-map": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", - "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "inBundle": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "node_modules/npm/node_modules/ini": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "7.0.2", + "inBundle": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "npm-package-arg": "^12.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", + "inBundle": true, "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -10330,775 +13137,766 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/npm/node_modules/is-cidr": { + "version": "5.1.0", "inBundle": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "cidr-regex": "^4.1.1" }, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "inBundle": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", "inBundle": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", + "node_modules/npm/node_modules/jackspeak": { + "version": "3.4.3", "inBundle": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "url": "https://github.com/sponsors/isaacs" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "node_modules/npm/node_modules/jsbn": { "version": "1.1.0", "inBundle": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/npm/node_modules/@npmcli/agent": { - "version": "2.2.2", + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", "inBundle": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, + "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.5.3", + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", "inBundle": true, "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.1", - "@npmcli/installed-package-contents": "^2.1.0", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.1.1", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.1.0", - "@npmcli/query": "^3.1.0", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "bin-links": "^4.0.4", - "cacache": "^18.0.3", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.2", - "json-parse-even-better-errors": "^3.0.2", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", - "nopt": "^7.2.1", - "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-registry-fetch": "^17.0.1", - "pacote": "^18.0.6", - "parse-conflict-json": "^3.0.0", - "proc-log": "^4.2.0", - "proggy": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.6", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.3.3", + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^4.0.0", - "ini": "^4.1.2", - "nopt": "^7.2.1", - "proc-log": "^4.2.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.1", + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "9.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "semver": "^7.3.5" + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.7", + "node_modules/npm/node_modules/libnpmdiff": { + "version": "7.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" + "@npmcli/arborist": "^8.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "binary-extensions": "^2.3.0", + "diff": "^5.1.0", + "minimatch": "^9.0.4", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "tar": "^6.2.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", + "node_modules/npm/node_modules/libnpmexec": { + "version": "9.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" + "@npmcli/arborist": "^8.0.0", + "@npmcli/run-script": "^9.0.1", + "ci-info": "^4.0.0", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "proc-log": "^5.0.0", + "read": "^4.0.0", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", + "node_modules/npm/node_modules/libnpmfund": { + "version": "6.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" + "@npmcli/arborist": "^8.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "7.1.1", + "node_modules/npm/node_modules/libnpmhook": { + "version": "11.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "cacache": "^18.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^18.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5" + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", + "node_modules/npm/node_modules/libnpmorg": { + "version": "7.0.0", "inBundle": true, "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "3.0.0", + "node_modules/npm/node_modules/libnpmpack": { + "version": "8.0.0", "inBundle": true, "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.0", + "@npmcli/run-script": "^9.0.1", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "5.1.1", + "node_modules/npm/node_modules/libnpmpublish": { + "version": "10.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" + "ci-info": "^4.0.0", + "normalize-package-data": "^7.0.0", + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1", + "proc-log": "^5.0.0", + "semver": "^7.3.7", + "sigstore": "^3.0.0", + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", + "node_modules/npm/node_modules/libnpmsearch": { + "version": "8.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "which": "^4.0.0" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.1.0", + "node_modules/npm/node_modules/libnpmteam": { + "version": "7.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.10" + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/redact": { - "version": "2.0.0", + "node_modules/npm/node_modules/libnpmversion": { + "version": "7.0.0", "inBundle": true, "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.1", + "@npmcli/run-script": "^9.0.1", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.7" + }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "8.1.0", + "node_modules/npm/node_modules/lru-cache": { + "version": "10.4.3", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "14.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", + "node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", "inBundle": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=14" + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "2.3.2", + "node_modules/npm/node_modules/minimatch": { + "version": "9.0.5", "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/@sigstore/core": { - "version": "1.1.0", + "node_modules/npm/node_modules/minipass": { + "version": "7.1.2", "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/@sigstore/sign": { - "version": "2.3.2", + "node_modules/npm/node_modules/minipass-fetch": { + "version": "4.0.0", "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.3.4", + "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { + "version": "3.0.1", "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" + "minipass": "^7.0.4", + "rimraf": "^5.0.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 18" } }, - "node_modules/npm/node_modules/@sigstore/verify": { - "version": "1.2.1", + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" + "minipass": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "2.0.1", + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" + "minipass": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/abbrev": { - "version": "2.0.0", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "debug": "^4.3.4" + "minipass": "^3.0.0" }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", "inBundle": true, "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", "inBundle": true, - "license": "MIT" + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/bin-links": { - "version": "4.0.4", + "node_modules/npm/node_modules/mute-stream": { + "version": "2.0.0", "inBundle": true, "license": "ISC", - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.3.0", + "node_modules/npm/node_modules/node-gyp": { + "version": "11.0.0", "inBundle": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "which": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/npm/node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, - "node_modules/npm/node_modules/cacache": { - "version": "18.0.3", + "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { + "version": "3.0.1", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "minipass": "^7.0.4", + "rimraf": "^5.0.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 18" } }, - "node_modules/npm/node_modules/chalk": { - "version": "5.3.0", + "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", "inBundle": true, "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", + "node_modules/npm/node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", "inBundle": true, "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/npm/node_modules/ci-info": { - "version": "4.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "node_modules/npm/node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", "inBundle": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.1", + "node_modules/npm/node_modules/nopt": { + "version": "8.0.0", "inBundle": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "ip-regex": "^5.0.0" + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=14" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", + "node_modules/npm/node_modules/nopt/node_modules/abbrev": { + "version": "2.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", + "node_modules/npm/node_modules/normalize-package-data": { + "version": "7.0.0", "inBundle": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "hosted-git-info": "^8.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">= 10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.3", + "node_modules/npm/node_modules/npm-audit-report": { + "version": "6.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/npm/node_modules/npm-bundled": { + "version": "4.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", + "node_modules/npm/node_modules/npm-install-checks": { + "version": "7.1.1", "inBundle": true, - "license": "MIT" + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "4.0.0", "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/npm/node_modules/npm-package-arg": { + "version": "12.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", + "node_modules/npm/node_modules/npm-packlist": { + "version": "9.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "ignore-walk": "^7.0.0" }, "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "10.0.0", "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.4", + "node_modules/npm/node_modules/npm-profile": { + "version": "11.0.1", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ms": "2.1.2" + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/diff": { - "version": "5.2.0", + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "18.0.2", "inBundle": true, - "license": "BSD-3-Clause", + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, "engines": { - "node": ">=0.3.1" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", + "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { + "version": "3.0.1", "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { - "iconv-lite": "^0.6.2" + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", + "node_modules/npm/node_modules/npm-user-validate": { + "version": "3.0.0", "inBundle": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", + "node_modules/npm/node_modules/p-map": { + "version": "4.0.0", "inBundle": true, "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">= 4.9.1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/foreground-child": { - "version": "3.1.1", + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.1", + "inBundle": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/npm/node_modules/pacote": { + "version": "19.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" }, - "engines": { - "node": ">=14" + "bin": { + "pacote": "bin/index.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.3", + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "4.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "json-parse-even-better-errors": "^4.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.2", + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", "inBundle": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/npm/node_modules/glob": { - "version": "10.4.1", + "node_modules/npm/node_modules/path-scurry": { + "version": "1.11.1", "inBundle": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.18" @@ -11107,172 +13905,167 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hasown": { - "version": "2.0.2", + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.1.2", "inBundle": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "7.0.2", + "node_modules/npm/node_modules/proc-log": { + "version": "5.0.0", "inBundle": true, "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", + "node_modules/npm/node_modules/proggy": { + "version": "3.0.0", "inBundle": true, - "license": "BSD-2-Clause" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.2", + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.4", + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", + "node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.5", + "node_modules/npm/node_modules/promzard": { + "version": "2.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^9.0.0" + "read": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" } }, - "node_modules/npm/node_modules/indent-string": { + "node_modules/npm/node_modules/read": { "version": "4.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "mute-stream": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/ini": { - "version": "4.1.3", + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "5.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/init-package-json": { - "version": "6.0.3", + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "4.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^5.0.0", - "npm-package-arg": "^11.0.0", - "promzard": "^1.0.0", - "read": "^3.0.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/ip-address": { - "version": "9.0.5", + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", "inBundle": true, "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { - "node": ">= 12" + "node": ">= 4" } }, - "node_modules/npm/node_modules/ip-regex": { - "version": "5.0.0", + "node_modules/npm/node_modules/rimraf": { + "version": "5.0.10", "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/is-cidr": { - "version": "5.1.0", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^4.1.1" + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=14" + "node": ">=10" } }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.13.1", + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", "inBundle": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "shebang-regex": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { + "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", "inBundle": true, "license": "MIT", @@ -11280,1819 +14073,1968 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/jackspeak": { - "version": "3.1.2", + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, + "license": "ISC", "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/npm/node_modules/jsbn": { - "version": "1.1.0", + "node_modules/npm/node_modules/sigstore": { + "version": "3.0.0", "inBundle": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.0.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^3.0.0", + "@sigstore/tuf": "^3.0.0", + "@sigstore/verify": "^2.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", + "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle": { + "version": "3.0.0", "inBundle": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", + "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core": { + "version": "2.0.0", "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "engines": [ - "node >= 0.2.0" - ], + "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign": { + "version": "3.0.0", "inBundle": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.0.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^14.0.1", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", + "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify": { + "version": "2.0.0", "inBundle": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.0.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", "inBundle": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "8.0.6", + "node_modules/npm/node_modules/socks": { + "version": "2.8.3", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.1.3", + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.4", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/installed-package-contents": "^2.1.0", - "binary-extensions": "^2.3.0", - "diff": "^5.1.0", - "minimatch": "^9.0.4", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "tar": "^6.2.1" + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "8.1.2", + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/run-script": "^8.1.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "proc-log": "^4.2.0", - "read": "^3.0.1", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.11", + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/arborist": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "10.0.5", + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", "inBundle": true, - "license": "ISC", + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "6.0.6", + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.20", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/sprintf-js": { + "version": "1.1.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ssri": { + "version": "12.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "minipass": "^7.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "7.0.3", + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/run-script": "^8.1.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.9", + "node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", - "semver": "^7.3.7", - "sigstore": "^2.2.0", - "ssri": "^10.0.6" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "7.0.6", + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-registry-fetch": "^17.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "6.0.5", + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "6.0.3", + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.7", - "@npmcli/run-script": "^8.1.0", - "json-parse-even-better-errors": "^3.0.2", - "proc-log": "^4.2.0", - "semver": "^7.3.7" - }, + "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/npm/node_modules/lru-cache": { - "version": "10.2.2", + "node_modules/npm/node_modules/tar": { + "version": "6.2.1", "inBundle": true, "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, "engines": { - "node": "14 || >=16.14" + "node": ">=10" } }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "13.0.1", + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/npm/node_modules/minimatch": { - "version": "9.0.4", + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/npm/node_modules/minipass": { - "version": "7.1.2", + "node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "2.0.1", + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", "inBundle": true, "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "@tufjs/models": "3.0.1", + "debug": "^4.3.6", + "make-fetch-happen": "^14.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.5", + "node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models": { + "version": "3.0.1", "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", + "node_modules/npm/node_modules/unique-filename": { + "version": "4.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/unique-slug": { + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", "inBundle": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "6.0.0", "inBundle": true, "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/which": { + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.1", "inBundle": true, "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", "inBundle": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/mute-stream": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", "inBundle": true, "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/node-gyp": { - "version": "10.1.0", + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", "inBundle": true, "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/npm/node_modules/nopt": { - "version": "7.2.1", + "node_modules/npm/node_modules/write-file-atomic": { + "version": "6.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "6.0.1", + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } + "license": "ISC" }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "dependencies": { - "npm-normalize-package-bin": "^3.0.0" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "6.3.0", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "11.0.2", - "inBundle": true, - "license": "ISC", + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "8.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.4" - }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "9.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, + "node_modules/object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/npm/node_modules/npm-profile": { - "version": "10.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dependencies": { - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "17.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { - "@npmcli/redact": "^2.0.0", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" + "ee-first": "1.1.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.8" } }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "2.0.1", - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" } }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dependencies": { - "aggregate-error": "^3.0.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/pacote": { - "version": "18.0.6", - "inBundle": true, - "license": "ISC", + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/path-key": { - "version": "3.1.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/path-scurry": { - "version": "1.11.1", - "inBundle": true, - "license": "BlueOak-1.0.0", + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.1.0", - "inBundle": true, - "license": "MIT", + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/npm/node_modules/proc-log": { - "version": "4.2.0", - "inBundle": true, - "license": "ISC", + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/proggy": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/ora/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/ora/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "^3.0.1" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" + "node_modules/ora/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" } }, - "node_modules/npm/node_modules/read": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "mute-stream": "^1.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/read-package-json-fast": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "optional": true + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/npm/node_modules/semver": { - "version": "7.6.2", - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, + "node_modules/org-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/org-regex/-/org-regex-1.0.0.tgz", + "integrity": "sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==", "engines": { "node": ">=8" } }, - "node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.1.0", - "inBundle": true, - "license": "ISC", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=14" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/sigstore": { - "version": "2.3.1", - "inBundle": true, - "license": "Apache-2.0", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" + "p-limit": "^2.2.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "inBundle": true, - "license": "MIT", + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.8.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" + "node": ">=18" }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.3", - "inBundle": true, - "license": "MIT", + "node_modules/p-memoize": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-7.1.1.tgz", + "integrity": "sha512-DZ/bONJILHkQ721hSr/E9wMz5Am/OTJ9P6LhLFo2Tu+jL8044tgc9LwHO8g4PiaYePnlVVRAJcKmgy8J9MVFrA==", "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.7.1" + "mimic-fn": "^4.0.0", + "type-fest": "^3.0.0" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/p-memoize?sponsor=1" } }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.5.0", - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "node_modules/p-memoize/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.18", - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/sprintf-js": { - "version": "1.1.3", - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/npm/node_modules/ssri": { - "version": "10.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "inBundle": true, - "license": "MIT", + "node_modules/package-json": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", + "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ky": "^1.2.0", + "registry-auth-token": "^5.0.2", + "registry-url": "^6.0.1", + "semver": "^7.6.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { - "ansi-regex": "^5.0.1" + "callsites": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { - "ansi-regex": "^5.0.1" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/tar": { - "version": "6.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "node_modules/password-prompt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" } }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/npm/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" } }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT" + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/tuf-js": { - "version": "2.2.1", - "inBundle": true, - "license": "MIT", + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=0.12" } }, - "node_modules/npm/node_modules/unique-filename": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/pbkit": { + "version": "0.0.53", + "resolved": "https://registry.npmjs.org/pbkit/-/pbkit-0.0.53.tgz", + "integrity": "sha512-NUt7lFsiM+JQKioA0ZhRM+UdW/Z2p/akC41wgRo7j8Vo5CJRLm3LTKQmVav05wH+r7BDbjpH0eOhwAC+8tbidQ==", "dependencies": { - "unique-slug": "^4.0.0" + "@yarnpkg/fslib": "^2.6.0-rc.8", + "@yarnpkg/libzip": "^2.2.2", + "core-js": "3.18.1", + "mri": "^1.2.0" }, + "bin": { + "pb-gen-ts": "compat/node/cli/pb-gen-ts.js", + "pb-gen-ts-bundle": "compat/node/cli/pb-gen-ts-bundle.js" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/npm/node_modules/unique-slug": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/pino": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", + "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", "dependencies": { - "imurmurhash": "^0.1.4" + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.6.0" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "bin": { + "pino": "bin.js" } }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "inBundle": true, - "license": "Apache-2.0", + "node_modules/pino-abstract-transport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "readable-stream": "^4.0.0", + "split2": "^4.0.0" } }, - "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/pino-abstract-transport/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/which": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/pino-pretty": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz", + "integrity": "sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==", "dependencies": { - "isexe": "^3.1.1" + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "bin": { - "node-which": "bin/which.js" + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-pretty/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/pino-pretty/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-pretty/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/which/node_modules/isexe": { - "version": "3.1.1", - "inBundle": true, - "license": "ISC", + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "engines": { - "node": ">=16" + "node": ">= 6" } }, - "node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", - "inBundle": true, - "license": "MIT", + "node_modules/pkg-dir": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz", + "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "find-up-simple": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "inBundle": true, - "license": "MIT", + "node_modules/poseidon-lite": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/poseidon-lite/-/poseidon-lite-0.2.1.tgz", + "integrity": "sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog==" + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "lilconfig": "^3.1.1" }, "engines": { - "node": ">=10" + "node": ">= 18" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" + "node_modules/prettier": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.1.tgz", + "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==", + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "inBundle": true, - "license": "MIT", + "node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.0.0" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { - "ansi-regex": "^6.0.1" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">= 0.10" } }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.10" } }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "node_modules/pumpdotfun-sdk": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/pumpdotfun-sdk/-/pumpdotfun-sdk-1.3.2.tgz", + "integrity": "sha512-TkYY+ZztxyPzv1f38evgdam92Po3YATI8s6BzmvxH8FypBpPs3pBKS301z7k3KXc1WWfjGWG79K/BANWaAcvkQ==", "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "@coral-xyz/anchor": "^0.30.1", + "@rollup/plugin-json": "^6.1.0", + "@solana/spl-token": "0.4.6", + "@solana/web3.js": "^1.92.1" } }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "node_modules/pumpdotfun-sdk/node_modules/@solana/codecs": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-preview.2.tgz", + "integrity": "sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==", + "dependencies": { + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/codecs-data-structures": "2.0.0-preview.2", + "@solana/codecs-numbers": "2.0.0-preview.2", + "@solana/codecs-strings": "2.0.0-preview.2", + "@solana/options": "2.0.0-preview.2" + } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/pumpdotfun-sdk/node_modules/@solana/codecs-core": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-preview.2.tgz", + "integrity": "sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==", + "dependencies": { + "@solana/errors": "2.0.0-preview.2" } }, - "node_modules/object-treeify": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", - "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", - "license": "MIT", - "engines": { - "node": ">= 10" + "node_modules/pumpdotfun-sdk/node_modules/@solana/codecs-data-structures": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.2.tgz", + "integrity": "sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==", + "dependencies": { + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/codecs-numbers": "2.0.0-preview.2", + "@solana/errors": "2.0.0-preview.2" } }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "engines": { - "node": ">=14.0.0" + "node_modules/pumpdotfun-sdk/node_modules/@solana/codecs-numbers": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.2.tgz", + "integrity": "sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==", + "dependencies": { + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/errors": "2.0.0-preview.2" + } + }, + "node_modules/pumpdotfun-sdk/node_modules/@solana/codecs-strings": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.2.tgz", + "integrity": "sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==", + "dependencies": { + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/codecs-numbers": "2.0.0-preview.2", + "@solana/errors": "2.0.0-preview.2" + }, + "peerDependencies": { + "fastestsmallesttextencoderdecoder": "^1.0.22" + } + }, + "node_modules/pumpdotfun-sdk/node_modules/@solana/errors": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-preview.2.tgz", + "integrity": "sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==", + "dependencies": { + "chalk": "^5.3.0", + "commander": "^12.0.0" + }, + "bin": { + "errors": "bin/cli.js" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/pumpdotfun-sdk/node_modules/@solana/options": { + "version": "2.0.0-preview.2", + "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-preview.2.tgz", + "integrity": "sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==", "dependencies": { - "wrappy": "1" + "@solana/codecs-core": "2.0.0-preview.2", + "@solana/codecs-numbers": "2.0.0-preview.2" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/pumpdotfun-sdk/node_modules/@solana/spl-token": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.6.tgz", + "integrity": "sha512-1nCnUqfHVtdguFciVWaY/RKcQz1IF4b31jnKgAmjU9QVN1q7dRUkTEWJZgTYIEtsULjVnC9jRqlhgGN39WbKKA==", "dependencies": { - "mimic-fn": "^2.1.0" + "@solana/buffer-layout": "^4.0.0", + "@solana/buffer-layout-utils": "^0.2.0", + "@solana/spl-token-group": "^0.0.4", + "@solana/spl-token-metadata": "^0.1.4", + "buffer": "^6.0.3" }, "engines": { - "node": ">=6" + "node": ">=16" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@solana/web3.js": "^1.91.6" } }, - "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "license": "MIT", + "node_modules/pumpdotfun-sdk/node_modules/@solana/spl-token-group": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.4.tgz", + "integrity": "sha512-7+80nrEMdUKlK37V6kOe024+T7J4nNss0F8LQ9OOPYdWCCfJmsGUzVx2W3oeizZR4IHM6N4yC9v1Xqwc3BTPWw==", "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "@solana/codecs": "2.0.0-preview.2", + "@solana/spl-type-length-value": "0.1.0" }, "engines": { - "node": ">=18" + "node": ">=16" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@solana/web3.js": "^1.91.6" } }, - "node_modules/open/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "license": "MIT", + "node_modules/pumpdotfun-sdk/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "is-inside-container": "^1.0.0" - }, + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/pupa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "escape-goat": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "side-channel": "^1.0.6" }, "engines": { - "node": ">=10" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/org-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/org-regex/-/org-regex-1.0.0.tgz", - "integrity": "sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "node_modules/random-js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/random-js/-/random-js-2.1.0.tgz", + "integrity": "sha512-CRUyWmnzmZBA7RZSVGq0xMqmgCyPPxbiKNLFA5ud7KenojVX2s7Gv+V7eB52beKTPGxWRnVZ7D/tCIgYJJ8vNQ==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "p-try": "^2.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { - "p-limit": "^2.2.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "rc": "cli.js" } }, - "node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "license": "MIT", + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dependencies": { - "aggregate-error": "^4.0.0" + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-memoize": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-7.1.1.tgz", - "integrity": "sha512-DZ/bONJILHkQ721hSr/E9wMz5Am/OTJ9P6LhLFo2Tu+jL8044tgc9LwHO8g4PiaYePnlVVRAJcKmgy8J9MVFrA==", - "license": "MIT", + "node_modules/read-package-up/node_modules/type-fest": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.35.0.tgz", + "integrity": "sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "dependencies": { - "mimic-fn": "^4.0.0", - "type-fest": "^3.0.0" + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { - "url": "https://github.com/sindresorhus/p-memoize?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-memoize/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "license": "MIT", + "node_modules/read-pkg/node_modules/parse-json": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", + "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.2", + "type-fest": "^4.7.1" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-memoize/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "license": "(MIT OR CC0-1.0)", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.35.0.tgz", + "integrity": "sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==", "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-timeout": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", - "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", - "license": "MIT", + "node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/package-json": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", - "license": "MIT", - "dependencies": { - "ky": "^1.2.0", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "semver": "^7.6.0" - }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "engines": { - "node": ">=18" + "node": ">= 14.18.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "engines": { + "node": ">= 12.13.0" + } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", "dependencies": { - "callsites": "^3.0.0" + "esprima": "~4.0.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/registry-auth-token": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" }, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "rc": "1.2.8" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/password-prompt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", - "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", - "license": "0BSD", - "dependencies": { - "ansi-escapes": "^4.3.2", - "cross-spawn": "^7.0.3" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "engines": { "node": ">=8" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { - "node": ">=0.12" + "node": ">=4" } }, - "node_modules/pbkit": { - "version": "0.0.53", - "resolved": "https://registry.npmjs.org/pbkit/-/pbkit-0.0.53.tgz", - "integrity": "sha512-NUt7lFsiM+JQKioA0ZhRM+UdW/Z2p/akC41wgRo7j8Vo5CJRLm3LTKQmVav05wH+r7BDbjpH0eOhwAC+8tbidQ==", - "license": "(MIT OR Apache-2.0)", + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dependencies": { - "@yarnpkg/fslib": "^2.6.0-rc.8", - "@yarnpkg/libzip": "^2.2.2", - "core-js": "3.18.1", - "mri": "^1.2.0" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" }, - "bin": { - "pb-gen-ts": "compat/node/cli/pb-gen-ts.js", - "pb-gen-ts-bundle": "compat/node/cli/pb-gen-ts-bundle.js" + "engines": { + "node": ">=4" } }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=4" } }, - "node_modules/pino": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", - "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^1.2.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^3.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.6.0" + "mimic-fn": "^1.0.0" }, - "bin": { - "pino": "bin.js" + "engines": { + "node": ">=4" } }, - "node_modules/pino-abstract-transport": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", - "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", - "dependencies": { - "readable-stream": "^4.0.0", - "split2": "^4.0.0" + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" } }, - "node_modules/pino-abstract-transport/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/pino-pretty": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz", - "integrity": "sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==", + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { - "colorette": "^2.0.7", - "dateformat": "^4.6.3", - "fast-copy": "^3.0.0", - "fast-safe-stringify": "^2.1.1", - "help-me": "^5.0.0", - "joycon": "^3.1.1", - "minimist": "^1.2.6", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^1.0.0", - "pump": "^3.0.0", - "readable-stream": "^4.0.0", - "secure-json-parse": "^2.4.0", - "sonic-boom": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "pino-pretty": "bin.js" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/pino-pretty/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "node_modules/rollup": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.34.8", + "@rollup/rollup-android-arm64": "4.34.8", + "@rollup/rollup-darwin-arm64": "4.34.8", + "@rollup/rollup-darwin-x64": "4.34.8", + "@rollup/rollup-freebsd-arm64": "4.34.8", + "@rollup/rollup-freebsd-x64": "4.34.8", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", + "@rollup/rollup-linux-arm64-gnu": "4.34.8", + "@rollup/rollup-linux-arm64-musl": "4.34.8", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", + "@rollup/rollup-linux-s390x-gnu": "4.34.8", + "@rollup/rollup-linux-x64-gnu": "4.34.8", + "@rollup/rollup-linux-x64-musl": "4.34.8", + "@rollup/rollup-win32-arm64-msvc": "4.34.8", + "@rollup/rollup-win32-ia32-msvc": "4.34.8", + "@rollup/rollup-win32-x64-msvc": "4.34.8", + "fsevents": "~2.3.2" } }, - "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" - }, - "node_modules/pkg-dir": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz", - "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==", - "license": "MIT", + "node_modules/rpc-websockets": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.10.0.tgz", + "integrity": "sha512-cemZ6RiDtYZpPiBzYijdOrkQQzmBCmug0E9SdRH2gIUNT15ql4mwCYWIp0VnSZq6Qrw/JkGUygp4PrK1y9KfwQ==", "dependencies": { - "find-up-simple": "^1.0.0" + "@babel/runtime": "^7.17.2", + "eventemitter3": "^4.0.7", + "uuid": "^8.3.2", + "ws": "^8.5.0" }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "engines": { "node": ">=18" }, @@ -13100,617 +16042,717 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/poseidon-lite": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/poseidon-lite/-/poseidon-lite-0.2.0.tgz", - "integrity": "sha512-vivDZnGmz8W4G/GzVA72PXkfYStjilu83rjjUfpL4PueKcC8nfX6hCPh2XhoC5FBgC6y0TA3YuUeUo5YCcNoig==" + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "engines": { + "node": ">=0.12.0" + } }, - "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "license": "ISC", + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/process-warning": { + "node_modules/scoped-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-3.0.0.tgz", + "integrity": "sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, - "node_modules/protobufjs": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.3.tgz", - "integrity": "sha512-HaYi2CVjiPoBR1d2zTVKVHXr9IUnpJizCjUu19vxdD3B8o4z+vfOHpIEB1358w8nv8dfUNEfDHFvMsH7QlLt/Q==", + "node_modules/secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", "hasInstallScript": true, - "license": "BSD-3-Clause", "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "node_modules/secp256k1/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/secp256k1/node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/pumpdotfun-sdk": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pumpdotfun-sdk/-/pumpdotfun-sdk-1.3.2.tgz", - "integrity": "sha512-TkYY+ZztxyPzv1f38evgdam92Po3YATI8s6BzmvxH8FypBpPs3pBKS301z7k3KXc1WWfjGWG79K/BANWaAcvkQ==", - "license": "ISC", - "dependencies": { - "@coral-xyz/anchor": "^0.30.1", - "@rollup/plugin-json": "^6.1.0", - "@solana/spl-token": "0.4.6", - "@solana/web3.js": "^1.92.1" - } + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { - "escape-goat": "^4.0.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { - "node": ">=10" + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8" } }, - "node_modules/random-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/random-js/-/random-js-2.1.0.tgz", - "integrity": "sha512-CRUyWmnzmZBA7RZSVGq0xMqmgCyPPxbiKNLFA5ud7KenojVX2s7Gv+V7eB52beKTPGxWRnVZ7D/tCIgYJJ8vNQ==" + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "safe-buffer": "^5.1.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, - "bin": { - "rc": "cli.js" + "engines": { + "node": ">= 0.4" } }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "node_modules/read-package-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", - "license": "MIT", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/read-package-up/node_modules/type-fest": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz", - "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==", - "license": "(MIT OR CC0-1.0)", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", - "license": "MIT", + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", - "license": "MIT", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz", - "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==", - "license": "(MIT OR CC0-1.0)", + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "engines": { - "node": ">= 12.13.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "license": "MIT", + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dependencies": { - "esprima": "~4.0.0" + "is-arrayish": "^0.3.1" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", "engines": { - "node": ">=14" + "node": ">=0.10.0" } }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "dependencies": { + "atomic-sleep": "^1.0.0" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "license": "MIT", + "node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dependencies": { - "resolve-from": "^5.0.0" + "whatwg-url": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/source-map/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" + "node_modules/source-map/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/source-map/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==" + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "engines": { - "node": ">= 4" + "node": ">= 10.x" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", + "node_modules/stream-transform": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", + "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "mixme": "^0.5.1" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "safe-buffer": "~5.2.0" } }, - "node_modules/rpc-websockets": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.11.2.tgz", - "integrity": "sha512-pL9r5N6AVHlMN/vT98+fcO+5+/UcPLf/4tq+WUaid/PPUGS/ttJ3y8e9IqmaWKtShNAysMSjkczuEA49NuV7UQ==", - "license": "LGPL-3.0-only", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "eventemitter3": "^4.0.7", - "uuid": "^8.3.2", - "ws": "^8.5.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/kozjak" + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" }, - "optionalDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "engines": { + "node": ">=8" } }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "license": "MIT", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } + "node_modules/stubborn-fs": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", + "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==" }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { - "node": ">=10" + "node": ">= 6" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/superstruct": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", + "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" }, - "node_modules/scoped-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-3.0.0.tgz", - "integrity": "sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg==", - "license": "MIT", + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "engines": { - "node": ">=12" + "node": ">=0.8.0" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/secp256k1": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", - "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", - "hasInstallScript": true, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=8" } }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, - "node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "engines": { + "node": ">=0.10" + } }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", + "node_modules/terminal-link": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz", + "integrity": "sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==", "dependencies": { - "semver": "^7.3.5" + "ansi-escapes": "^5.0.0", + "supports-hyperlinks": "^2.2.0" }, "engines": { "node": ">=12" @@ -13719,493 +16761,677 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", + "node_modules/terminal-link/node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dependencies": { - "shebang-regex": "^3.0.0" + "type-fest": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", + "node_modules/terminal-link/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", + "node_modules/thenable-reject": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/thenable-reject/-/thenable-reject-1.0.0.tgz", + "integrity": "sha512-OJLB8ApYtc21pCM8T+uifMsnhl5zsqydGNa5uC650VUpf9QALRQWwArVyFmEDrvfz+oLsCtXMmhnZ+u2o8vwmg==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dependencies": { - "is-arrayish": "^0.3.1" + "any-promise": "^1.0.0" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "license": "MIT", + "node_modules/thread-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "real-require": "^0.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" + }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/sonic-boom": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", - "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", - "dependencies": { - "atomic-sleep": "^1.0.0" + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "license": "Apache-2.0", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "license": "MIT", + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "optional": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "tmp": "^0.2.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "license": "CC0-1.0" + "node_modules/tmp-promise/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "optional": true, + "engines": { + "node": ">=14.14" + } }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, "engines": { - "node": ">= 10.x" + "node": ">=8.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" + "node_modules/toformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", + "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { - "node": ">= 0.6" + "node": ">=0.6" } }, - "node_modules/stream-transform": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", - "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", - "dependencies": { - "mixme": "^0.5.1" + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/traverse-chain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", + "integrity": "sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": { + "tree-kill": "cli.js" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "engines": { + "node": ">=0.6" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, - "engines": { - "node": ">=8" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/tsup": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.3.6.tgz", + "integrity": "sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==", + "dependencies": { + "bundle-require": "^5.0.0", + "cac": "^6.7.14", + "chokidar": "^4.0.1", + "consola": "^3.2.3", + "debug": "^4.3.7", + "esbuild": "^0.24.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.24.0", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.1", + "tinyglobby": "^0.2.9", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "license": "MIT", + "node_modules/tsup/node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, + "node_modules/tsup/node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=18" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/tsup/node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/stubborn-fs": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", - "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==" + "node_modules/tsup/node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/superstruct": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", - "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + "node_modules/tsup/node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/tsup/node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, + "node_modules/tsup/node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "license": "MIT", + "node_modules/tsup/node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10" + "node": ">=18" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, + "node_modules/tsup/node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/terminal-link": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz", - "integrity": "sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^5.0.0", - "supports-hyperlinks": "^2.2.0" - }, + "node_modules/tsup/node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.2" - }, + "node_modules/tsup/node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", + "node_modules/tsup/node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - }, - "node_modules/thenable-reject": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/thenable-reject/-/thenable-reject-1.0.0.tgz", - "integrity": "sha512-OJLB8ApYtc21pCM8T+uifMsnhl5zsqydGNa5uC650VUpf9QALRQWwArVyFmEDrvfz+oLsCtXMmhnZ+u2o8vwmg==", - "license": "MIT" - }, - "node_modules/thread-stream": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", - "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", - "dependencies": { - "real-require": "^0.2.0" + "node_modules/tsup/node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "node_modules/tsup/node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + "node_modules/tsup/node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "node_modules/tsup/node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, + "node_modules/tsup/node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=0.6.0" + "node": ">=18" } }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "node_modules/tsup/node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], "optional": true, - "dependencies": { - "tmp": "^0.2.0" + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/tmp-promise/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "node_modules/tsup/node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=14.14" + "node": ">=18" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, + "node_modules/tsup/node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8.0" + "node": ">=18" } }, - "node_modules/toformat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", - "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/tsup/node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.6" + "node": ">=18" } }, - "node_modules/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/traverse-chain": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", - "integrity": "sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==", - "license": "MIT" - }, - "node_modules/treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "node_modules/tsup/node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.6" + "node": ">=18" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, + "node_modules/tsup/node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "hasInstallScript": true, "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "esbuild": "bin/esbuild" }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/tsup/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" } }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -14222,11 +17448,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "license": "Apache-2.0", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14241,9 +17478,9 @@ "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==" }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "node_modules/unicode-trie": { "version": "2.0.0", @@ -14254,16 +17491,10 @@ "tiny-inflate": "^1.0.0" } }, - "node_modules/unicode-trie/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" - }, "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "license": "MIT", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "engines": { "node": ">=18" }, @@ -14271,23 +17502,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/update-notifier": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.2.0.tgz", - "integrity": "sha512-GoBCFKIbF88latQyk8HpHUoJHqZUzYSPI6BySAjs5TWd/TCTMynAsIfGfJ6Ep2DAx6O5YExYGPs3Hdnt2TWdzQ==", - "license": "BSD-2-Clause", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", + "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", "dependencies": { - "boxen": "^8.0.0", + "boxen": "^8.0.1", "chalk": "^5.3.0", "configstore": "^7.0.0", - "import-lazy": "^4.0.0", "is-in-ci": "^1.0.0", "is-installed-globally": "^1.0.0", "is-npm": "^6.0.0", "latest-version": "^9.0.0", "pupa": "^3.1.0", "semver": "^7.6.3", - "semver-diff": "^4.0.0", "xdg-basedir": "^5.1.0" }, "engines": { @@ -14315,11 +17551,31 @@ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -14331,14 +17587,12 @@ "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "license": "MIT" + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -14348,11 +17602,18 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/vlq": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", @@ -14362,7 +17623,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", - "license": "MIT", "dependencies": { "axios": "^1.6.1", "joi": "^17.11.0", @@ -14380,14 +17640,12 @@ "node_modules/wasmbuilder": { "version": "0.0.16", "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", - "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==", - "license": "GPL-3.0" + "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==" }, "node_modules/wasmcurves": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.2.2.tgz", "integrity": "sha512-JRY908NkmKjFl4ytnTu5ED6AwPD+8VJ9oc94kdq7h5bIwbj0L4TDJ69mG+2aLs2SoCmGfqIesMWTEJjtYsoQXQ==", - "license": "GPL-3.0", "dependencies": { "wasmbuilder": "0.0.16" } @@ -14404,7 +17662,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", "engines": { "node": ">= 8" } @@ -14412,8 +17669,7 @@ "node_modules/web-worker": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", - "license": "Apache-2.0" + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" }, "node_modules/web3-utils": { "version": "1.10.4", @@ -14442,7 +17698,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/websocket-iterator/-/websocket-iterator-1.0.1.tgz", "integrity": "sha512-NKGfOewl6ai3Ty4qIUq1S7OglCHjrEd3h8HzKpzBiyswEcB2vgE+u+Uxfarg6vJfJzy1Qorur7CXkcB1Asg3Fg==", - "license": "MIT", "dependencies": { "thenable-reject": "^1.0.0" } @@ -14457,54 +17712,133 @@ } }, "node_modules/when-exit": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.3.tgz", - "integrity": "sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", + "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==" }, "node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "license": "ISC", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { - "isexe": "^3.1.1" + "isexe": "^2.0.0" }, "bin": { - "node-which": "bin/which.js" + "node-which": "bin/node-which" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "license": "MIT", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", "dependencies": { - "string-width": "^4.0.0" + "string-width": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/widest-line/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "license": "MIT" + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "node_modules/wrappy": { @@ -14516,7 +17850,6 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -14537,7 +17870,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -14549,7 +17881,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", "engines": { "node": ">=10" } @@ -14557,14 +17888,12 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -14582,7 +17911,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", "engines": { "node": ">=12" } @@ -14592,7 +17920,6 @@ "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz", "integrity": "sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==", "hasInstallScript": true, - "license": "BSD-2-Clause", "bin": { "yarn": "bin/yarn.js", "yarnpkg": "bin/yarn.js" @@ -14605,16 +17932,25 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yoctocolors-cjs": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", - "license": "MIT", "engines": { "node": ">=18" }, diff --git a/package.json b/package.json index 33ac18d..b26e25b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "solana-trading-cli", "version": "1.0.0", - "description": "Best tool for High-Frequency Trading developers on Solana", + "description": "Best development tool for Algo Trading on Solana", "main": "help.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -50,6 +50,16 @@ "pino-pretty": "^10.3.1", "pino-std-serializers": "^6.2.2", "pumpdotfun-sdk": "^1.3.2", - "random-js": "^2.1.0" + "random-js": "^2.1.0", + "rpc-websockets": "7.10.0", + "@triton-one/yellowstone-grpc": "^0.4.0", + "jito-ts": "^4.0.0", + "async-mutex": "^0.5.0" + }, + "devDependencies": { + "typescript": "^5.5.4" + }, + "engines": { + "node": "22.2.0" } -} \ No newline at end of file +} diff --git a/src/.DS_Store b/src/.DS_Store index 0f06121..24a0738 100644 Binary files a/src/.DS_Store and b/src/.DS_Store differ diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..bf660c3 --- /dev/null +++ b/src/README.md @@ -0,0 +1,28 @@ +# helper commands +1. ts-node wrap_sol.js --size # Wrap SOL to WSOL +2. ts-node unwrap_sol.js # Unwrap WSOL to SOL + +# Meteora +1. ts-node buy --token --sol +2. ts-node sell --token --percentage + +# Orca +1. ts-node buy --token --sol +2. ts-node sell --token --percentage + +# Raydium +1. ts-node buy --token --sol +2. ts-node sell --token --percentage + +# Pump.fun +1. ts-node buy --token_address --sol +2. ts-node sell --token_address --percentage +3. ts-node createAndBuy --pathToMintKeypair --sol --name --symbol --description --telegram --twitter --website --file + +# Token +1. ts-node create --payer --symbol --token_name --mint --supply --decimals --metadata --image --cluster --priority-fee --file_type +2. ts-node burn --payer --token_address --percentage --cluster + +# gRPC projects +- copy-bot: ts-node copy-trade.ts --trader +- pf-sniper-bot: ts-node snipe-create.ts --token --sell-after --n --auto-sell --jito \ No newline at end of file diff --git a/src/Trading_dev/dex/meteora/constants.js b/src/Trading_dev/dex/meteora/constants.js deleted file mode 100644 index 818f309..0000000 --- a/src/Trading_dev/dex/meteora/constants.js +++ /dev/null @@ -1,6 +0,0 @@ -const PROGRAM_ID = "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"; -const wsol = "So11111111111111111111111111111111111111112"; -const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; -const usdt = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"; // USDT - -module.exports = {PROGRAM_ID, wsol, usdc, usdt}; \ No newline at end of file diff --git a/src/Trading_dev/dex/meteora/fetch-pool.js b/src/Trading_dev/dex/meteora/fetch-pool.js deleted file mode 100644 index 28ebf90..0000000 --- a/src/Trading_dev/dex/meteora/fetch-pool.js +++ /dev/null @@ -1,25 +0,0 @@ -async function fetchDLMMPoolId(tokenAddress) { - const url = `https://dlmm-api.meteora.ag/pair/all_by_groups?sort_key=tvl&order_by=desc&search_term=${tokenAddress}&include_unknown=false`; - const response = await (await fetch(url)).json(); - // check if the string start with "SOL" or end with "SOL" - - const listOfGroups = response.groups; - for (const group of listOfGroups) { - const name = group.name; - if(name.startsWith("SOL") || name.endsWith("SOL")){ - return group.pairs[0].address; - } - } - console.log("No DLMM Pool ID found for the given token address: ", tokenAddress); - return ""; // return empty string if no DLMMPool ID is found -} - -async function main() { - const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; - const poolId = await fetchDLMMPoolId(tokenAddress); - console.log(poolId); -} - -//main(); - -module.exports = { fetchDLMMPoolId }; \ No newline at end of file diff --git a/src/Trading_dev/dex/meteora/fetch-price.js b/src/Trading_dev/dex/meteora/fetch-price.js deleted file mode 100644 index 13df08a..0000000 --- a/src/Trading_dev/dex/meteora/fetch-price.js +++ /dev/null @@ -1,33 +0,0 @@ -const { fetchDLMMPoolId } = require("./fetch-pool"); -const {usdc} = require("./constants"); - -async function getCurrentPriceInSOL(tokenAddress) { - const poolId = await fetchDLMMPoolId(tokenAddress); - const response = await ( - await fetch(`https://dlmm-api.meteora.ag/pair/${poolId}`) - ).json(); - return response.current_price; -} -async function getCurrentSolPrice() { - const poolId = await fetchDLMMPoolId(usdc); - const response = await ( - await fetch(`https://dlmm-api.meteora.ag/pair/${poolId}`) - ).json(); - return response.current_price; -} -async function getCurrentPriceInUSD(tokenAddress) { - const poolId = await fetchDLMMPoolId(tokenAddress); - const response = await ( - await fetch(`https://dlmm-api.meteora.ag/pair/${poolId}`) - ).json(); - return response.current_price*(await getCurrentSolPrice()); -} - -async function main(){ - console.log(await getCurrentPriceInSOL("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr")); - console.log(await getCurrentPriceInUSD("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr")); -} - -//main(); - -module.exports = { getCurrentPriceInUSD, getCurrentPriceInSOL, getCurrentSolPrice }; \ No newline at end of file diff --git a/src/Trading_dev/dex/meteora/idl.js b/src/Trading_dev/dex/meteora/idl.js deleted file mode 100644 index e1c5dc3..0000000 --- a/src/Trading_dev/dex/meteora/idl.js +++ /dev/null @@ -1,6501 +0,0 @@ -const Amm = { - version: "0.4.12", - name: "amm", - docs: ["Program for AMM"], - instructions: [ - { - name: "initializePermissionedPool", - docs: ["Initialize a new permissioned pool."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: true, - docs: ["Pool account (arbitrary address)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "tokenAMint", - isMut: false, - isSigner: false, - docs: ["Token A mint of the pool. Eg: USDT"], - }, - { - name: "tokenBMint", - isMut: false, - isSigner: false, - docs: ["Token B mint of the pool. Eg: USDC"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "adminTokenA", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token A mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "adminTokenB", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "adminPoolLp", - isMut: true, - isSigner: false, - docs: [ - "Admin pool LP token account. Used to receive LP during first deposit (initialize pool)", - "Admin pool LP token account. Used to receive LP during first deposit (initialize pool)", - ], - }, - { - name: "protocolTokenAFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - }, - { - name: "protocolTokenBFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - }, - { - name: "admin", - isMut: true, - isSigner: true, - docs: [ - "Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.", - ], - }, - { - name: "feeOwner", - isMut: false, - isSigner: false, - }, - { - name: "rent", - isMut: false, - isSigner: false, - docs: ["Rent account."], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "associatedTokenProgram", - isMut: false, - isSigner: false, - docs: ["Associated token program."], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [ - { - name: "curveType", - type: { - defined: "CurveType", - }, - }, - ], - }, - { - name: "initializePermissionlessPool", - docs: ["Initialize a new permissionless pool."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA address)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "tokenAMint", - isMut: false, - isSigner: false, - docs: ["Token A mint of the pool. Eg: USDT"], - }, - { - name: "tokenBMint", - isMut: false, - isSigner: false, - docs: ["Token B mint of the pool. Eg: USDC"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "payerTokenA", - isMut: true, - isSigner: false, - docs: [ - "Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerTokenB", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerPoolLp", - isMut: true, - isSigner: false, - }, - { - name: "protocolTokenAFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - }, - { - name: "protocolTokenBFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: [ - "Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.", - ], - }, - { - name: "feeOwner", - isMut: false, - isSigner: false, - }, - { - name: "rent", - isMut: false, - isSigner: false, - docs: ["Rent account."], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "associatedTokenProgram", - isMut: false, - isSigner: false, - docs: ["Associated token program."], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [ - { - name: "curveType", - type: { - defined: "CurveType", - }, - }, - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - { - name: "initializePermissionlessPoolWithFeeTier", - docs: ["Initialize a new permissionless pool with customized fee tier"], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA address)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "tokenAMint", - isMut: false, - isSigner: false, - docs: ["Token A mint of the pool. Eg: USDT"], - }, - { - name: "tokenBMint", - isMut: false, - isSigner: false, - docs: ["Token B mint of the pool. Eg: USDC"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "payerTokenA", - isMut: true, - isSigner: false, - docs: [ - "Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerTokenB", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerPoolLp", - isMut: true, - isSigner: false, - }, - { - name: "protocolTokenAFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - }, - { - name: "protocolTokenBFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: [ - "Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.", - ], - }, - { - name: "feeOwner", - isMut: false, - isSigner: false, - }, - { - name: "rent", - isMut: false, - isSigner: false, - docs: ["Rent account."], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "associatedTokenProgram", - isMut: false, - isSigner: false, - docs: ["Associated token program."], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [ - { - name: "curveType", - type: { - defined: "CurveType", - }, - }, - { - name: "tradeFeeBps", - type: "u64", - }, - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - { - name: "enableOrDisablePool", - docs: [ - "Enable or disable a pool. A disabled pool allow only remove balanced liquidity operation.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "admin", - isMut: false, - isSigner: true, - docs: ["Admin account. Must be owner of the pool."], - }, - ], - args: [ - { - name: "enable", - type: "bool", - }, - ], - }, - { - name: "swap", - docs: [ - "Swap token A to B, or vice versa. An amount of trading fee will be charged for liquidity provider, and the admin of the pool.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "userSourceToken", - isMut: true, - isSigner: false, - docs: [ - "User token account. Token from this account will be transfer into the vault by the pool in exchange for another token of the pool.", - ], - }, - { - name: "userDestinationToken", - isMut: true, - isSigner: false, - docs: [ - "User token account. The exchanged token will be transfer into this account from the pool.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["Lp token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["Lp token mint of vault b"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "protocolTokenFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account. Used to receive trading fee. It's mint field must matched with user_source_token mint field.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: ["User account. Must be owner of user_source_token."], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "inAmount", - type: "u64", - }, - { - name: "minimumOutAmount", - type: "u64", - }, - ], - }, - { - name: "removeLiquiditySingleSide", - docs: [ - "Withdraw only single token from the pool. Only supported by pool with stable swap curve.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "User pool lp token account. LP will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userDestinationToken", - isMut: true, - isSigner: false, - docs: [ - "User token account to receive token upon success liquidity removal.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: ["User account. Must be owner of the user_pool_lp account."], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "poolTokenAmount", - type: "u64", - }, - { - name: "minimumOutAmount", - type: "u64", - }, - ], - }, - { - name: "addImbalanceLiquidity", - docs: [ - "Deposit tokens to the pool in an imbalance ratio. Only supported by pool with stable swap curve.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "user pool lp token account. lp will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: [ - "User account. Must be owner of user_a_token, and user_b_token.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "minimumPoolTokenAmount", - type: "u64", - }, - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - { - name: "removeBalanceLiquidity", - docs: [ - "Withdraw tokens from the pool in a balanced ratio. User will still able to withdraw from pool even the pool is disabled. This allow user to exit their liquidity when there's some unforeseen event happen.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "user pool lp token account. lp will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: [ - "User account. Must be owner of user_a_token, and user_b_token.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "poolTokenAmount", - type: "u64", - }, - { - name: "minimumATokenOut", - type: "u64", - }, - { - name: "minimumBTokenOut", - type: "u64", - }, - ], - }, - { - name: "addBalanceLiquidity", - docs: ["Deposit tokens to the pool in a balanced ratio."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "user pool lp token account. lp will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: [ - "User account. Must be owner of user_a_token, and user_b_token.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "poolTokenAmount", - type: "u64", - }, - { - name: "maximumTokenAAmount", - type: "u64", - }, - { - name: "maximumTokenBAmount", - type: "u64", - }, - ], - }, - { - name: "setPoolFees", - docs: ["Update trading fee charged for liquidity provider, and admin."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "admin", - isMut: false, - isSigner: true, - docs: ["Admin account. Must be owner of the pool."], - }, - ], - args: [ - { - name: "fees", - type: { - defined: "PoolFees", - }, - }, - ], - }, - { - name: "overrideCurveParam", - docs: [ - "Update swap curve parameters. This function do not allow update of curve type. For example: stable swap curve to constant product curve. Only supported by pool with stable swap curve.", - "Only amp is allowed to be override. The other attributes of stable swap curve will be ignored.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "admin", - isMut: false, - isSigner: true, - docs: ["Admin account. Must be owner of the pool."], - }, - ], - args: [ - { - name: "curveType", - type: { - defined: "CurveType", - }, - }, - ], - }, - { - name: "transferAdmin", - docs: ["Transfer the admin of the pool to new admin."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "admin", - isMut: false, - isSigner: true, - docs: ["Admin account. Must be owner of the pool."], - }, - { - name: "newAdmin", - isMut: false, - isSigner: true, - docs: ["New admin account."], - }, - ], - args: [], - }, - { - name: "getPoolInfo", - docs: ["Get the general information of the pool."], - accounts: [ - { - name: "pool", - isMut: false, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "aVaultLp", - isMut: false, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: false, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: false, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: false, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - ], - args: [], - }, - { - name: "bootstrapLiquidity", - docs: ["Bootstrap the pool when liquidity is depleted."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "user pool lp token account. lp will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: [ - "User account. Must be owner of user_a_token, and user_b_token.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - { - name: "createMintMetadata", - docs: ["Create mint metadata account for old pools"], - accounts: [ - { - name: "pool", - isMut: false, - isSigner: false, - docs: ["Pool account"], - }, - { - name: "lpMint", - isMut: false, - isSigner: false, - docs: ["LP mint account of the pool"], - }, - { - name: "aVaultLp", - isMut: false, - isSigner: false, - docs: ["Vault A LP account of the pool"], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: ["Payer"], - }, - ], - args: [], - }, - { - name: "createLockEscrow", - docs: ["Create lock account"], - accounts: [ - { - name: "pool", - isMut: false, - isSigner: false, - docs: ["Pool account"], - }, - { - name: "lockEscrow", - isMut: true, - isSigner: false, - docs: ["Lock account"], - }, - { - name: "owner", - isMut: false, - isSigner: false, - }, - { - name: "lpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: ["Payer account"], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [], - }, - { - name: "lock", - docs: ["Lock Lp token"], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account"], - }, - { - name: "lpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "lockEscrow", - isMut: true, - isSigner: false, - docs: ["Lock account"], - }, - { - name: "owner", - isMut: true, - isSigner: true, - docs: ["Owner of lock account"], - }, - { - name: "sourceTokens", - isMut: true, - isSigner: false, - docs: ["owner lp token account"], - }, - { - name: "escrowVault", - isMut: true, - isSigner: false, - docs: ["Escrow vault"], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "aVault", - isMut: false, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: false, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLp", - isMut: false, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: false, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVaultLpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - ], - args: [ - { - name: "maxAmount", - type: "u64", - }, - ], - }, - { - name: "claimFee", - docs: ["Claim fee"], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "lockEscrow", - isMut: true, - isSigner: false, - docs: ["Lock account"], - }, - { - name: "owner", - isMut: true, - isSigner: true, - docs: ["Owner of lock account"], - }, - { - name: "sourceTokens", - isMut: true, - isSigner: false, - docs: ["owner lp token account"], - }, - { - name: "escrowVault", - isMut: true, - isSigner: false, - docs: ["Escrow vault"], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - ], - args: [ - { - name: "maxAmount", - type: "u64", - }, - ], - }, - { - name: "createConfig", - docs: ["Create config"], - accounts: [ - { - name: "config", - isMut: true, - isSigner: false, - }, - { - name: "admin", - isMut: true, - isSigner: true, - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: "configParameters", - type: { - defined: "ConfigParameters", - }, - }, - ], - }, - { - name: "closeConfig", - docs: ["Close config"], - accounts: [ - { - name: "config", - isMut: true, - isSigner: false, - }, - { - name: "admin", - isMut: true, - isSigner: true, - }, - { - name: "rentReceiver", - isMut: true, - isSigner: false, - }, - ], - args: [], - }, - { - name: "initializePermissionlessConstantProductPoolWithConfig", - docs: ["Initialize permissionless pool with config"], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA address)"], - }, - { - name: "config", - isMut: false, - isSigner: false, - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "tokenAMint", - isMut: false, - isSigner: false, - docs: ["Token A mint of the pool. Eg: USDT"], - }, - { - name: "tokenBMint", - isMut: false, - isSigner: false, - docs: ["Token B mint of the pool. Eg: USDC"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "payerTokenA", - isMut: true, - isSigner: false, - docs: [ - "Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerTokenB", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerPoolLp", - isMut: true, - isSigner: false, - }, - { - name: "protocolTokenAFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - }, - { - name: "protocolTokenBFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: [ - "Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.", - ], - }, - { - name: "rent", - isMut: false, - isSigner: false, - docs: ["Rent account."], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "associatedTokenProgram", - isMut: false, - isSigner: false, - docs: ["Associated token program."], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [ - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - ], - accounts: [ - { - name: "config", - type: { - kind: "struct", - fields: [ - { - name: "poolFees", - type: { - defined: "PoolFees", - }, - }, - { - name: "activationDurationInSlot", - type: "u64", - }, - { - name: "vaultConfigKey", - type: "publicKey", - }, - { - name: "padding", - type: { - array: ["u8", 260], - }, - }, - ], - }, - }, - { - name: "lockEscrow", - docs: ["State of lock escrow account"], - type: { - kind: "struct", - fields: [ - { - name: "pool", - docs: ["Pool address"], - type: "publicKey", - }, - { - name: "owner", - docs: ["Owner address"], - type: "publicKey", - }, - { - name: "escrowVault", - docs: ["Vault address, store the lock user lock"], - type: "publicKey", - }, - { - name: "bump", - docs: ["bump, used to sign"], - type: "u8", - }, - { - name: "totalLockedAmount", - docs: ["Total locked amount"], - type: "u64", - }, - { - name: "lpPerToken", - docs: ["Lp per token, virtual price of lp token"], - type: "u128", - }, - { - name: "unclaimedFeePending", - docs: ["Unclaimed fee pending"], - type: "u64", - }, - { - name: "aFee", - docs: ["Total a fee claimed so far"], - type: "u64", - }, - { - name: "bFee", - docs: ["Total b fee claimed so far"], - type: "u64", - }, - ], - }, - }, - { - name: "pool", - docs: ["State of pool account"], - type: { - kind: "struct", - fields: [ - { - name: "lpMint", - docs: ["LP token mint of the pool"], - type: "publicKey", - }, - { - name: "tokenAMint", - docs: ["Token A mint of the pool. Eg: USDT"], - type: "publicKey", - }, - { - name: "tokenBMint", - docs: ["Token B mint of the pool. Eg: USDC"], - type: "publicKey", - }, - { - name: "aVault", - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - type: "publicKey", - }, - { - name: "bVault", - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - type: "publicKey", - }, - { - name: "aVaultLp", - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - type: "publicKey", - }, - { - name: "bVaultLp", - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - type: "publicKey", - }, - { - name: "aVaultLpBump", - docs: ['"A" vault lp bump. Used to create signer seeds.'], - type: "u8", - }, - { - name: "enabled", - docs: [ - "Flag to determine whether the pool is enabled, or disabled.", - ], - type: "bool", - }, - { - name: "protocolTokenAFee", - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - type: "publicKey", - }, - { - name: "protocolTokenBFee", - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - type: "publicKey", - }, - { - name: "admin", - docs: ["Owner of the pool."], - type: "publicKey", - }, - { - name: "fees", - docs: ["Store the fee charges setting."], - type: { - defined: "PoolFees", - }, - }, - { - name: "poolType", - docs: ["Pool type"], - type: { - defined: "PoolType", - }, - }, - { - name: "stake", - docs: ["Stake pubkey of SPL stake pool"], - type: "publicKey", - }, - { - name: "totalLockedLp", - docs: ["Total locked lp token"], - type: "u64", - }, - { - name: "alphaVault", - docs: ["Alpha vault config"], - type: { - defined: "AlphaVault", - }, - }, - { - name: "padding", - docs: ["Padding for future pool field"], - type: { - defined: "Padding", - }, - }, - { - name: "curveType", - docs: ["The type of the swap curve supported by the pool."], - type: { - defined: "CurveType", - }, - }, - ], - }, - }, - ], - types: [ - { - name: "TokenMultiplier", - docs: [ - "Multiplier for the pool token. Used to normalized token with different decimal into the same precision.", - ], - type: { - kind: "struct", - fields: [ - { - name: "tokenAMultiplier", - docs: ["Multiplier for token A of the pool."], - type: "u64", - }, - { - name: "tokenBMultiplier", - docs: ["Multiplier for token B of the pool."], - type: "u64", - }, - { - name: "precisionFactor", - docs: [ - "Record the highest token decimal in the pool. For example, Token A is 6 decimal, token B is 9 decimal. This will save value of 9.", - ], - type: "u8", - }, - ], - }, - }, - { - name: "PoolFees", - docs: ["Information regarding fee charges"], - type: { - kind: "struct", - fields: [ - { - name: "tradeFeeNumerator", - docs: [ - "Trade fees are extra token amounts that are held inside the token", - "accounts during a trade, making the value of liquidity tokens rise.", - "Trade fee numerator", - ], - type: "u64", - }, - { - name: "tradeFeeDenominator", - docs: ["Trade fee denominator"], - type: "u64", - }, - { - name: "protocolTradeFeeNumerator", - docs: [ - "Protocol trading fees are extra token amounts that are held inside the token", - "accounts during a trade, with the equivalent in pool tokens minted to", - "the protocol of the program.", - "Protocol trade fee numerator", - ], - type: "u64", - }, - { - name: "protocolTradeFeeDenominator", - docs: ["Protocol trade fee denominator"], - type: "u64", - }, - ], - }, - }, - { - name: "Depeg", - docs: ["Contains information for depeg pool"], - type: { - kind: "struct", - fields: [ - { - name: "baseVirtualPrice", - docs: ["The virtual price of staking / interest bearing token"], - type: "u64", - }, - { - name: "baseCacheUpdated", - docs: ["The virtual price of staking / interest bearing token"], - type: "u64", - }, - { - name: "depegType", - docs: ["Type of the depeg pool"], - type: { - defined: "DepegType", - }, - }, - ], - }, - }, - { - name: "ConfigParameters", - type: { - kind: "struct", - fields: [ - { - name: "tradeFeeNumerator", - type: "u64", - }, - { - name: "protocolTradeFeeNumerator", - type: "u64", - }, - { - name: "activationDurationInSlot", - type: "u64", - }, - { - name: "vaultConfigKey", - type: "publicKey", - }, - { - name: "index", - type: "u64", - }, - ], - }, - }, - { - name: "Padding", - docs: ["Padding for future pool fields"], - type: { - kind: "struct", - fields: [ - { - name: "padding0", - docs: ["Padding 0"], - type: { - array: ["u8", 15], - }, - }, - { - name: "padding", - docs: ["Padding 1"], - type: { - array: ["u128", 24], - }, - }, - ], - }, - }, - { - name: "AlphaVault", - type: { - kind: "struct", - fields: [ - { - name: "activationSlot", - docs: ["Activation slot"], - type: "u64", - }, - { - name: "whitelistedVault", - docs: ["Whitelisted vault to be able to buy pool before open slot"], - type: "publicKey", - }, - { - name: "poolCreator", - docs: [ - "Need to store pool creator in lauch pool, so they can modify liquidity before activation slot", - ], - type: "publicKey", - }, - ], - }, - }, - { - name: "RoundDirection", - docs: ["Rounding direction"], - type: { - kind: "enum", - variants: [ - { - name: "Floor", - }, - { - name: "Ceiling", - }, - ], - }, - }, - { - name: "TradeDirection", - docs: ["Trade (swap) direction"], - type: { - kind: "enum", - variants: [ - { - name: "AtoB", - }, - { - name: "BtoA", - }, - ], - }, - }, - { - name: "NewCurveType", - docs: ["Type of the swap curve"], - type: { - kind: "enum", - variants: [ - { - name: "ConstantProduct", - }, - { - name: "Stable", - fields: [ - { - name: "amp", - docs: ["Amplification coefficient"], - type: "u64", - }, - { - name: "token_multiplier", - docs: [ - "Multiplier for the pool token. Used to normalized token with different decimal into the same precision.", - ], - type: { - defined: "TokenMultiplier", - }, - }, - { - name: "depeg", - docs: [ - "Depeg pool information. Contains functions to allow token amount to be repeg using stake / interest bearing token virtual price", - ], - type: { - defined: "Depeg", - }, - }, - { - name: "last_amp_updated_timestamp", - docs: [ - "The last amp updated timestamp. Used to prevent update_curve_info called infinitely many times within a short period", - ], - type: "u64", - }, - ], - }, - { - name: "NewCurve", - fields: [ - { - name: "field_one", - type: "u64", - }, - { - name: "field_two", - type: "u64", - }, - ], - }, - ], - }, - }, - { - name: "CurveType", - docs: ["Type of the swap curve"], - type: { - kind: "enum", - variants: [ - { - name: "ConstantProduct", - }, - { - name: "Stable", - fields: [ - { - name: "amp", - docs: ["Amplification coefficient"], - type: "u64", - }, - { - name: "token_multiplier", - docs: [ - "Multiplier for the pool token. Used to normalized token with different decimal into the same precision.", - ], - type: { - defined: "TokenMultiplier", - }, - }, - { - name: "depeg", - docs: [ - "Depeg pool information. Contains functions to allow token amount to be repeg using stake / interest bearing token virtual price", - ], - type: { - defined: "Depeg", - }, - }, - { - name: "last_amp_updated_timestamp", - docs: [ - "The last amp updated timestamp. Used to prevent update_curve_info called infinitely many times within a short period", - ], - type: "u64", - }, - ], - }, - ], - }, - }, - { - name: "DepegType", - docs: ["Type of depeg pool"], - type: { - kind: "enum", - variants: [ - { - name: "None", - }, - { - name: "Marinade", - }, - { - name: "Lido", - }, - { - name: "SplStake", - }, - ], - }, - }, - { - name: "Rounding", - docs: ["Round up, down"], - type: { - kind: "enum", - variants: [ - { - name: "Up", - }, - { - name: "Down", - }, - ], - }, - }, - { - name: "PoolType", - docs: ["Pool type"], - type: { - kind: "enum", - variants: [ - { - name: "Permissioned", - }, - { - name: "Permissionless", - }, - ], - }, - }, - ], - events: [ - { - name: "AddLiquidity", - fields: [ - { - name: "lpMintAmount", - type: "u64", - index: false, - }, - { - name: "tokenAAmount", - type: "u64", - index: false, - }, - { - name: "tokenBAmount", - type: "u64", - index: false, - }, - ], - }, - { - name: "RemoveLiquidity", - fields: [ - { - name: "lpUnmintAmount", - type: "u64", - index: false, - }, - { - name: "tokenAOutAmount", - type: "u64", - index: false, - }, - { - name: "tokenBOutAmount", - type: "u64", - index: false, - }, - ], - }, - { - name: "BootstrapLiquidity", - fields: [ - { - name: "lpMintAmount", - type: "u64", - index: false, - }, - { - name: "tokenAAmount", - type: "u64", - index: false, - }, - { - name: "tokenBAmount", - type: "u64", - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "Swap", - fields: [ - { - name: "inAmount", - type: "u64", - index: false, - }, - { - name: "outAmount", - type: "u64", - index: false, - }, - { - name: "tradeFee", - type: "u64", - index: false, - }, - { - name: "protocolFee", - type: "u64", - index: false, - }, - { - name: "hostFee", - type: "u64", - index: false, - }, - ], - }, - { - name: "SetPoolFees", - fields: [ - { - name: "tradeFeeNumerator", - type: "u64", - index: false, - }, - { - name: "tradeFeeDenominator", - type: "u64", - index: false, - }, - { - name: "protocolTradeFeeNumerator", - type: "u64", - index: false, - }, - { - name: "protocolTradeFeeDenominator", - type: "u64", - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "PoolInfo", - fields: [ - { - name: "tokenAAmount", - type: "u64", - index: false, - }, - { - name: "tokenBAmount", - type: "u64", - index: false, - }, - { - name: "virtualPrice", - type: "f64", - index: false, - }, - { - name: "currentTimestamp", - type: "u64", - index: false, - }, - ], - }, - { - name: "TransferAdmin", - fields: [ - { - name: "admin", - type: "publicKey", - index: false, - }, - { - name: "newAdmin", - type: "publicKey", - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "OverrideCurveParam", - fields: [ - { - name: "newAmp", - type: "u64", - index: false, - }, - { - name: "updatedTimestamp", - type: "u64", - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "PoolCreated", - fields: [ - { - name: "lpMint", - type: "publicKey", - index: false, - }, - { - name: "tokenAMint", - type: "publicKey", - index: false, - }, - { - name: "tokenBMint", - type: "publicKey", - index: false, - }, - { - name: "poolType", - type: { - defined: "PoolType", - }, - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "PoolEnabled", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "enabled", - type: "bool", - index: false, - }, - ], - }, - { - name: "MigrateFeeAccount", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "newAdminTokenAFee", - type: "publicKey", - index: false, - }, - { - name: "newAdminTokenBFee", - type: "publicKey", - index: false, - }, - { - name: "tokenAAmount", - type: "u64", - index: false, - }, - { - name: "tokenBAmount", - type: "u64", - index: false, - }, - ], - }, - { - name: "CreateLockEscrow", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "owner", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "Lock", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "owner", - type: "publicKey", - index: false, - }, - { - name: "amount", - type: "u64", - index: false, - }, - ], - }, - { - name: "ClaimFee", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "owner", - type: "publicKey", - index: false, - }, - { - name: "amount", - type: "u64", - index: false, - }, - { - name: "aFee", - type: "u64", - index: false, - }, - { - name: "bFee", - type: "u64", - index: false, - }, - ], - }, - { - name: "CreateConfig", - fields: [ - { - name: "tradeFeeNumerator", - type: "u64", - index: false, - }, - { - name: "protocolTradeFeeNumerator", - type: "u64", - index: false, - }, - { - name: "config", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "CloseConfig", - fields: [ - { - name: "config", - type: "publicKey", - index: false, - }, - ], - }, - ], - errors: [ - { - code: 6000, - name: "MathOverflow", - msg: "Math operation overflow", - }, - { - code: 6001, - name: "InvalidFee", - msg: "Invalid fee setup", - }, - { - code: 6002, - name: "InvalidInvariant", - msg: "Invalid invariant d", - }, - { - code: 6003, - name: "FeeCalculationFailure", - msg: "Fee calculation failure", - }, - { - code: 6004, - name: "ExceededSlippage", - msg: "Exceeded slippage tolerance", - }, - { - code: 6005, - name: "InvalidCalculation", - msg: "Invalid curve calculation", - }, - { - code: 6006, - name: "ZeroTradingTokens", - msg: "Given pool token amount results in zero trading tokens", - }, - { - code: 6007, - name: "ConversionError", - msg: "Math conversion overflow", - }, - { - code: 6008, - name: "FaultyLpMint", - msg: "LP mint authority must be 'A' vault lp, without freeze authority, and 0 supply", - }, - { - code: 6009, - name: "MismatchedTokenMint", - msg: "Token mint mismatched", - }, - { - code: 6010, - name: "MismatchedLpMint", - msg: "LP mint mismatched", - }, - { - code: 6011, - name: "MismatchedOwner", - msg: "Invalid lp token owner", - }, - { - code: 6012, - name: "InvalidVaultAccount", - msg: "Invalid vault account", - }, - { - code: 6013, - name: "InvalidVaultLpAccount", - msg: "Invalid vault lp account", - }, - { - code: 6014, - name: "InvalidPoolLpMintAccount", - msg: "Invalid pool lp mint account", - }, - { - code: 6015, - name: "PoolDisabled", - msg: "Pool disabled", - }, - { - code: 6016, - name: "InvalidAdminAccount", - msg: "Invalid admin account", - }, - { - code: 6017, - name: "InvalidProtocolFeeAccount", - msg: "Invalid protocol fee account", - }, - { - code: 6018, - name: "SameAdminAccount", - msg: "Same admin account", - }, - { - code: 6019, - name: "IdenticalSourceDestination", - msg: "Identical user source and destination token account", - }, - { - code: 6020, - name: "ApyCalculationError", - msg: "Apy calculation error", - }, - { - code: 6021, - name: "InsufficientSnapshot", - msg: "Insufficient virtual price snapshot", - }, - { - code: 6022, - name: "NonUpdatableCurve", - msg: "Current curve is non-updatable", - }, - { - code: 6023, - name: "MisMatchedCurve", - msg: "New curve is mismatched with old curve", - }, - { - code: 6024, - name: "InvalidAmplification", - msg: "Amplification is invalid", - }, - { - code: 6025, - name: "UnsupportedOperation", - msg: "Operation is not supported", - }, - { - code: 6026, - name: "ExceedMaxAChanges", - msg: "Exceed max amplification changes", - }, - { - code: 6027, - name: "InvalidRemainingAccountsLen", - msg: "Invalid remaining accounts length", - }, - { - code: 6028, - name: "InvalidRemainingAccounts", - msg: "Invalid remaining account", - }, - { - code: 6029, - name: "MismatchedDepegMint", - msg: "Token mint B doesn't matches depeg type token mint", - }, - { - code: 6030, - name: "InvalidApyAccount", - msg: "Invalid APY account", - }, - { - code: 6031, - name: "InvalidTokenMultiplier", - msg: "Invalid token multiplier", - }, - { - code: 6032, - name: "InvalidDepegInformation", - msg: "Invalid depeg information", - }, - { - code: 6033, - name: "UpdateTimeConstraint", - msg: "Update time constraint violated", - }, - { - code: 6034, - name: "ExceedMaxFeeBps", - msg: "Exceeded max fee bps", - }, - { - code: 6035, - name: "InvalidAdmin", - msg: "Invalid admin", - }, - { - code: 6036, - name: "PoolIsNotPermissioned", - msg: "Pool is not permissioned", - }, - { - code: 6037, - name: "InvalidDepositAmount", - msg: "Invalid deposit amount", - }, - { - code: 6038, - name: "InvalidFeeOwner", - msg: "Invalid fee owner", - }, - { - code: 6039, - name: "NonDepletedPool", - msg: "Pool is not depleted", - }, - { - code: 6040, - name: "AmountNotPeg", - msg: "Token amount is not 1:1", - }, - { - code: 6041, - name: "AmountIsZero", - msg: "Amount is zero", - }, - { - code: 6042, - name: "TypeCastFailed", - msg: "Type cast error", - }, - { - code: 6043, - name: "AmountIsNotEnough", - msg: "Amount is not enough", - }, - { - code: 6044, - name: "InvalidActivationSlotInDuration", - msg: "Invalid activation slot in duration", - }, - ], -}; - -const IDL = { - version: "0.4.12", - name: "amm", - docs: ["Program for AMM"], - instructions: [ - { - name: "initializePermissionedPool", - docs: ["Initialize a new permissioned pool."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: true, - docs: ["Pool account (arbitrary address)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "tokenAMint", - isMut: false, - isSigner: false, - docs: ["Token A mint of the pool. Eg: USDT"], - }, - { - name: "tokenBMint", - isMut: false, - isSigner: false, - docs: ["Token B mint of the pool. Eg: USDC"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "adminTokenA", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token A mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "adminTokenB", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "adminPoolLp", - isMut: true, - isSigner: false, - docs: [ - "Admin pool LP token account. Used to receive LP during first deposit (initialize pool)", - "Admin pool LP token account. Used to receive LP during first deposit (initialize pool)", - ], - }, - { - name: "protocolTokenAFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - }, - { - name: "protocolTokenBFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - }, - { - name: "admin", - isMut: true, - isSigner: true, - docs: [ - "Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.", - ], - }, - { - name: "feeOwner", - isMut: false, - isSigner: false, - }, - { - name: "rent", - isMut: false, - isSigner: false, - docs: ["Rent account."], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "associatedTokenProgram", - isMut: false, - isSigner: false, - docs: ["Associated token program."], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [ - { - name: "curveType", - type: { - defined: "CurveType", - }, - }, - ], - }, - { - name: "initializePermissionlessPool", - docs: ["Initialize a new permissionless pool."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA address)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "tokenAMint", - isMut: false, - isSigner: false, - docs: ["Token A mint of the pool. Eg: USDT"], - }, - { - name: "tokenBMint", - isMut: false, - isSigner: false, - docs: ["Token B mint of the pool. Eg: USDC"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "payerTokenA", - isMut: true, - isSigner: false, - docs: [ - "Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerTokenB", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerPoolLp", - isMut: true, - isSigner: false, - }, - { - name: "protocolTokenAFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - }, - { - name: "protocolTokenBFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: [ - "Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.", - ], - }, - { - name: "feeOwner", - isMut: false, - isSigner: false, - }, - { - name: "rent", - isMut: false, - isSigner: false, - docs: ["Rent account."], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "associatedTokenProgram", - isMut: false, - isSigner: false, - docs: ["Associated token program."], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [ - { - name: "curveType", - type: { - defined: "CurveType", - }, - }, - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - { - name: "initializePermissionlessPoolWithFeeTier", - docs: ["Initialize a new permissionless pool with customized fee tier"], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA address)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "tokenAMint", - isMut: false, - isSigner: false, - docs: ["Token A mint of the pool. Eg: USDT"], - }, - { - name: "tokenBMint", - isMut: false, - isSigner: false, - docs: ["Token B mint of the pool. Eg: USDC"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "payerTokenA", - isMut: true, - isSigner: false, - docs: [ - "Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerTokenB", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerPoolLp", - isMut: true, - isSigner: false, - }, - { - name: "protocolTokenAFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - }, - { - name: "protocolTokenBFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: [ - "Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.", - ], - }, - { - name: "feeOwner", - isMut: false, - isSigner: false, - }, - { - name: "rent", - isMut: false, - isSigner: false, - docs: ["Rent account."], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "associatedTokenProgram", - isMut: false, - isSigner: false, - docs: ["Associated token program."], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [ - { - name: "curveType", - type: { - defined: "CurveType", - }, - }, - { - name: "tradeFeeBps", - type: "u64", - }, - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - { - name: "enableOrDisablePool", - docs: [ - "Enable or disable a pool. A disabled pool allow only remove balanced liquidity operation.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "admin", - isMut: false, - isSigner: true, - docs: ["Admin account. Must be owner of the pool."], - }, - ], - args: [ - { - name: "enable", - type: "bool", - }, - ], - }, - { - name: "swap", - docs: [ - "Swap token A to B, or vice versa. An amount of trading fee will be charged for liquidity provider, and the admin of the pool.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "userSourceToken", - isMut: true, - isSigner: false, - docs: [ - "User token account. Token from this account will be transfer into the vault by the pool in exchange for another token of the pool.", - ], - }, - { - name: "userDestinationToken", - isMut: true, - isSigner: false, - docs: [ - "User token account. The exchanged token will be transfer into this account from the pool.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["Lp token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["Lp token mint of vault b"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "protocolTokenFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account. Used to receive trading fee. It's mint field must matched with user_source_token mint field.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: ["User account. Must be owner of user_source_token."], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "inAmount", - type: "u64", - }, - { - name: "minimumOutAmount", - type: "u64", - }, - ], - }, - { - name: "removeLiquiditySingleSide", - docs: [ - "Withdraw only single token from the pool. Only supported by pool with stable swap curve.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "User pool lp token account. LP will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userDestinationToken", - isMut: true, - isSigner: false, - docs: [ - "User token account to receive token upon success liquidity removal.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: ["User account. Must be owner of the user_pool_lp account."], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "poolTokenAmount", - type: "u64", - }, - { - name: "minimumOutAmount", - type: "u64", - }, - ], - }, - { - name: "addImbalanceLiquidity", - docs: [ - "Deposit tokens to the pool in an imbalance ratio. Only supported by pool with stable swap curve.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "user pool lp token account. lp will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: [ - "User account. Must be owner of user_a_token, and user_b_token.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "minimumPoolTokenAmount", - type: "u64", - }, - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - { - name: "removeBalanceLiquidity", - docs: [ - "Withdraw tokens from the pool in a balanced ratio. User will still able to withdraw from pool even the pool is disabled. This allow user to exit their liquidity when there's some unforeseen event happen.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "user pool lp token account. lp will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: [ - "User account. Must be owner of user_a_token, and user_b_token.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "poolTokenAmount", - type: "u64", - }, - { - name: "minimumATokenOut", - type: "u64", - }, - { - name: "minimumBTokenOut", - type: "u64", - }, - ], - }, - { - name: "addBalanceLiquidity", - docs: ["Deposit tokens to the pool in a balanced ratio."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "user pool lp token account. lp will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: [ - "User account. Must be owner of user_a_token, and user_b_token.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "poolTokenAmount", - type: "u64", - }, - { - name: "maximumTokenAAmount", - type: "u64", - }, - { - name: "maximumTokenBAmount", - type: "u64", - }, - ], - }, - { - name: "setPoolFees", - docs: ["Update trading fee charged for liquidity provider, and admin."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "admin", - isMut: false, - isSigner: true, - docs: ["Admin account. Must be owner of the pool."], - }, - ], - args: [ - { - name: "fees", - type: { - defined: "PoolFees", - }, - }, - ], - }, - { - name: "overrideCurveParam", - docs: [ - "Update swap curve parameters. This function do not allow update of curve type. For example: stable swap curve to constant product curve. Only supported by pool with stable swap curve.", - "Only amp is allowed to be override. The other attributes of stable swap curve will be ignored.", - ], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "admin", - isMut: false, - isSigner: true, - docs: ["Admin account. Must be owner of the pool."], - }, - ], - args: [ - { - name: "curveType", - type: { - defined: "CurveType", - }, - }, - ], - }, - { - name: "transferAdmin", - docs: ["Transfer the admin of the pool to new admin."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "admin", - isMut: false, - isSigner: true, - docs: ["Admin account. Must be owner of the pool."], - }, - { - name: "newAdmin", - isMut: false, - isSigner: true, - docs: ["New admin account."], - }, - ], - args: [], - }, - { - name: "getPoolInfo", - docs: ["Get the general information of the pool."], - accounts: [ - { - name: "pool", - isMut: false, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "aVaultLp", - isMut: false, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: false, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: false, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: false, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - ], - args: [], - }, - { - name: "bootstrapLiquidity", - docs: ["Bootstrap the pool when liquidity is depleted."], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA)"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "userPoolLp", - isMut: true, - isSigner: false, - docs: [ - "user pool lp token account. lp will be burned from this account upon success liquidity removal.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "user", - isMut: false, - isSigner: true, - docs: [ - "User account. Must be owner of user_a_token, and user_b_token.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - ], - args: [ - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - { - name: "createMintMetadata", - docs: ["Create mint metadata account for old pools"], - accounts: [ - { - name: "pool", - isMut: false, - isSigner: false, - docs: ["Pool account"], - }, - { - name: "lpMint", - isMut: false, - isSigner: false, - docs: ["LP mint account of the pool"], - }, - { - name: "aVaultLp", - isMut: false, - isSigner: false, - docs: ["Vault A LP account of the pool"], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: ["Payer"], - }, - ], - args: [], - }, - { - name: "createLockEscrow", - docs: ["Create lock account"], - accounts: [ - { - name: "pool", - isMut: false, - isSigner: false, - docs: ["Pool account"], - }, - { - name: "lockEscrow", - isMut: true, - isSigner: false, - docs: ["Lock account"], - }, - { - name: "owner", - isMut: false, - isSigner: false, - }, - { - name: "lpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: ["Payer account"], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [], - }, - { - name: "lock", - docs: ["Lock Lp token"], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account"], - }, - { - name: "lpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "lockEscrow", - isMut: true, - isSigner: false, - docs: ["Lock account"], - }, - { - name: "owner", - isMut: true, - isSigner: true, - docs: ["Owner of lock account"], - }, - { - name: "sourceTokens", - isMut: true, - isSigner: false, - docs: ["owner lp token account"], - }, - { - name: "escrowVault", - isMut: true, - isSigner: false, - docs: ["Escrow vault"], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "aVault", - isMut: false, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: false, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLp", - isMut: false, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: false, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVaultLpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: false, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - ], - args: [ - { - name: "maxAmount", - type: "u64", - }, - ], - }, - { - name: "claimFee", - docs: ["Claim fee"], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account"], - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "lockEscrow", - isMut: true, - isSigner: false, - docs: ["Lock account"], - }, - { - name: "owner", - isMut: true, - isSigner: true, - docs: ["Owner of lock account"], - }, - { - name: "sourceTokens", - isMut: true, - isSigner: false, - docs: ["owner lp token account"], - }, - { - name: "escrowVault", - isMut: true, - isSigner: false, - docs: ["Escrow vault"], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault a"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault b"], - }, - { - name: "userAToken", - isMut: true, - isSigner: false, - docs: [ - "User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "userBToken", - isMut: true, - isSigner: false, - docs: [ - "User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.", - ], - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. the pool will deposit/withdraw liquidity from the vault.", - ], - }, - ], - args: [ - { - name: "maxAmount", - type: "u64", - }, - ], - }, - { - name: "createConfig", - docs: ["Create config"], - accounts: [ - { - name: "config", - isMut: true, - isSigner: false, - }, - { - name: "admin", - isMut: true, - isSigner: true, - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: "configParameters", - type: { - defined: "ConfigParameters", - }, - }, - ], - }, - { - name: "closeConfig", - docs: ["Close config"], - accounts: [ - { - name: "config", - isMut: true, - isSigner: false, - }, - { - name: "admin", - isMut: true, - isSigner: true, - }, - { - name: "rentReceiver", - isMut: true, - isSigner: false, - }, - ], - args: [], - }, - { - name: "initializePermissionlessConstantProductPoolWithConfig", - docs: ["Initialize permissionless pool with config"], - accounts: [ - { - name: "pool", - isMut: true, - isSigner: false, - docs: ["Pool account (PDA address)"], - }, - { - name: "config", - isMut: false, - isSigner: false, - }, - { - name: "lpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of the pool"], - }, - { - name: "tokenAMint", - isMut: false, - isSigner: false, - docs: ["Token A mint of the pool. Eg: USDT"], - }, - { - name: "tokenBMint", - isMut: false, - isSigner: false, - docs: ["Token B mint of the pool. Eg: USDC"], - }, - { - name: "aVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "bVault", - isMut: true, - isSigner: false, - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - }, - { - name: "aTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault A"], - }, - { - name: "bTokenVault", - isMut: true, - isSigner: false, - docs: ["Token vault account of vault B"], - }, - { - name: "aVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault A"], - }, - { - name: "bVaultLpMint", - isMut: true, - isSigner: false, - docs: ["LP token mint of vault B"], - }, - { - name: "aVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "bVaultLp", - isMut: true, - isSigner: false, - docs: [ - "LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.", - ], - }, - { - name: "payerTokenA", - isMut: true, - isSigner: false, - docs: [ - "Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerTokenB", - isMut: true, - isSigner: false, - docs: [ - "Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.", - ], - }, - { - name: "payerPoolLp", - isMut: true, - isSigner: false, - }, - { - name: "protocolTokenAFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - }, - { - name: "protocolTokenBFee", - isMut: true, - isSigner: false, - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - }, - { - name: "payer", - isMut: true, - isSigner: true, - docs: [ - "Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.", - ], - }, - { - name: "rent", - isMut: false, - isSigner: false, - docs: ["Rent account."], - }, - { - name: "mintMetadata", - isMut: true, - isSigner: false, - }, - { - name: "metadataProgram", - isMut: false, - isSigner: false, - }, - { - name: "vaultProgram", - isMut: false, - isSigner: false, - docs: [ - "Vault program. The pool will deposit/withdraw liquidity from the vault.", - ], - }, - { - name: "tokenProgram", - isMut: false, - isSigner: false, - docs: ["Token program."], - }, - { - name: "associatedTokenProgram", - isMut: false, - isSigner: false, - docs: ["Associated token program."], - }, - { - name: "systemProgram", - isMut: false, - isSigner: false, - docs: ["System program."], - }, - ], - args: [ - { - name: "tokenAAmount", - type: "u64", - }, - { - name: "tokenBAmount", - type: "u64", - }, - ], - }, - ], - accounts: [ - { - name: "config", - type: { - kind: "struct", - fields: [ - { - name: "poolFees", - type: { - defined: "PoolFees", - }, - }, - { - name: "activationDurationInSlot", - type: "u64", - }, - { - name: "vaultConfigKey", - type: "publicKey", - }, - { - name: "padding", - type: { - array: ["u8", 260], - }, - }, - ], - }, - }, - { - name: "lockEscrow", - docs: ["State of lock escrow account"], - type: { - kind: "struct", - fields: [ - { - name: "pool", - docs: ["Pool address"], - type: "publicKey", - }, - { - name: "owner", - docs: ["Owner address"], - type: "publicKey", - }, - { - name: "escrowVault", - docs: ["Vault address, store the lock user lock"], - type: "publicKey", - }, - { - name: "bump", - docs: ["bump, used to sign"], - type: "u8", - }, - { - name: "totalLockedAmount", - docs: ["Total locked amount"], - type: "u64", - }, - { - name: "lpPerToken", - docs: ["Lp per token, virtual price of lp token"], - type: "u128", - }, - { - name: "unclaimedFeePending", - docs: ["Unclaimed fee pending"], - type: "u64", - }, - { - name: "aFee", - docs: ["Total a fee claimed so far"], - type: "u64", - }, - { - name: "bFee", - docs: ["Total b fee claimed so far"], - type: "u64", - }, - ], - }, - }, - { - name: "pool", - docs: ["State of pool account"], - type: { - kind: "struct", - fields: [ - { - name: "lpMint", - docs: ["LP token mint of the pool"], - type: "publicKey", - }, - { - name: "tokenAMint", - docs: ["Token A mint of the pool. Eg: USDT"], - type: "publicKey", - }, - { - name: "tokenBMint", - docs: ["Token B mint of the pool. Eg: USDC"], - type: "publicKey", - }, - { - name: "aVault", - docs: [ - "Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.", - ], - type: "publicKey", - }, - { - name: "bVault", - docs: [ - "Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.", - ], - type: "publicKey", - }, - { - name: "aVaultLp", - docs: [ - "LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - type: "publicKey", - }, - { - name: "bVaultLp", - docs: [ - "LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.", - ], - type: "publicKey", - }, - { - name: "aVaultLpBump", - docs: ['"A" vault lp bump. Used to create signer seeds.'], - type: "u8", - }, - { - name: "enabled", - docs: [ - "Flag to determine whether the pool is enabled, or disabled.", - ], - type: "bool", - }, - { - name: "protocolTokenAFee", - docs: [ - "Protocol fee token account for token A. Used to receive trading fee.", - ], - type: "publicKey", - }, - { - name: "protocolTokenBFee", - docs: [ - "Protocol fee token account for token B. Used to receive trading fee.", - ], - type: "publicKey", - }, - { - name: "admin", - docs: ["Owner of the pool."], - type: "publicKey", - }, - { - name: "fees", - docs: ["Store the fee charges setting."], - type: { - defined: "PoolFees", - }, - }, - { - name: "poolType", - docs: ["Pool type"], - type: { - defined: "PoolType", - }, - }, - { - name: "stake", - docs: ["Stake pubkey of SPL stake pool"], - type: "publicKey", - }, - { - name: "totalLockedLp", - docs: ["Total locked lp token"], - type: "u64", - }, - { - name: "alphaVault", - docs: ["Alpha vault config"], - type: { - defined: "AlphaVault", - }, - }, - { - name: "padding", - docs: ["Padding for future pool field"], - type: { - defined: "Padding", - }, - }, - { - name: "curveType", - docs: ["The type of the swap curve supported by the pool."], - type: { - defined: "CurveType", - }, - }, - ], - }, - }, - ], - types: [ - { - name: "TokenMultiplier", - docs: [ - "Multiplier for the pool token. Used to normalized token with different decimal into the same precision.", - ], - type: { - kind: "struct", - fields: [ - { - name: "tokenAMultiplier", - docs: ["Multiplier for token A of the pool."], - type: "u64", - }, - { - name: "tokenBMultiplier", - docs: ["Multiplier for token B of the pool."], - type: "u64", - }, - { - name: "precisionFactor", - docs: [ - "Record the highest token decimal in the pool. For example, Token A is 6 decimal, token B is 9 decimal. This will save value of 9.", - ], - type: "u8", - }, - ], - }, - }, - { - name: "PoolFees", - docs: ["Information regarding fee charges"], - type: { - kind: "struct", - fields: [ - { - name: "tradeFeeNumerator", - docs: [ - "Trade fees are extra token amounts that are held inside the token", - "accounts during a trade, making the value of liquidity tokens rise.", - "Trade fee numerator", - ], - type: "u64", - }, - { - name: "tradeFeeDenominator", - docs: ["Trade fee denominator"], - type: "u64", - }, - { - name: "protocolTradeFeeNumerator", - docs: [ - "Protocol trading fees are extra token amounts that are held inside the token", - "accounts during a trade, with the equivalent in pool tokens minted to", - "the protocol of the program.", - "Protocol trade fee numerator", - ], - type: "u64", - }, - { - name: "protocolTradeFeeDenominator", - docs: ["Protocol trade fee denominator"], - type: "u64", - }, - ], - }, - }, - { - name: "Depeg", - docs: ["Contains information for depeg pool"], - type: { - kind: "struct", - fields: [ - { - name: "baseVirtualPrice", - docs: ["The virtual price of staking / interest bearing token"], - type: "u64", - }, - { - name: "baseCacheUpdated", - docs: ["The virtual price of staking / interest bearing token"], - type: "u64", - }, - { - name: "depegType", - docs: ["Type of the depeg pool"], - type: { - defined: "DepegType", - }, - }, - ], - }, - }, - { - name: "ConfigParameters", - type: { - kind: "struct", - fields: [ - { - name: "tradeFeeNumerator", - type: "u64", - }, - { - name: "protocolTradeFeeNumerator", - type: "u64", - }, - { - name: "activationDurationInSlot", - type: "u64", - }, - { - name: "vaultConfigKey", - type: "publicKey", - }, - { - name: "index", - type: "u64", - }, - ], - }, - }, - { - name: "Padding", - docs: ["Padding for future pool fields"], - type: { - kind: "struct", - fields: [ - { - name: "padding0", - docs: ["Padding 0"], - type: { - array: ["u8", 15], - }, - }, - { - name: "padding", - docs: ["Padding 1"], - type: { - array: ["u128", 24], - }, - }, - ], - }, - }, - { - name: "AlphaVault", - type: { - kind: "struct", - fields: [ - { - name: "activationSlot", - docs: ["Activation slot"], - type: "u64", - }, - { - name: "whitelistedVault", - docs: ["Whitelisted vault to be able to buy pool before open slot"], - type: "publicKey", - }, - { - name: "poolCreator", - docs: [ - "Need to store pool creator in lauch pool, so they can modify liquidity before activation slot", - ], - type: "publicKey", - }, - ], - }, - }, - { - name: "RoundDirection", - docs: ["Rounding direction"], - type: { - kind: "enum", - variants: [ - { - name: "Floor", - }, - { - name: "Ceiling", - }, - ], - }, - }, - { - name: "TradeDirection", - docs: ["Trade (swap) direction"], - type: { - kind: "enum", - variants: [ - { - name: "AtoB", - }, - { - name: "BtoA", - }, - ], - }, - }, - { - name: "NewCurveType", - docs: ["Type of the swap curve"], - type: { - kind: "enum", - variants: [ - { - name: "ConstantProduct", - }, - { - name: "Stable", - fields: [ - { - name: "amp", - docs: ["Amplification coefficient"], - type: "u64", - }, - { - name: "token_multiplier", - docs: [ - "Multiplier for the pool token. Used to normalized token with different decimal into the same precision.", - ], - type: { - defined: "TokenMultiplier", - }, - }, - { - name: "depeg", - docs: [ - "Depeg pool information. Contains functions to allow token amount to be repeg using stake / interest bearing token virtual price", - ], - type: { - defined: "Depeg", - }, - }, - { - name: "last_amp_updated_timestamp", - docs: [ - "The last amp updated timestamp. Used to prevent update_curve_info called infinitely many times within a short period", - ], - type: "u64", - }, - ], - }, - { - name: "NewCurve", - fields: [ - { - name: "field_one", - type: "u64", - }, - { - name: "field_two", - type: "u64", - }, - ], - }, - ], - }, - }, - { - name: "CurveType", - docs: ["Type of the swap curve"], - type: { - kind: "enum", - variants: [ - { - name: "ConstantProduct", - }, - { - name: "Stable", - fields: [ - { - name: "amp", - docs: ["Amplification coefficient"], - type: "u64", - }, - { - name: "token_multiplier", - docs: [ - "Multiplier for the pool token. Used to normalized token with different decimal into the same precision.", - ], - type: { - defined: "TokenMultiplier", - }, - }, - { - name: "depeg", - docs: [ - "Depeg pool information. Contains functions to allow token amount to be repeg using stake / interest bearing token virtual price", - ], - type: { - defined: "Depeg", - }, - }, - { - name: "last_amp_updated_timestamp", - docs: [ - "The last amp updated timestamp. Used to prevent update_curve_info called infinitely many times within a short period", - ], - type: "u64", - }, - ], - }, - ], - }, - }, - { - name: "DepegType", - docs: ["Type of depeg pool"], - type: { - kind: "enum", - variants: [ - { - name: "None", - }, - { - name: "Marinade", - }, - { - name: "Lido", - }, - { - name: "SplStake", - }, - ], - }, - }, - { - name: "Rounding", - docs: ["Round up, down"], - type: { - kind: "enum", - variants: [ - { - name: "Up", - }, - { - name: "Down", - }, - ], - }, - }, - { - name: "PoolType", - docs: ["Pool type"], - type: { - kind: "enum", - variants: [ - { - name: "Permissioned", - }, - { - name: "Permissionless", - }, - ], - }, - }, - ], - events: [ - { - name: "AddLiquidity", - fields: [ - { - name: "lpMintAmount", - type: "u64", - index: false, - }, - { - name: "tokenAAmount", - type: "u64", - index: false, - }, - { - name: "tokenBAmount", - type: "u64", - index: false, - }, - ], - }, - { - name: "RemoveLiquidity", - fields: [ - { - name: "lpUnmintAmount", - type: "u64", - index: false, - }, - { - name: "tokenAOutAmount", - type: "u64", - index: false, - }, - { - name: "tokenBOutAmount", - type: "u64", - index: false, - }, - ], - }, - { - name: "BootstrapLiquidity", - fields: [ - { - name: "lpMintAmount", - type: "u64", - index: false, - }, - { - name: "tokenAAmount", - type: "u64", - index: false, - }, - { - name: "tokenBAmount", - type: "u64", - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "Swap", - fields: [ - { - name: "inAmount", - type: "u64", - index: false, - }, - { - name: "outAmount", - type: "u64", - index: false, - }, - { - name: "tradeFee", - type: "u64", - index: false, - }, - { - name: "protocolFee", - type: "u64", - index: false, - }, - { - name: "hostFee", - type: "u64", - index: false, - }, - ], - }, - { - name: "SetPoolFees", - fields: [ - { - name: "tradeFeeNumerator", - type: "u64", - index: false, - }, - { - name: "tradeFeeDenominator", - type: "u64", - index: false, - }, - { - name: "protocolTradeFeeNumerator", - type: "u64", - index: false, - }, - { - name: "protocolTradeFeeDenominator", - type: "u64", - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "PoolInfo", - fields: [ - { - name: "tokenAAmount", - type: "u64", - index: false, - }, - { - name: "tokenBAmount", - type: "u64", - index: false, - }, - { - name: "virtualPrice", - type: "f64", - index: false, - }, - { - name: "currentTimestamp", - type: "u64", - index: false, - }, - ], - }, - { - name: "TransferAdmin", - fields: [ - { - name: "admin", - type: "publicKey", - index: false, - }, - { - name: "newAdmin", - type: "publicKey", - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "OverrideCurveParam", - fields: [ - { - name: "newAmp", - type: "u64", - index: false, - }, - { - name: "updatedTimestamp", - type: "u64", - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "PoolCreated", - fields: [ - { - name: "lpMint", - type: "publicKey", - index: false, - }, - { - name: "tokenAMint", - type: "publicKey", - index: false, - }, - { - name: "tokenBMint", - type: "publicKey", - index: false, - }, - { - name: "poolType", - type: { - defined: "PoolType", - }, - index: false, - }, - { - name: "pool", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "PoolEnabled", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "enabled", - type: "bool", - index: false, - }, - ], - }, - { - name: "MigrateFeeAccount", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "newAdminTokenAFee", - type: "publicKey", - index: false, - }, - { - name: "newAdminTokenBFee", - type: "publicKey", - index: false, - }, - { - name: "tokenAAmount", - type: "u64", - index: false, - }, - { - name: "tokenBAmount", - type: "u64", - index: false, - }, - ], - }, - { - name: "CreateLockEscrow", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "owner", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "Lock", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "owner", - type: "publicKey", - index: false, - }, - { - name: "amount", - type: "u64", - index: false, - }, - ], - }, - { - name: "ClaimFee", - fields: [ - { - name: "pool", - type: "publicKey", - index: false, - }, - { - name: "owner", - type: "publicKey", - index: false, - }, - { - name: "amount", - type: "u64", - index: false, - }, - { - name: "aFee", - type: "u64", - index: false, - }, - { - name: "bFee", - type: "u64", - index: false, - }, - ], - }, - { - name: "CreateConfig", - fields: [ - { - name: "tradeFeeNumerator", - type: "u64", - index: false, - }, - { - name: "protocolTradeFeeNumerator", - type: "u64", - index: false, - }, - { - name: "config", - type: "publicKey", - index: false, - }, - ], - }, - { - name: "CloseConfig", - fields: [ - { - name: "config", - type: "publicKey", - index: false, - }, - ], - }, - ], - errors: [ - { - code: 6000, - name: "MathOverflow", - msg: "Math operation overflow", - }, - { - code: 6001, - name: "InvalidFee", - msg: "Invalid fee setup", - }, - { - code: 6002, - name: "InvalidInvariant", - msg: "Invalid invariant d", - }, - { - code: 6003, - name: "FeeCalculationFailure", - msg: "Fee calculation failure", - }, - { - code: 6004, - name: "ExceededSlippage", - msg: "Exceeded slippage tolerance", - }, - { - code: 6005, - name: "InvalidCalculation", - msg: "Invalid curve calculation", - }, - { - code: 6006, - name: "ZeroTradingTokens", - msg: "Given pool token amount results in zero trading tokens", - }, - { - code: 6007, - name: "ConversionError", - msg: "Math conversion overflow", - }, - { - code: 6008, - name: "FaultyLpMint", - msg: "LP mint authority must be 'A' vault lp, without freeze authority, and 0 supply", - }, - { - code: 6009, - name: "MismatchedTokenMint", - msg: "Token mint mismatched", - }, - { - code: 6010, - name: "MismatchedLpMint", - msg: "LP mint mismatched", - }, - { - code: 6011, - name: "MismatchedOwner", - msg: "Invalid lp token owner", - }, - { - code: 6012, - name: "InvalidVaultAccount", - msg: "Invalid vault account", - }, - { - code: 6013, - name: "InvalidVaultLpAccount", - msg: "Invalid vault lp account", - }, - { - code: 6014, - name: "InvalidPoolLpMintAccount", - msg: "Invalid pool lp mint account", - }, - { - code: 6015, - name: "PoolDisabled", - msg: "Pool disabled", - }, - { - code: 6016, - name: "InvalidAdminAccount", - msg: "Invalid admin account", - }, - { - code: 6017, - name: "InvalidProtocolFeeAccount", - msg: "Invalid protocol fee account", - }, - { - code: 6018, - name: "SameAdminAccount", - msg: "Same admin account", - }, - { - code: 6019, - name: "IdenticalSourceDestination", - msg: "Identical user source and destination token account", - }, - { - code: 6020, - name: "ApyCalculationError", - msg: "Apy calculation error", - }, - { - code: 6021, - name: "InsufficientSnapshot", - msg: "Insufficient virtual price snapshot", - }, - { - code: 6022, - name: "NonUpdatableCurve", - msg: "Current curve is non-updatable", - }, - { - code: 6023, - name: "MisMatchedCurve", - msg: "New curve is mismatched with old curve", - }, - { - code: 6024, - name: "InvalidAmplification", - msg: "Amplification is invalid", - }, - { - code: 6025, - name: "UnsupportedOperation", - msg: "Operation is not supported", - }, - { - code: 6026, - name: "ExceedMaxAChanges", - msg: "Exceed max amplification changes", - }, - { - code: 6027, - name: "InvalidRemainingAccountsLen", - msg: "Invalid remaining accounts length", - }, - { - code: 6028, - name: "InvalidRemainingAccounts", - msg: "Invalid remaining account", - }, - { - code: 6029, - name: "MismatchedDepegMint", - msg: "Token mint B doesn't matches depeg type token mint", - }, - { - code: 6030, - name: "InvalidApyAccount", - msg: "Invalid APY account", - }, - { - code: 6031, - name: "InvalidTokenMultiplier", - msg: "Invalid token multiplier", - }, - { - code: 6032, - name: "InvalidDepegInformation", - msg: "Invalid depeg information", - }, - { - code: 6033, - name: "UpdateTimeConstraint", - msg: "Update time constraint violated", - }, - { - code: 6034, - name: "ExceedMaxFeeBps", - msg: "Exceeded max fee bps", - }, - { - code: 6035, - name: "InvalidAdmin", - msg: "Invalid admin", - }, - { - code: 6036, - name: "PoolIsNotPermissioned", - msg: "Pool is not permissioned", - }, - { - code: 6037, - name: "InvalidDepositAmount", - msg: "Invalid deposit amount", - }, - { - code: 6038, - name: "InvalidFeeOwner", - msg: "Invalid fee owner", - }, - { - code: 6039, - name: "NonDepletedPool", - msg: "Pool is not depleted", - }, - { - code: 6040, - name: "AmountNotPeg", - msg: "Token amount is not 1:1", - }, - { - code: 6041, - name: "AmountIsZero", - msg: "Amount is zero", - }, - { - code: 6042, - name: "TypeCastFailed", - msg: "Type cast error", - }, - { - code: 6043, - name: "AmountIsNotEnough", - msg: "Amount is not enough", - }, - { - code: 6044, - name: "InvalidActivationSlotInDuration", - msg: "Invalid activation slot in duration", - }, - ], -}; - -module.exports = { Amm, IDL }; diff --git a/src/Trading_dev/dex/meteora/swap.js b/src/Trading_dev/dex/meteora/swap.js deleted file mode 100644 index 317142d..0000000 --- a/src/Trading_dev/dex/meteora/swap.js +++ /dev/null @@ -1,26 +0,0 @@ -const DLMM = require('@meteora-ag/dlmm'); -const { PublicKey, Keypair } = require("@solana/web3.js"); -const BN = require("bn.js"); -const { Wallet, AnchorProvider, Program } = require("@project-serum/anchor"); -const { connection, wallet } = require("../../../helpers/config.js"); -const {PROGRAM_ID} = require("./constants.js") -const {fetchDLMMPoolId} = require("./fetch-pool.js") - -console.log("PROGRAM_ID", PROGRAM_ID); -const ourWallet = new Wallet(wallet); -const provider = new AnchorProvider(connection, Wallet, { - commitment: "confirmed", -}); - -async function swap(tokenAddress){ - const poolId = await fetchDLMMPoolId(tokenAddress); - const dlmmPool = await DLMM.create(connection, new PublicKey(poolId)); - console.log(dlmmPool); - - -} -async function main(){ - const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; - await swap(tokenAddress); -} -main(); \ No newline at end of file diff --git a/src/Trading_dev/dex/orca/index.js b/src/Trading_dev/dex/orca/index.js deleted file mode 100644 index f23e23e..0000000 --- a/src/Trading_dev/dex/orca/index.js +++ /dev/null @@ -1,32 +0,0 @@ -const { PublicKey } = require("@solana/web3.js"); -const { AnchorProvider } = require("@coral-xyz/anchor"); -const { DecimalUtil, Percentage } = require("@orca-so/common-sdk"); -const { - WhirlpoolContext, - buildWhirlpoolClient, - ORCA_WHIRLPOOL_PROGRAM_ID, - PDAUtil, - swapQuoteByInputToken, - IGNORE_CACHE, -} = require("@orca-so/whirlpools-sdk"); -const Decimal = require("decimal.js"); -const { - connection, - dev_connection, - wallet, -} = require("../../../helpers/config"); - -async function main() { - const provider = new AnchorProvider(connection, wallet, { - commitment: "confirmed", - }); - const ctx = WhirlpoolContext.withProvider( - provider, - ORCA_WHIRLPOOL_PROGRAM_ID - ); - const client = buildWhirlpoolClient(ctx); - console.log("RPC endpoint: ", ctx.connection.rpcEndpoint); - console.log("Wallet public key: ", ctx.wallet.publicKey.toString()); -} - -main(); diff --git a/src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-sell.js b/src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-sell.js deleted file mode 100644 index 0ade9fd..0000000 --- a/src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-sell.js +++ /dev/null @@ -1,111 +0,0 @@ -const { - PublicKey, -} = require("@solana/web3.js"); -const { - TOKEN_PROGRAM_ID, - AccountLayout, -} = require("@solana/spl-token"); -const fs = require('fs'); -const path = require('path'); -const { wallet, connection, smart_money_wallet } = require("../../../helpers/config"); -//const { buy } = require("../../dex/jupiter/swap/buy-helper"); -//const { sell } = require("../../dex/jupiter/swap/sell-helper"); -const {sell} = require("../../../raydium/sell_helper") - -//const {swap} = require("../../../Pool/swap") -var current_trader_wallet_state = {}; -var current_our_wallet_state = {}; -// [usdc, sol, usdt, wsol] -const wsol = "So11111111111111111111111111111111111111112" -const quoteToken = [ - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "SOL", - "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", - wsol, -]; -const boughtTokensPath = path.join(__dirname, 'bought-tokens.json'); -let boughtTokens = JSON.parse(fs.readFileSync(boughtTokensPath, 'utf8')); -function saveToJson() { - fs.writeFileSync(boughtTokensPath, JSON.stringify(boughtTokens, null, 2)); -} -/** -* Retrieves the state of a wallet by querying the Solana blockchain. -* @param {string} wallet_address - The address of the wallet to retrieve the state for. -* @returns {Object} - An object containing the token balances of the wallet and the SOL balance. -*/ -async function retriveWalletState(wallet_address) { - const filters = [ - { - dataSize: 165, //size of account (bytes) - }, - { - memcmp: { - offset: 32, //location of our query in the account (bytes) - bytes: wallet_address, //our search criteria, a base58 encoded string - }, - }, - ]; - const accounts = await connection.getParsedProgramAccounts( - TOKEN_PROGRAM_ID, //new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") - { filters: filters } - ); - let results = {}; - const solBalance = await connection.getBalance(new PublicKey(wallet_address)); - accounts.forEach((account, i) => { - //Parse the account data - const parsedAccountInfo = account.account.data; - const mintAddress = parsedAccountInfo["parsed"]["info"]["mint"]; - const tokenBalance = - parsedAccountInfo["parsed"]["info"]["tokenAmount"]["uiAmount"]; - - results[mintAddress] = tokenBalance; - results["SOL"] = solBalance / 10 ** 9; - }); - return results; -} -async function copy_sell(address){ - // 400 ms to check the wallet state - // if token we have but trader doesn't have, sell it - // that's it - let soldTokens = []; - let flag = false; - let possible_cant_sell_token = null - try{ - if(boughtTokens.length > 0){ - for(let i=0; i !soldTokens.includes(token)); - // Save the updated list back to the JSON file - saveToJson(); - - } - -} -async function main(){ -while(true){ - boughtTokens = JSON.parse(fs.readFileSync(boughtTokensPath, 'utf8')); - await copy_sell(smart_money_wallet); - - await new Promise((resolve) => setTimeout(resolve, 2500)); -} -} -main(); -module.exports = {copy_sell} \ No newline at end of file diff --git a/src/dexscreener/index.ts b/src/dexscreener/index.ts new file mode 100644 index 0000000..4a99aab --- /dev/null +++ b/src/dexscreener/index.ts @@ -0,0 +1 @@ +export * from "./info"; \ No newline at end of file diff --git a/src/dexscreener/info.ts b/src/dexscreener/info.ts new file mode 100644 index 0000000..5a8f5d6 --- /dev/null +++ b/src/dexscreener/info.ts @@ -0,0 +1,102 @@ +import {wsol} from "../helpers/config"; + +export async function getInfoFromDexscreener(tokenAddress: string) { + let data: any = {}; + + const url = "https://api.dexscreener.com/latest/dex/tokens/" + tokenAddress; + let res = { + pairAge: "", + name: "", + address: "", + priceInUSD: 0, + marketCap: 0, + dexscreenerURL: "", + twitterURL: "", + telegramURL: "", + websiteURL: "", + buyers5m: 0, + buyers1h: 0, + buyers6h: 0, + buyers24h: 0, + volume5m: 0, + volume1h: 0, + volume6h: 0, + volume24h: 0, + liquidityInSOL: 0, + poolId: "", + }; + try { + let response: any = await fetch(url); + while ( + response === undefined || + response === null || + response.status !== 200 + ) { + console.log("retrying"); + response = await fetch(url); + if (response.Response.statusText === "Too Many Requests") + await new Promise((resolve) => setTimeout(resolve, 2000)); + } + data = await response.json(); + //console.log(data); + let raydiumPair; + + // find the first pair in raydium + for (const pair of data.pairs) { + if (pair.dexId === "raydium") { + raydiumPair = pair; + break; + } + } + //console.log(raydiumPair); + const info = raydiumPair.info; + + const createTimestamp = raydiumPair.pairCreatedAt; + res.address = tokenAddress; + + const pairAgeTimestamp = Date.now() - createTimestamp; + // convert pair age to day and hour format + const days = Math.floor(pairAgeTimestamp / (1000 * 60 * 60 * 24)); + const hours = Math.floor( + (pairAgeTimestamp % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60) + ); + const mins = Math.floor( + (pairAgeTimestamp % (1000 * 60 * 60)) / (1000 * 60) + ); + const seconds = Math.floor((pairAgeTimestamp % (1000 * 60)) / 1000); + res.pairAge = days + "d " + hours + "h " + mins + "m " + seconds + "s"; + if(raydiumPair.baseToken.address === wsol) res.name = raydiumPair.quoteToken.name; + else res.name = raydiumPair.baseToken.name; + // res.name = await getTokenName(tokenAddress); + res.poolId = raydiumPair.pairAddress; + res.marketCap = raydiumPair.marketCap; + res.priceInUSD = raydiumPair.priceUsd; + res.dexscreenerURL = raydiumPair.url; + res.volume5m = raydiumPair.volume.m5; + res.volume1h = raydiumPair.volume.h1; + res.volume6h = raydiumPair.volume.h6; + res.volume24h = raydiumPair.volume.h24; + res.buyers5m = raydiumPair.txns.m5.buys; + res.buyers1h = raydiumPair.txns.h1.buys; + res.buyers6h = raydiumPair.txns.h6.buys; + res.buyers24h = raydiumPair.txns.h24.buys; + if (raydiumPair.liquidity.base > raydiumPair.liquidity.quote) + res.liquidityInSOL = raydiumPair.liquidity.quote; + else res.liquidityInSOL = raydiumPair.liquidity.base; + if (info !== undefined && info.socials.length > 0) { + for (const site of info.socials) { + if (site.type === "twitter") res.twitterURL = site.url; + if (site.type === "telegram") res.telegramURL = site.url; + } + } + if (info !== undefined && info.websites.length > 0) + res.websiteURL = info.websites[0].url; + //console.log(res); + return res; + } catch (error) { + console.log(error); + return res; + } +} + +//getInfoFromDexscreener("4cfyJweLzYvvPAjztjWs8QpzXqSuHsY572EwsebWpump"); diff --git a/src/Memecoin_dev/bundled_launcher/index.js b/src/grpc_intro_projects/README.md similarity index 100% rename from src/Memecoin_dev/bundled_launcher/index.js rename to src/grpc_intro_projects/README.md diff --git a/src/Memecoin_dev/sniping_dev/index.js b/src/grpc_intro_projects/grpc-jupiter-trades/README.md similarity index 100% rename from src/Memecoin_dev/sniping_dev/index.js rename to src/grpc_intro_projects/grpc-jupiter-trades/README.md diff --git a/src/grpc_intro_projects/grpc-jupiter-trades/src/constants/constants.ts b/src/grpc_intro_projects/grpc-jupiter-trades/src/constants/constants.ts new file mode 100644 index 0000000..4b1c18d --- /dev/null +++ b/src/grpc_intro_projects/grpc-jupiter-trades/src/constants/constants.ts @@ -0,0 +1,11 @@ +import { logger, retrieveEnvVariable } from "../../../../utils"; +import { + Commitment + } from "@solana/web3.js"; +export const NETWORK = 'mainnet-beta'; +export const COMMITMENT_LEVEL: Commitment = retrieveEnvVariable('COMMITMENT_LEVEL', logger) as Commitment; +export const RPC_ENDPOINT = retrieveEnvVariable('MAINNET_ENDPOINT', logger); +export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable('WS_MAINNET_ENDPOINT', logger); +export const GRPC_XTOKEN = retrieveEnvVariable('GRPC_XTOKEN', logger); +export const GRPC_URL = retrieveEnvVariable('GRPC_URL', logger); +export const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger); \ No newline at end of file diff --git a/src/grpc_intro_projects/grpc-jupiter-trades/src/constants/index.ts b/src/grpc_intro_projects/grpc-jupiter-trades/src/constants/index.ts new file mode 100644 index 0000000..c7582ff --- /dev/null +++ b/src/grpc_intro_projects/grpc-jupiter-trades/src/constants/index.ts @@ -0,0 +1 @@ +export * from "./constants" \ No newline at end of file diff --git a/src/Trading_dev/dex/meteora/buy.js b/src/grpc_intro_projects/grpc-jupiter-trades/src/streaming/stream-trades.ts similarity index 100% rename from src/Trading_dev/dex/meteora/buy.js rename to src/grpc_intro_projects/grpc-jupiter-trades/src/streaming/stream-trades.ts diff --git a/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/index.ts b/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/index.ts new file mode 100644 index 0000000..d90cdf8 --- /dev/null +++ b/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './utils'; +export * from './logger'; \ No newline at end of file diff --git a/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/logger.ts b/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/logger.ts new file mode 100644 index 0000000..393068e --- /dev/null +++ b/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/logger.ts @@ -0,0 +1,17 @@ +import pino from "pino"; + +const transport = pino.transport({ + target: 'pino-pretty', +}); + +export const logger = pino( + { + level: 'info', + redact: ['poolKeys'], + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport, +); diff --git a/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/utils.ts b/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/utils.ts new file mode 100644 index 0000000..0d22abd --- /dev/null +++ b/src/grpc_intro_projects/grpc-jupiter-trades/src/utils/utils.ts @@ -0,0 +1,70 @@ +import { Logger } from 'pino'; +import dotenv from 'dotenv'; +import fs from "fs"; +import { Keypair, LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { Connection } from '@solana/web3.js'; +import { PublicKey } from '@solana/web3.js'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +dotenv.config(); + +export const retrieveEnvVariable = (variableName: string, logger: Logger) => { + const variable = process.env[variableName] || ''; + if (!variable) { + logger.error(`${variableName} is not set`); + process.exit(1); + } + return variable; +}; + +export function getKeypairByJsonPath(jsonPath: string): any { + try { + const keypairJson = fs.readFileSync(jsonPath, "utf-8"); + const data = JSON.parse(keypairJson); + const mintKeypair = Keypair.fromSecretKey(Uint8Array.from(data)); + return mintKeypair + } catch (e) { + console.log(e); + } +} +export async function printSOLBalance ( + connection: Connection, + pubKey: PublicKey, + info = "" +) { + const balance = await connection.getBalance(pubKey); + console.log( + `${info ? info + " " : ""}${pubKey.toBase58()}:`, + balance / LAMPORTS_PER_SOL, + `SOL` + ); +}; + +export async function getSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + pubKey: PublicKey, + allowOffCurve = false +) { + try { + let ata = getAssociatedTokenAddressSync(mintAddress, pubKey, allowOffCurve); + const balance = await connection.getTokenAccountBalance(ata, "processed"); + return balance.value.uiAmount; + } catch (e) {} + return null; +}; +async function printSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + user: PublicKey, + info = "" +) { + const balance = await getSPLBalance(connection, mintAddress, user); + if (balance === null) { + console.log( + `${info ? info + " " : ""}${user.toBase58()}:`, + "No Account Found" + ); + } else { + console.log(`${info ? info + " " : ""}${user.toBase58()}:`, balance); + } +}; \ No newline at end of file diff --git a/src/Trading_dev/dex/meteora/index.js b/src/grpc_intro_projects/grpc-pool-price/README.md similarity index 100% rename from src/Trading_dev/dex/meteora/index.js rename to src/grpc_intro_projects/grpc-pool-price/README.md diff --git a/src/grpc_intro_projects/grpc-pool-price/src/constants/constants.ts b/src/grpc_intro_projects/grpc-pool-price/src/constants/constants.ts new file mode 100644 index 0000000..007eedb --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/constants/constants.ts @@ -0,0 +1,50 @@ +import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; +import { logger, retrieveEnvVariable } from "../../../../utils"; +import { + Currency, + Token, + TOKEN_PROGRAM_ID, +} from "@raydium-io/raydium-sdk"; +import { Commitment, Connection, Keypair, PublicKey } from "@solana/web3.js"; +export const NETWORK = "mainnet-beta"; +export const COMMITMENT_LEVEL: Commitment = retrieveEnvVariable( + "COMMITMENT_LEVEL", + logger +) as Commitment; +export const RPC_ENDPOINT = retrieveEnvVariable("MAINNET_ENDPOINT", logger); +export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable( + "WS_MAINNET_ENDPOINT", + logger +); +export const GRPC_XTOKEN = retrieveEnvVariable("GRPC_XTOKEN", logger); +export const LOG_LEVEL = retrieveEnvVariable("LOG_LEVEL", logger); +export const GRPC_URL = retrieveEnvVariable("GRPC_URL", logger); +export const PRIVATE_KEY = retrieveEnvVariable("PRIVATE_KEY", logger); +export const JITO_TIPS = retrieveEnvVariable("JITO_FEE", logger); +export const connection = new Connection(RPC_ENDPOINT, "processed"); +export const wallet = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY)); +export const wsol = "So11111111111111111111111111111111111111112"; +const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; +export const quoteToken = [ + usdc, // USDC + "SOL", // SOL + "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", // USDT + wsol, // WSOL +]; +export const DEFAULT_TOKEN = { + SOL: new Currency(9, "SOL", "SOL"), + WSOL: new Token( + TOKEN_PROGRAM_ID, + new PublicKey("So11111111111111111111111111111111111111112"), + 9, + "WSOL", + "WSOL" + ), + USDC: new Token( + TOKEN_PROGRAM_ID, + new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), + 6, + "USDC", + "USDC" + ), +}; diff --git a/src/grpc_intro_projects/grpc-pool-price/src/constants/index.ts b/src/grpc_intro_projects/grpc-pool-price/src/constants/index.ts new file mode 100644 index 0000000..c7582ff --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/constants/index.ts @@ -0,0 +1 @@ +export * from "./constants" \ No newline at end of file diff --git a/src/grpc_intro_projects/grpc-pool-price/src/data/index.ts b/src/grpc_intro_projects/grpc-pool-price/src/data/index.ts new file mode 100644 index 0000000..037b90c --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/data/index.ts @@ -0,0 +1 @@ +export * from "./utils"; \ No newline at end of file diff --git a/src/grpc_intro_projects/grpc-pool-price/src/data/tokens.txt b/src/grpc_intro_projects/grpc-pool-price/src/data/tokens.txt new file mode 100644 index 0000000..17cb011 --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/data/tokens.txt @@ -0,0 +1,6 @@ +EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm +7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr +ukHH6c7mMyiWCf1b9pnWe25TSpkDDt3H5pQZgZ74J82 +63LfDmNb3MQ8mw9MtZ2To9bEA2M71kZUUGq5tiJxcqj9 +5z3EqYQo9HiCEs3R84RCDMu2n7anpDMxRhdK8PSWmrRC +6ogzHhzdrQr9Pgv6hZ2MNze7UrzBMAFyBBWUYp1Fhitx \ No newline at end of file diff --git a/src/grpc_intro_projects/grpc-pool-price/src/data/utils.ts b/src/grpc_intro_projects/grpc-pool-price/src/data/utils.ts new file mode 100644 index 0000000..36afcf5 --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/data/utils.ts @@ -0,0 +1,19 @@ +import fs from 'fs/promises'; +import path from 'path'; +import {fetchAMMPoolId} from "../../../../raydium/Pool/fetch_pool"; +const tokens_path = path.join(__dirname, "tokens.txt"); +export async function fetchPoolsFromTokens(){ + let res:string[] = []; + const fileContent = await fs.readFile(tokens_path, 'utf8'); + + // Split the file content into an array of addresses + const tokensList = fileContent.trim().split('\n'); + for(const token of tokensList){ + if(token==="") continue; + const pool = await fetchAMMPoolId(token); + res.push(pool); + } + return res; +} + + diff --git a/src/grpc_intro_projects/grpc-pool-price/src/streaming/grpc-requests-type.ts b/src/grpc_intro_projects/grpc-pool-price/src/streaming/grpc-requests-type.ts new file mode 100644 index 0000000..e537e3f --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/streaming/grpc-requests-type.ts @@ -0,0 +1,46 @@ +import { + CommitmentLevel, + SubscribeRequest, + } from "@triton-one/yellowstone-grpc"; +import { req } from "pino-std-serializers"; +const RaydiumProgram = "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8" +const RaydiumRoute = "routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS" +const RaydiumCAMM = "CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK" +const tokenAccountProgram = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" +export async function createSubscribePoolsRequest(pools: string[]) { + let request: any = null; + request = { + slots: {}, + accounts: {}, + transactions: { + pumpdotfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: [...pools], + accountExclude: [], + accountRequired: [RaydiumProgram], + }, + }, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + commitment: CommitmentLevel.PROCESSED, // Subscribe to processed blocks for the fastest updates + entry: {}, + }; + return request; +} +export async function createClearAllSubscriptionsRequest() { + const request = { + "slots": {}, + "accounts": {}, + "transactions": {}, + "blocks": {}, + "blocksMeta": {}, + "accountsDataSlice": [] + }; + return request; +} + + diff --git a/src/grpc_intro_projects/grpc-pool-price/src/streaming/main.ts b/src/grpc_intro_projects/grpc-pool-price/src/streaming/main.ts new file mode 100644 index 0000000..5e6bf4c --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/streaming/main.ts @@ -0,0 +1,51 @@ +import {streamPoolsPrice} from "./stream-price" +import { logger } from "../../../../helpers/logger"; +import { fork } from "child_process"; +import bs58 from "bs58"; +import {fetchPoolsFromTokens} from "../data" +import path from "path"; +import { program } from "commander"; +import { fetchAMMPoolId } from "../../../../raydium/Pool/fetch_pool"; +let oneToken = ""; +program + .option("--token ", "Specify the token address to copy") + .option("-h, --help", "display help for command") + .action((options: any) => { + if (options.help) { + logger.info("ts-node main --token "); + process.exit(0); + } + if (options.token) { + oneToken = options.token; + } + }); +program.parse(); + +async function snipe() { + // show the options + if(oneToken !== ""){ + logger.info(`We are going to track the price of ${oneToken}`); + }else{ + logger.info(`We are going to track the price of all the tokens from src/data/tokens.txt`); + } + + let pools = []; + if(oneToken !== ""){ + const pool = await fetchAMMPoolId(oneToken); + pools.push(pool); + }else{ + pools = await fetchPoolsFromTokens(); + } + // initialize the bot + try { + // Start copy_buy in a separate process + await streamPoolsPrice(pools); + } catch (e) { + logger.error(`error when streaming ${e}`); + logger.info("Retrying in 1 second"); + await new Promise((resolve) => setTimeout(resolve, 1000)); + await snipe(); + } +} + +snipe(); diff --git a/src/grpc_intro_projects/grpc-pool-price/src/streaming/stream-price.ts b/src/grpc_intro_projects/grpc-pool-price/src/streaming/stream-price.ts new file mode 100644 index 0000000..2c60726 --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/streaming/stream-price.ts @@ -0,0 +1,93 @@ +import pino from "pino"; +import Client from "@triton-one/yellowstone-grpc"; +import { PublicKey } from "@solana/web3.js"; +import bs58 from "bs58"; +import { + createClearAllSubscriptionsRequest, + createSubscribePoolsRequest, +} from "./grpc-requests-type"; +import { handleSubscribe, wsol } from "./utils"; +import { getSPLBalance, retriveWalletState } from "../../../../utils"; +import { connection, wallet, GRPC_XTOKEN, GRPC_URL } from "../constants/constants"; +let trader_balance_wallet:any = {}; +let targetTrader = ""; +export const raydium_authority = "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"; // ***it represent the person who extract/put the sol/token to the pool for every raydium swap txn*** +const client = new Client( + GRPC_URL, + GRPC_XTOKEN, + { + "grpc.max_receive_message_length": 64 * 1024 * 1024, // 64MiB + } +); //grpc endpoint +const transport = pino.transport({ + target: "pino-pretty", +}); + +export const logger = pino( + { + level: "info", + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport +); +// Array to store Jito leaders for current epoch + +(async () => { + const version = await client.getVersion(); // gets the version information + logger.info(version); +})(); + +export async function checkPoolPrice(data: any) { + const preTokenBalances = data.transaction.transaction.meta.preTokenBalances; + const postTokenBalances = data.transaction.transaction.meta.postTokenBalances; + const latestBlockhash = await connection.getLatestBlockhash("processed"); + let targetToken = "", postPoolSOL=0, postPoolToken=0, prePoolSOL=0, prePoolToken=0, side = ""; + // look for the token that the trader is buying or selling + for (const account of preTokenBalances) { + if (targetToken !== "" && prePoolSOL !== 0 && prePoolToken!==0) break; // make sure we get the target token and pool sol balances and trader address only + if (account.owner === raydium_authority && account.mint !== wsol) targetToken = account.mint; + if (account.owner === raydium_authority && account.mint === wsol) { + prePoolSOL = account.uiTokenAmount.uiAmount; + } + if (account.owner === raydium_authority && account.mint !== wsol) { + prePoolToken = account.uiTokenAmount.uiAmount; + } + } + for (const account of postTokenBalances) { + if (postPoolSOL !== 0 && postPoolToken!==0) break; // make sure we get the target token and pool sol balances and trader address only + if (account.owner === raydium_authority && account.mint !== wsol ) targetToken = account.mint; + if (account.owner === raydium_authority && account.mint === wsol) { + postPoolSOL = account.uiTokenAmount.uiAmount; + } + if (account.owner === raydium_authority && account.mint !== wsol) { + postPoolToken = account.uiTokenAmount.uiAmount; + } + } + if (targetToken === "") return; + logger.info(`The current price in SOL of ${targetToken} is ${postPoolSOL/postPoolToken}`) + + + +} + +export async function streamPoolsPrice(pools:string[]) { + try { + + const stream = await client.subscribe(); + const r1 = await createSubscribePoolsRequest(pools); + handleSubscribe(stream, r1); + stream.on("data", (data) => { + // receive an update when trader makes a transaction + if (data.transaction !== undefined) { + logger.info(`Current slot: ${data.transaction.slot}`); + checkPoolPrice(data); + } + }); + } catch (e) { + logger.error(e); + throw e; + } +} diff --git a/src/grpc_intro_projects/grpc-pool-price/src/streaming/utils.ts b/src/grpc_intro_projects/grpc-pool-price/src/streaming/utils.ts new file mode 100644 index 0000000..fe474f5 --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/streaming/utils.ts @@ -0,0 +1,73 @@ +import { + CommitmentLevel, + SubscribeRequest, +} from "@triton-one/yellowstone-grpc"; +import Client from "@triton-one/yellowstone-grpc"; +import { logger } from "../../../../utils"; +const PING_INTERVAL_MS = 100_000; +export const wsol = "So11111111111111111111111111111111111111112"; +export async function handleSubscribe( + client_stream: any, + args: SubscribeRequest +) { + try { + const streamClosed = new Promise((resolve, reject) => { + client_stream.on("error", (error:any) => { + console.log("ERROR", error); + reject(error); + client_stream.end(); + }); + client_stream.on("end", () => { + resolve(); + }); + client_stream.on("close", () => { + resolve(); + }); + }); + + // Send subscribe request + await new Promise((resolve, reject) => { + client_stream.write(args, (err: any) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); + // Send pings every 5s to keep the connection open + const pingRequest: SubscribeRequest = { + ping: { id: 1 }, + // Required, but unused arguments + accounts: {}, + accountsDataSlice: [], + transactions: {}, + blocks: {}, + blocksMeta: {}, + entry: {}, + slots: {}, + }; + setInterval(async () => { + await new Promise((resolve, reject) => { + client_stream.write(pingRequest, (err:any) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); + }, PING_INTERVAL_MS); + + await streamClosed; + } catch (e) { + logger.error(e); + throw e; + } +} diff --git a/src/grpc_intro_projects/grpc-pool-price/src/utils/index.ts b/src/grpc_intro_projects/grpc-pool-price/src/utils/index.ts new file mode 100644 index 0000000..d90cdf8 --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './utils'; +export * from './logger'; \ No newline at end of file diff --git a/src/grpc_intro_projects/grpc-pool-price/src/utils/logger.ts b/src/grpc_intro_projects/grpc-pool-price/src/utils/logger.ts new file mode 100644 index 0000000..393068e --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/utils/logger.ts @@ -0,0 +1,17 @@ +import pino from "pino"; + +const transport = pino.transport({ + target: 'pino-pretty', +}); + +export const logger = pino( + { + level: 'info', + redact: ['poolKeys'], + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport, +); diff --git a/src/grpc_intro_projects/grpc-pool-price/src/utils/utils.ts b/src/grpc_intro_projects/grpc-pool-price/src/utils/utils.ts new file mode 100644 index 0000000..77a7c62 --- /dev/null +++ b/src/grpc_intro_projects/grpc-pool-price/src/utils/utils.ts @@ -0,0 +1,72 @@ +import { Logger } from 'pino'; +import dotenv from 'dotenv'; +import fs from "fs"; +import { Keypair, LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { Connection } from '@solana/web3.js'; +import { PublicKey } from '@solana/web3.js'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +dotenv.config(); + + +export const retrieveEnvVariable = (variableName: string, logger: Logger) => { + const variable = process.env[variableName] || ''; + if (!variable) { + logger.error(`${variableName} is not set`); + process.exit(1); + } + return variable; +}; + +export function getKeypairByJsonPath(jsonPath: string): any { + try { + const keypairJson = fs.readFileSync(jsonPath, "utf-8"); + const data = JSON.parse(keypairJson); + const mintKeypair = Keypair.fromSecretKey(Uint8Array.from(data)); + return mintKeypair + } catch (e) { + console.log(e); + } +} +export async function printSOLBalance ( + connection: Connection, + pubKey: PublicKey, + info = "" +) { + const balance = await connection.getBalance(pubKey); + console.log( + `${info ? info + " " : ""}${pubKey.toBase58()}:`, + balance / LAMPORTS_PER_SOL, + `SOL` + ); +}; + +export async function getSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + pubKey: PublicKey, + allowOffCurve = false +) { + try { + let ata = getAssociatedTokenAddressSync(mintAddress, pubKey, allowOffCurve); + const balance = await connection.getTokenAccountBalance(ata, "processed"); + return balance.value.uiAmount; + } catch (e) {} + return null; +}; +async function printSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + user: PublicKey, + info = "" +) { + const balance = await getSPLBalance(connection, mintAddress, user); + if (balance === null) { + console.log( + `${info ? info + " " : ""}${user.toBase58()}:`, + "No Account Found" + ); + } else { + console.log(`${info ? info + " " : ""}${user.toBase58()}:`, balance); + } +}; + diff --git a/src/Trading_dev/dex/meteora/sell.js b/src/grpc_intro_projects/grpc-raydium-trades/README.md similarity index 100% rename from src/Trading_dev/dex/meteora/sell.js rename to src/grpc_intro_projects/grpc-raydium-trades/README.md diff --git a/src/grpc_intro_projects/grpc-raydium-trades/src/constants/constants.ts b/src/grpc_intro_projects/grpc-raydium-trades/src/constants/constants.ts new file mode 100644 index 0000000..4b1c18d --- /dev/null +++ b/src/grpc_intro_projects/grpc-raydium-trades/src/constants/constants.ts @@ -0,0 +1,11 @@ +import { logger, retrieveEnvVariable } from "../../../../utils"; +import { + Commitment + } from "@solana/web3.js"; +export const NETWORK = 'mainnet-beta'; +export const COMMITMENT_LEVEL: Commitment = retrieveEnvVariable('COMMITMENT_LEVEL', logger) as Commitment; +export const RPC_ENDPOINT = retrieveEnvVariable('MAINNET_ENDPOINT', logger); +export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable('WS_MAINNET_ENDPOINT', logger); +export const GRPC_XTOKEN = retrieveEnvVariable('GRPC_XTOKEN', logger); +export const GRPC_URL = retrieveEnvVariable('GRPC_URL', logger); +export const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger); \ No newline at end of file diff --git a/src/grpc_intro_projects/grpc-raydium-trades/src/constants/index.ts b/src/grpc_intro_projects/grpc-raydium-trades/src/constants/index.ts new file mode 100644 index 0000000..c7582ff --- /dev/null +++ b/src/grpc_intro_projects/grpc-raydium-trades/src/constants/index.ts @@ -0,0 +1 @@ +export * from "./constants" \ No newline at end of file diff --git a/src/Trading_dev/dex/orca/buy.js b/src/grpc_intro_projects/grpc-raydium-trades/src/streaming/stream-trades.ts similarity index 100% rename from src/Trading_dev/dex/orca/buy.js rename to src/grpc_intro_projects/grpc-raydium-trades/src/streaming/stream-trades.ts diff --git a/src/grpc_intro_projects/grpc-raydium-trades/src/utils/index.ts b/src/grpc_intro_projects/grpc-raydium-trades/src/utils/index.ts new file mode 100644 index 0000000..d90cdf8 --- /dev/null +++ b/src/grpc_intro_projects/grpc-raydium-trades/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './utils'; +export * from './logger'; \ No newline at end of file diff --git a/src/grpc_intro_projects/grpc-raydium-trades/src/utils/logger.ts b/src/grpc_intro_projects/grpc-raydium-trades/src/utils/logger.ts new file mode 100644 index 0000000..393068e --- /dev/null +++ b/src/grpc_intro_projects/grpc-raydium-trades/src/utils/logger.ts @@ -0,0 +1,17 @@ +import pino from "pino"; + +const transport = pino.transport({ + target: 'pino-pretty', +}); + +export const logger = pino( + { + level: 'info', + redact: ['poolKeys'], + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport, +); diff --git a/src/grpc_intro_projects/grpc-raydium-trades/src/utils/utils.ts b/src/grpc_intro_projects/grpc-raydium-trades/src/utils/utils.ts new file mode 100644 index 0000000..0d22abd --- /dev/null +++ b/src/grpc_intro_projects/grpc-raydium-trades/src/utils/utils.ts @@ -0,0 +1,70 @@ +import { Logger } from 'pino'; +import dotenv from 'dotenv'; +import fs from "fs"; +import { Keypair, LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { Connection } from '@solana/web3.js'; +import { PublicKey } from '@solana/web3.js'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +dotenv.config(); + +export const retrieveEnvVariable = (variableName: string, logger: Logger) => { + const variable = process.env[variableName] || ''; + if (!variable) { + logger.error(`${variableName} is not set`); + process.exit(1); + } + return variable; +}; + +export function getKeypairByJsonPath(jsonPath: string): any { + try { + const keypairJson = fs.readFileSync(jsonPath, "utf-8"); + const data = JSON.parse(keypairJson); + const mintKeypair = Keypair.fromSecretKey(Uint8Array.from(data)); + return mintKeypair + } catch (e) { + console.log(e); + } +} +export async function printSOLBalance ( + connection: Connection, + pubKey: PublicKey, + info = "" +) { + const balance = await connection.getBalance(pubKey); + console.log( + `${info ? info + " " : ""}${pubKey.toBase58()}:`, + balance / LAMPORTS_PER_SOL, + `SOL` + ); +}; + +export async function getSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + pubKey: PublicKey, + allowOffCurve = false +) { + try { + let ata = getAssociatedTokenAddressSync(mintAddress, pubKey, allowOffCurve); + const balance = await connection.getTokenAccountBalance(ata, "processed"); + return balance.value.uiAmount; + } catch (e) {} + return null; +}; +async function printSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + user: PublicKey, + info = "" +) { + const balance = await getSPLBalance(connection, mintAddress, user); + if (balance === null) { + console.log( + `${info ? info + " " : ""}${user.toBase58()}:`, + "No Account Found" + ); + } else { + console.log(`${info ? info + " " : ""}${user.toBase58()}:`, balance); + } +}; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-copy-bot/README.md b/src/grpc_streaming_dev/grpc-copy-bot/README.md new file mode 100644 index 0000000..db541be --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/README.md @@ -0,0 +1,59 @@ +# *Geyser gRPC Copy Bot (Beta)* + +## Overview + +A copy trading bot uses gRPC to stream target trader's swap txns. It's designed to quickly detect and trade the target trader's Raydium swap txns. + +## How it works + +- It uses the geyser grpc plugin that subscribe all the latest slot that receive from the grpc server. +- It basically only consider the slot or block in "processed" commitment level to make sure the request can land in the next block or next few block(what we expected). + +- Use a grpc subscription to subscribe the transactions that including the target smart wallet address and listen for the swap transactions. +- Once the swap event is detected, it calculate the how much token the trader bought or how much token the trader sold by considering the number of token and sol changes in the liquidity pool, and it follows the exact swapped token amount of the trader. +- The entry/exit price is calculated by the formula: entry/exit price = post SOL in Pool / post token in Pool. + +## Limitations +- It only works on raydium swap transactions now. +- It uses WSOL. + +## Prerequisites + +- run `ts-node src/streaming/copy-trade.ts -h` to test the copy-trade command and see the available options +- to change the parameters, you can modify the .env file +- to have a try, run ```ts-node /Users/{your_path_to_this_dir}/src/streaming/copy-trade.ts --trader your_target_trader_address``` + +## Code usage + +- constants/constants.ts: retriving the variable in .env + +- src/streaming/copy-trade.ts: a cli interface to interact the whole dir + +- streaming/stream-trader.ts: subscribing any trader's swap txns of newest block in processed level + +- src/jito/bundle.ts: sending the bundle with tips to jito + +- src/streaming/grpc-requests-type.ts: different grpc request types for monitoring the target trader + +- src/raydium/*.ts: constructing the proper instructions of buy and sell on raydium + +## Features + +- streaming of trader's swap txns +- copy the swap txns and we swap it on raydium in milliseconds +- the entry/exit price of the trader's swap is calculated by the formula: entry/exit price = post SOL in Pool / post token in Pool +- Integration with Jito leader schedule (optional) +- Customizable logging with Pino + +## Contributing + +Contributions are welcome. Please submit pull requests with any improvements or bug fixes. + +## Disclaimer + +This software is in beta and for educational purposes only. Use at your own risk. The authors are not responsible for any financial losses incurred while using this software. + +## Note + +The current implementation includes commented-out code for Jito leader schedule integration. Uncomment and configure as needed for advanced usage. + diff --git a/src/grpc_streaming_dev/grpc-copy-bot/command.sh b/src/grpc_streaming_dev/grpc-copy-bot/command.sh new file mode 100644 index 0000000..276895c --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/command.sh @@ -0,0 +1 @@ +ts-node /Users/{your_path_to_this_dir}/src/stream/copy-trade.ts --trader your_target_trader_address diff --git a/src/grpc_streaming_dev/grpc-copy-bot/main.ts b/src/grpc_streaming_dev/grpc-copy-bot/main.ts new file mode 100644 index 0000000..d5d79d7 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/main.ts @@ -0,0 +1,24 @@ +import { spawn } from 'child_process'; +import path from 'path'; + +const scriptPath = path.join(__dirname, 'command.sh'); + +function runScript() { + const child = spawn('sh', [scriptPath], { + stdio: 'inherit', + shell: true, + }); + + child.on('close', (code) => { + console.log(`child process exited with code ${code}`); + console.error('copy-trade.ts script closed or encountered an error, restarting...'); + runScript(); + + }); + + child.on('error', (err) => { + console.error('Error running script.sh:', err); + runScript(); + }); +} +runScript(); \ No newline at end of file diff --git a/data/payer_keypair/devnet/.DS_Store b/src/grpc_streaming_dev/grpc-copy-bot/src/.DS_Store similarity index 100% rename from data/payer_keypair/devnet/.DS_Store rename to src/grpc_streaming_dev/grpc-copy-bot/src/.DS_Store diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/constants/constants.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/constants/constants.ts new file mode 100644 index 0000000..007eedb --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/constants/constants.ts @@ -0,0 +1,50 @@ +import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; +import { logger, retrieveEnvVariable } from "../../../../utils"; +import { + Currency, + Token, + TOKEN_PROGRAM_ID, +} from "@raydium-io/raydium-sdk"; +import { Commitment, Connection, Keypair, PublicKey } from "@solana/web3.js"; +export const NETWORK = "mainnet-beta"; +export const COMMITMENT_LEVEL: Commitment = retrieveEnvVariable( + "COMMITMENT_LEVEL", + logger +) as Commitment; +export const RPC_ENDPOINT = retrieveEnvVariable("MAINNET_ENDPOINT", logger); +export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable( + "WS_MAINNET_ENDPOINT", + logger +); +export const GRPC_XTOKEN = retrieveEnvVariable("GRPC_XTOKEN", logger); +export const LOG_LEVEL = retrieveEnvVariable("LOG_LEVEL", logger); +export const GRPC_URL = retrieveEnvVariable("GRPC_URL", logger); +export const PRIVATE_KEY = retrieveEnvVariable("PRIVATE_KEY", logger); +export const JITO_TIPS = retrieveEnvVariable("JITO_FEE", logger); +export const connection = new Connection(RPC_ENDPOINT, "processed"); +export const wallet = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY)); +export const wsol = "So11111111111111111111111111111111111111112"; +const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; +export const quoteToken = [ + usdc, // USDC + "SOL", // SOL + "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", // USDT + wsol, // WSOL +]; +export const DEFAULT_TOKEN = { + SOL: new Currency(9, "SOL", "SOL"), + WSOL: new Token( + TOKEN_PROGRAM_ID, + new PublicKey("So11111111111111111111111111111111111111112"), + 9, + "WSOL", + "WSOL" + ), + USDC: new Token( + TOKEN_PROGRAM_ID, + new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), + 6, + "USDC", + "USDC" + ), +}; diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/constants/index.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/constants/index.ts new file mode 100644 index 0000000..c7582ff --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/constants/index.ts @@ -0,0 +1 @@ +export * from "./constants" \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/jito/bundle.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/jito/bundle.ts new file mode 100644 index 0000000..e825c1d --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/jito/bundle.ts @@ -0,0 +1,127 @@ +import { + Connection, + PublicKey, + Keypair, + VersionedTransaction, + MessageV0, + LAMPORTS_PER_SOL, +} from "@solana/web3.js"; +import { Bundle } from "jito-ts/dist/sdk/block-engine/types"; +import * as Fs from "fs"; +require("dotenv").config(); +import { searcherClient } from "jito-ts/dist/sdk/block-engine/searcher"; +import { + ChannelCredentials, + ChannelOptions, + ClientReadableStream, + ServiceError, +} from "@grpc/grpc-js"; +import { SearcherServiceClient } from "jito-ts/dist/gen/block-engine/searcher"; +import { + PRIVATE_KEY, + RPC_ENDPOINT, + RPC_WEBSOCKET_ENDPOINT, + JITO_TIPS, +} from "../constants"; + +import bs58 from "bs58"; +import { logger } from "../../../../helpers/logger"; +import { bundle } from "jito-ts"; +const blockEngineUrl = process.env.BLOCK_ENGINE_URL || ""; +logger.info(`BLOCK_ENGINE_URL: ${blockEngineUrl}`); +const c = searcherClient(blockEngineUrl, undefined); +export const searcherClientAdv = ( + url: string, + authKeypair: Keypair | undefined, + grpcOptions?: Partial +): SearcherServiceClient => { + const client: SearcherServiceClient = new SearcherServiceClient( + url, + ChannelCredentials.createSsl(), + { ...grpcOptions } + ); + + return client; +}; + +// Get Tip Accounts + +let tipAccounts: string[] = []; +(async () => { + try { + tipAccounts = await c.getTipAccounts(); + // console.log('Result:', tipAccounts); + } catch (error) { + console.error("Error:", error); + } +})(); + +export async function sendBundle( + latestBlockhash: string, + transaction: VersionedTransaction, + poolId: PublicKey, + masterKeypair: Keypair +) { + try { + const _tipAccount = tipAccounts[Math.floor(Math.random() * 6)]; + const tipAccount = new PublicKey(_tipAccount); + const b = new Bundle([transaction], 4); + const jito_tips = parseFloat(JITO_TIPS); + b.addTipTx( + masterKeypair, + jito_tips * LAMPORTS_PER_SOL, // Adjust Jito tip amount here + tipAccount, + latestBlockhash + ); + logger.info(`Sending bundle`); + const bundleResult = await c.sendBundle(b); + logger.info(`Sent trade tx to jito!`); + logger.info({ + dexscreener: `https://dexscreener.com/solana/${poolId.toBase58()}?maker=${masterKeypair.publicKey.toBase58()}`, + }); + } catch (error) { + logger.error(error); + } +} + +// Get leader schedule + +// This was when I was experimenting with only sending the buy tx when a Jito leader was up or going to be up in the next slot so that I wouldn't +// have to wait multiple slots for the tx to be processed. I ended up not using this feature as it couldn't get it working correctly before I moved on. + +export async function storeJitoLeaderSchedule() { + const cs = searcherClientAdv(blockEngineUrl, undefined); + + const leaderSchedule = new Set(); + + cs.getConnectedLeadersRegioned( + { regions: ["tokyo", "amsterdam", "ny", "frankfurt"] }, + (error, response) => { + for (let key in response) { + if (key === "connectedValidators") { + let validators = response[key]; + for (let validatorKey in validators) { + // Each validator object + let validator = validators[validatorKey]; + // Assuming `slots` is an array inside each validator object + Object.keys(validator.connectedValidators).forEach( + (key: string) => { + const slotsArray: number[][] = Object.values( + validator.connectedValidators[key] + ); // Assume SlotList is an array of arrays + const flattenedSlotsArray: number[] = slotsArray.flat(); // Flatten the array + flattenedSlotsArray.forEach((slot: number) => { + leaderSchedule.add(slot); + }); + } + ); + } + } + } + + //console.log(leaderSchedule); + } + ); + + return leaderSchedule; +} diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/jito/index.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/jito/index.ts new file mode 100644 index 0000000..cf76714 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/jito/index.ts @@ -0,0 +1 @@ +export * from "./bundle"; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/buy-helper.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/buy-helper.ts new file mode 100644 index 0000000..2e206f8 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/buy-helper.ts @@ -0,0 +1,10 @@ +import { Keypair } from "@solana/web3.js"; +import {swap} from "./swap"; +import {connection} from "../constants" +import { VersionedTransaction } from "@solana/web3.js"; + + +export async function buy(side = "buy", address: string, no_of_sol: number, payer: Keypair): Promise { + return await swap(side, address, no_of_sol, -1, payer, "trade", connection); +} + \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/formatAmmKeys.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/formatAmmKeys.ts new file mode 100644 index 0000000..330ef1a --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/formatAmmKeys.ts @@ -0,0 +1,82 @@ +import { + LIQUIDITY_STATE_LAYOUT_V4, + MARKET_STATE_LAYOUT_V3, + SPL_MINT_LAYOUT, + Liquidity, + Market, + MAINNET_PROGRAM_ID, + LiquidityStateV4, + publicKey, + struct, + } from "@raydium-io/raydium-sdk"; + import { PublicKey } from "@solana/web3.js"; + const MINIMAL_MARKET_STATE_LAYOUT_V3 = struct([ + publicKey("eventQueue"), + publicKey("bids"), + publicKey("asks"), + ]); + import { connection } from "../constants"; + + // Promise + /** + * Formats AMM keys by ID. + * @param {string} id - The ID of the AMM. + * @returns {Object} - The formatted AMM keys. + * @throws {Error} - If there is an error retrieving the account information. + */ +export async function formatAmmKeysById_swap(id: PublicKey):Promise { + const account = await connection.getAccountInfo(id); + if (account === null) throw Error(" get id info error "); + const info = LIQUIDITY_STATE_LAYOUT_V4.decode(account.data); + + const marketId = info.marketId; + const marketAccount_minimal = await connection.getAccountInfo(marketId, { + commitment: "processed", + dataSlice: { + offset: MARKET_STATE_LAYOUT_V3.offsetOf("eventQueue"), + length: 32 * 3, + }, + }); + const marketAccount = await connection.getAccountInfo(marketId); + if (marketAccount === null || marketAccount_minimal === null) + throw Error(" get market info error"); + const marketInfo_minimal = MINIMAL_MARKET_STATE_LAYOUT_V3.decode( + marketAccount_minimal.data + ); + const marketInfo = MARKET_STATE_LAYOUT_V3.decode(marketAccount.data); + + return { + id, + baseMint: info.baseMint, + quoteMint: info.quoteMint, + lpMint: info.lpMint, + baseDecimals: info.baseDecimal.toNumber(), + quoteDecimals: info.quoteDecimal.toNumber(), + lpDecimals: 5, + version: 4, + programId: MAINNET_PROGRAM_ID.AmmV4, + authority: Liquidity.getAssociatedAuthority({ + programId: MAINNET_PROGRAM_ID.AmmV4, + }).publicKey, + openOrders: info.openOrders, + targetOrders: info.targetOrders, + baseVault: info.baseVault, + quoteVault: info.quoteVault, + marketVersion: 3, + marketProgramId: info.marketProgramId, + marketId: info.marketId, + marketAuthority: Market.getAssociatedAuthority({ + programId: info.marketProgramId, + marketId: info.marketId, + }).publicKey, + marketBaseVault: marketInfo.baseVault, + marketQuoteVault: marketInfo.quoteVault, + marketBids: marketInfo_minimal.bids, + marketAsks: marketInfo_minimal.asks, + marketEventQueue: marketInfo_minimal.eventQueue, + withdrawQueue: info.withdrawQueue, + lpVault: info.lpVault, + lookupTableAccount: PublicKey.default, + }; + } + \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/index.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/index.ts new file mode 100644 index 0000000..09eb9b9 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/index.ts @@ -0,0 +1,5 @@ +export * from "./utils"; +export * from "./buy-helper"; +export * from "./sell-helper"; +export * from "./swap"; +export * from "./formatAmmKeys"; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/sell-helper.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/sell-helper.ts new file mode 100644 index 0000000..9194903 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/sell-helper.ts @@ -0,0 +1,9 @@ +import { Keypair } from "@solana/web3.js"; +import {swap} from "./swap"; +import {connection} from "../constants" +import { VersionedTransaction } from "@solana/web3.js"; + + +export async function sell(side = "sell", address: string, sell_amount: number, payer: Keypair): Promise { + return await swap(side, address, -1, sell_amount, payer, "trade", connection); +} diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/swap.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/swap.ts new file mode 100644 index 0000000..45b388b --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/swap.ts @@ -0,0 +1,246 @@ +import { + Liquidity, + Percent, + Token, + TOKEN_PROGRAM_ID, + TokenAmount, +} from "@raydium-io/raydium-sdk"; +import { + PublicKey, + TransactionMessage, + ComputeBudgetProgram, + VersionedTransaction, +} from "@solana/web3.js"; +import { Decimal } from "decimal.js"; +import { BN } from "@project-serum/anchor"; +import { getSPLBalance } from "../../../../helpers/utils"; +import { getDecimals } from "../../../../helpers/util"; +import { DEFAULT_TOKEN } from "../constants"; +import { fetchAMMPoolId } from "./utils"; +import { + getAssociatedTokenAddress, + getAssociatedTokenAddressSync, + createAssociatedTokenAccountIdempotentInstruction, + createCloseAccountInstruction, +} from "@solana/spl-token"; +import { formatAmmKeysById_swap } from "./formatAmmKeys"; +import { Keypair } from "@solana/web3.js"; +import { Connection } from "@solana/web3.js"; + +let tokenToPoolId:any = {}; +let walletPublicKeyToWSOLAta:any = {}; +let walletPublicKeyToTokenAta:any = {}; +let tokenToDecimal:any = {}; +/** + * Performs a swap operation using an Automated Market Maker (AMM) pool in Raydium. + * @param {Object} input - The input parameters for the swap operation. + * @returns {Object} - The transaction IDs of the executed swap operation. + */ +async function swapOnlyAmm(input: any): Promise { + // -------- pre-action: get pool info --------\ + const poolKeys = await formatAmmKeysById_swap( + new PublicKey(input.targetPool) + ); + const poolInfo = await Liquidity.fetchInfo({ + connection: input.connection_obj, + poolKeys: poolKeys, + }); + // -------- step 1: coumpute amount out -------- + const { amountOut, minAmountOut } = Liquidity.computeAmountOut({ + poolKeys: poolKeys, + poolInfo: poolInfo, + amountIn: input.inputTokenAmount, + currencyOut: input.outputToken, + slippage: input.slippage, + }); + // -------- step 2: create instructions by SDK function -------- + const { innerTransaction } = await Liquidity.makeSwapFixedInInstruction( + { + poolKeys: poolKeys, + userKeys: { + tokenAccountIn: input.ataIn, + tokenAccountOut: input.ataOut, + owner: input.master_wallet.publicKey, + }, + amountIn: input.inputTokenAmount.raw, + minAmountOut: minAmountOut.raw, + }, + poolKeys.version + ); + + let latestBlockhash = await input.connection_obj.getLatestBlockhash(); + const messageV0 = new TransactionMessage({ + payerKey: input.master_wallet.publicKey, + recentBlockhash: latestBlockhash.blockhash, + instructions: [ + ...[ + ComputeBudgetProgram.setComputeUnitLimit({ + units: 70000, + }), + ], + ...(input.side === "buy" + ? [ + createAssociatedTokenAccountIdempotentInstruction( + input.master_wallet.publicKey, + input.ataOut, + input.master_wallet.publicKey, + input.outputToken.mint + ), + ] + : []), + ...innerTransaction.instructions, + ], + }).compileToV0Message(); + + const transaction = new VersionedTransaction(messageV0); + transaction.sign([input.master_wallet, ...innerTransaction.signers]); + return transaction; +} + +/** + * Performs a swap operation. + * + * @param {string} side - The side of the swap operation ("buy" or "sell"). + * @param {string} tokenAddr - The address of the token involved in the swap. + * @param {number} buy_AmountOfSol - The amount of SOL to buy (only applicable for "buy" side). + * @param {number} sell_AmountOfToken - The amount of Token to sell (only applicable for "sell" side). + * @param {object} payer_wallet - The payer's wallet object. + * @param {string} usage - The usage of the swap operation. + * @param {object} connection_obj - The connection object. + * @returns {Promise} - A promise that resolves when the swap operation is completed. + */ +export async function swap( + side: string, + tokenAddr: string, + buy_AmountOfSol: number, + sell_AmountOfToken: number, + payer_wallet: Keypair, + usage: string, + connection_obj: Connection +): Promise { + const tokenAddress: string = tokenAddr; + const tokenAccount: PublicKey = new PublicKey(tokenAddress); + let mintAta: any = null, + quoteAta: any = null, + targetPool: string = ""; + + // to avoid creating associated token account multiple times + if (!(payer_wallet.publicKey.toBase58() in walletPublicKeyToTokenAta)) { + walletPublicKeyToTokenAta[payer_wallet.publicKey.toBase58()] = {}; + walletPublicKeyToTokenAta[payer_wallet.publicKey.toBase58()][tokenAddress] = + await getAssociatedTokenAddress(tokenAccount, payer_wallet.publicKey); + mintAta = + walletPublicKeyToTokenAta[payer_wallet.publicKey.toBase58()][ + tokenAddress + ]; + } else { + if ( + !( + tokenAddress in + walletPublicKeyToTokenAta[payer_wallet.publicKey.toBase58()] + ) + ) { + walletPublicKeyToTokenAta[payer_wallet.publicKey.toBase58()][ + tokenAddress + ] = await getAssociatedTokenAddress(tokenAccount, payer_wallet.publicKey); + } + mintAta = + walletPublicKeyToTokenAta[payer_wallet.publicKey.toBase58()][ + tokenAddress + ]; + } + // to avoid creating associated WSOL account multiple times + if (!(payer_wallet.publicKey.toBase58() in walletPublicKeyToWSOLAta)) { + quoteAta = await getAssociatedTokenAddressSync( + Token.WSOL.mint, + payer_wallet.publicKey + ); + walletPublicKeyToWSOLAta[payer_wallet.publicKey.toBase58()] = quoteAta; + } else { + quoteAta = walletPublicKeyToWSOLAta[payer_wallet.publicKey.toBase58()]; + } + // to avoid getting the same pool id multiple times + if (!(tokenAddress in tokenToPoolId)) { + targetPool = await fetchAMMPoolId(tokenAddress); + tokenToPoolId[tokenAddress] = targetPool; + } else { + targetPool = tokenToPoolId[tokenAddress]; + } + // to avoid getting the same decimal multiple times + if (!(tokenAddress in tokenToDecimal)) { + tokenToDecimal[tokenAddress] = await getDecimals(tokenAccount); + } + if (side === "buy") { + // buy - use sol to swap to the token + //const { tokenName, tokenSymbol } = await getTokenMetadata(tokenAddress); + const outputToken = new Token( + TOKEN_PROGRAM_ID, + tokenAccount, + tokenToDecimal[tokenAddress] + ); + const inputToken = DEFAULT_TOKEN.WSOL; // SOL + if (targetPool === null) { + console.log( + "Pool not found or raydium is not supported for this token. Exiting..." + ); + return Object.create(null); + } + const amountOfSol = new Decimal(buy_AmountOfSol); + const inputTokenAmount = new TokenAmount( + inputToken, + new BN(amountOfSol.mul(10 ** inputToken.decimals).toFixed(0)) + ); + const slippage = new Percent(3, 100); + const input = { + outputToken, + targetPool, + inputTokenAmount, + slippage, + ataIn: quoteAta, + ataOut: mintAta, + side, + usage, + connection_obj: connection_obj, + master_wallet: payer_wallet, + }; + + return { pool: new PublicKey(targetPool), txn: await swapOnlyAmm(input) }; + } else { + // sell + const inputToken = new Token( + TOKEN_PROGRAM_ID, + tokenAccount, + tokenToDecimal[tokenAddress], + "", + "" + ); + const outputToken = DEFAULT_TOKEN.WSOL; // WSOL + + if (targetPool === null) { + console.log( + "Pool not found or raydium is not supported for this token. Exiting..." + ); + return Object.create(null); + } + const amount = new Decimal(sell_AmountOfToken); + const slippage = new Percent(5, 100); + const inputTokenAmount = new TokenAmount( + inputToken, + new BN(amount.mul(10 ** inputToken.decimals).toFixed(0)) + ); + const input = { + outputToken, + targetPool, + inputTokenAmount, + slippage, + ataIn: mintAta, + ataOut: quoteAta, + side, + usage, + tokenAddress: tokenAddress, + connection_obj: connection_obj, + master_wallet: payer_wallet, + }; + return { pool: new PublicKey(targetPool), txn: await swapOnlyAmm(input) }; + } +} diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/utils.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/utils.ts new file mode 100644 index 0000000..3bd48f8 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/raydium/utils.ts @@ -0,0 +1,43 @@ +import { Raydium } from "@raydium-io/raydium-sdk-v2"; +import { connection, wallet, wsol } from "../constants"; +import { formatAmmKeysById_swap } from "./formatAmmKeys"; +import { PublicKey } from "@solana/web3.js"; +import { logger } from "../../../../utils"; + +export const initSdk = async () => { + const raydium = await Raydium.load({ + owner: wallet, + connection: connection, + cluster: "mainnet", + disableFeatureCheck: true, + disableLoadToken: true, + blockhashCommitment: "confirmed", + }); + return raydium; +}; + +export async function fetchAMMPoolId(tokenAddress: string): Promise { + const raydium = await initSdk(); + const data:any = await raydium.api.fetchPoolByMints({ + mint1: wsol, + mint2: tokenAddress, + }); + const listOfPools = data.data; + for (const obj of listOfPools) { + if (obj.type === "Standard") { + // return the first AMM pool ID + console.log("AMM Pool ID: ", obj.id); + return obj.id; + } + } + logger.error("No AMM pool ID found for the given token address"); + return ""; // return empty string if no AMM pool ID is found +} +// async function main() { +// const tokenAddress = "3B5wuUrMEi5yATD7on46hKfej3pfmd7t1RKgrsN3pump"; // billy +// const poolId = await fetchAMMPoolId(tokenAddress); +// console.log(await formatAmmKeysById_swap(new PublicKey(poolId))); + +// } + +// main(); diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/copy-trade.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/copy-trade.ts new file mode 100644 index 0000000..647a03d --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/copy-trade.ts @@ -0,0 +1,44 @@ +import { streamTargetTrader } from "./stream-trader"; +import { init } from "../transaction/transaction"; +import { logger } from "../../../../helpers/logger"; +import { fork } from "child_process"; +import bs58 from "bs58"; +import path from "path"; +export const stream_trader_path = path.join(__dirname, "stream-trader.ts"); +import { program } from "commander"; +let targetTraderToCopy: string = ""; + +program + .option("--trader ", "Specify the trader you want to copy") + .option("-h, --help", "display help for command") + .action((options: any) => { + if (options.help) { + logger.info("ts-node copy-trade.ts --trader "); + process.exit(0); + } + if (options.trader) { + targetTraderToCopy = options.trader; + } + }); +program.parse(); + +async function snipe() { + // show the options + logger.info(`Trader: ${targetTraderToCopy}`); + // show the target token + logger.info(`bot will copy the trades from ${targetTraderToCopy}.`); + + // initialize the bot + await init(); + try { + // Start copy_buy in a separate process + await streamTargetTrader(targetTraderToCopy); + } catch (e) { + logger.error(`error when streaming ${e}`); + logger.info("Retrying in 1 second"); + await new Promise((resolve) => setTimeout(resolve, 1000)); + await snipe(); + } +} + +snipe(); diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/grpc-requests-type.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/grpc-requests-type.ts new file mode 100644 index 0000000..703b30d --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/grpc-requests-type.ts @@ -0,0 +1,46 @@ +import { + CommitmentLevel, + SubscribeRequest, + } from "@triton-one/yellowstone-grpc"; +import { req } from "pino-std-serializers"; +const RaydiumProgram = "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8" +const RaydiumRoute = "routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS" +const RaydiumCAMM = "CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK" +const tokenAccountProgram = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" +export async function createSubscribeTraderRequest(traderAddress: string) { + let request: any = null; + request = { + slots: {}, + accounts: {}, + transactions: { + pumpdotfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: [traderAddress], + accountExclude: [], + accountRequired: [traderAddress], + }, + }, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + commitment: CommitmentLevel.PROCESSED, // Subscribe to processed blocks for the fastest updates + entry: {}, + }; + return request; +} +export async function createClearAllSubscriptionsRequest() { + const request = { + "slots": {}, + "accounts": {}, + "transactions": {}, + "blocks": {}, + "blocksMeta": {}, + "accountsDataSlice": [] + }; + return request; +} + + diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/stream-trader.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/stream-trader.ts new file mode 100644 index 0000000..4e0504f --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/stream-trader.ts @@ -0,0 +1,133 @@ +import pino from "pino"; +import Client from "@triton-one/yellowstone-grpc"; +import { PublicKey } from "@solana/web3.js"; +import { storeJitoLeaderSchedule, sendBundle } from "../jito/bundle"; +import bs58 from "bs58"; +import { + createClearAllSubscriptionsRequest, + createSubscribeTraderRequest, +} from "./grpc-requests-type"; +import { handleSubscribe, wsol } from "./utils"; +import { getSPLBalance, retriveWalletState } from "../../../../utils"; +import { connection, quoteToken, wallet, GRPC_XTOKEN, GRPC_URL } from "../constants/constants"; +import { sell, buy } from "../raydium"; +let trader_balance_wallet:any = {}; +let targetTrader = ""; +export const raydium_authority = "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"; // ***it represent the person who extract/put the sol/token to the pool for every raydium swap txn*** +const client = new Client( + GRPC_URL, + GRPC_XTOKEN, + { + "grpc.max_receive_message_length": 64 * 1024 * 1024, // 64MiB + } +); //grpc endpoint +const transport = pino.transport({ + target: "pino-pretty", +}); + +export const logger = pino( + { + level: "info", + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport +); +// Array to store Jito leaders for current epoch +let leaderSchedule = new Set(); +export async function populateJitoLeaderArray() { + leaderSchedule = await storeJitoLeaderSchedule(); +} + +(async () => { + const version = await client.getVersion(); // gets the version information + logger.info(version); +})(); + +export async function checkTraderBuyOrSell(data: any, traderAddress: string) { + const preTokenBalances = data.transaction.transaction.meta.preTokenBalances; + const postTokenBalances = data.transaction.transaction.meta.postTokenBalances; + const latestBlockhash = await connection.getLatestBlockhash("processed"); + let targetToken = "", postPoolSOL=0, postPoolToken=0, prePoolSOL=0, prePoolToken=0, side = ""; + // look for the token that the trader is buying or selling + for (const account of preTokenBalances) { + if (targetToken !== "" && prePoolSOL !== 0 && prePoolToken!==0) break; // make sure we get the target token and pool sol balances and trader address only + if (account.owner === raydium_authority && account.mint !== wsol) targetToken = account.mint; + if (account.owner === raydium_authority && account.mint === wsol) { + prePoolSOL = account.uiTokenAmount.uiAmount; + } + if (account.owner === raydium_authority && account.mint !== wsol) { + prePoolToken = account.uiTokenAmount.uiAmount; + } + } + for (const account of postTokenBalances) { + if (postPoolSOL !== 0 && postPoolToken!==0) break; // make sure we get the target token and pool sol balances and trader address only + if (account.owner === raydium_authority && account.mint !== wsol ) targetToken = account.mint; + if (account.owner === raydium_authority && account.mint === wsol) { + postPoolSOL = account.uiTokenAmount.uiAmount; + } + if (account.owner === raydium_authority && account.mint !== wsol) { + postPoolToken = account.uiTokenAmount.uiAmount; + } + } + if (targetToken === "") return; + let swappedSOLAmount = 0, swappedTokenAmount = 0; + if(postPoolSOL > prePoolSOL){ + side = "buy"; + swappedSOLAmount = postPoolSOL - prePoolSOL; + swappedTokenAmount = prePoolToken - postPoolToken; + } + else { + side = "sell"; + swappedSOLAmount = prePoolSOL - postPoolSOL; + swappedTokenAmount = postPoolToken - prePoolToken; + } + if(side==="buy") { + logger.info(`Trader ${traderAddress} is ${side}ing ${swappedTokenAmount} of ${targetToken} using ${swappedSOLAmount}SOL in price of ${postPoolSOL/postPoolToken}`); + const { pool, txn } = await buy( + "buy", + targetToken, + swappedSOLAmount, + wallet + ); + sendBundle(latestBlockhash.blockhash, txn, pool, wallet); + }else{ + logger.info(`Trader ${traderAddress} is ${side}ing ${swappedTokenAmount} of ${targetToken} for ${swappedSOLAmount}SOL in price of ${postPoolSOL/postPoolToken}`); + const { pool, txn } = await sell( + "sell", + targetToken, + swappedTokenAmount, + wallet + ); + sendBundle(latestBlockhash.blockhash, txn, pool, wallet); + } + + +} + +export async function streamTargetTrader(traderAddress: string) { + try { + console.log("Target trader: ", traderAddress); + trader_balance_wallet = await retriveWalletState(traderAddress); + console.log(trader_balance_wallet); + + const stream = await client.subscribe(); + // throw new Error("test"); // test if it restarts when error occurs + // process.exit(1); // test if it restart when process exit + // Create `error` / `end` handler + const r1 = await createSubscribeTraderRequest(traderAddress); + handleSubscribe(stream, r1); + stream.on("data", (data) => { + // receive an update when trader makes a transaction + if (data.transaction !== undefined) { + logger.info(`Current slot: ${data.transaction.slot}`); + checkTraderBuyOrSell(data, traderAddress); + } + }); + } catch (e) { + logger.error(e); + throw e; + } +} diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/utils.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/utils.ts new file mode 100644 index 0000000..fe474f5 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/streaming/utils.ts @@ -0,0 +1,73 @@ +import { + CommitmentLevel, + SubscribeRequest, +} from "@triton-one/yellowstone-grpc"; +import Client from "@triton-one/yellowstone-grpc"; +import { logger } from "../../../../utils"; +const PING_INTERVAL_MS = 100_000; +export const wsol = "So11111111111111111111111111111111111111112"; +export async function handleSubscribe( + client_stream: any, + args: SubscribeRequest +) { + try { + const streamClosed = new Promise((resolve, reject) => { + client_stream.on("error", (error:any) => { + console.log("ERROR", error); + reject(error); + client_stream.end(); + }); + client_stream.on("end", () => { + resolve(); + }); + client_stream.on("close", () => { + resolve(); + }); + }); + + // Send subscribe request + await new Promise((resolve, reject) => { + client_stream.write(args, (err: any) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); + // Send pings every 5s to keep the connection open + const pingRequest: SubscribeRequest = { + ping: { id: 1 }, + // Required, but unused arguments + accounts: {}, + accountsDataSlice: [], + transactions: {}, + blocks: {}, + blocksMeta: {}, + entry: {}, + slots: {}, + }; + setInterval(async () => { + await new Promise((resolve, reject) => { + client_stream.write(pingRequest, (err:any) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); + }, PING_INTERVAL_MS); + + await streamClosed; + } catch (e) { + logger.error(e); + throw e; + } +} diff --git a/src/grpc_streaming_dev/grpc-copy-bot/src/transaction/transaction.ts b/src/grpc_streaming_dev/grpc-copy-bot/src/transaction/transaction.ts new file mode 100644 index 0000000..58a7bc2 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-copy-bot/src/transaction/transaction.ts @@ -0,0 +1,73 @@ +import { + Liquidity, + LiquidityPoolKeys, + LiquidityStateV4, + Token, + TokenAmount, +} from "@raydium-io/raydium-sdk"; +import { + Commitment, + ComputeBudgetProgram, + Connection, + Keypair, + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + TransactionMessage, + VersionedTransaction, + Transaction, +} from "@solana/web3.js"; +import fs from "fs"; +import bs58 from "bs58"; +import { + COMMITMENT_LEVEL, + LOG_LEVEL, + PRIVATE_KEY, + RPC_ENDPOINT, + RPC_WEBSOCKET_ENDPOINT, +} from "../constants"; +import { + AccountLayout, + createAssociatedTokenAccountIdempotentInstruction, + createCloseAccountInstruction, + getAssociatedTokenAddress, + getAssociatedTokenAddressSync, + TOKEN_PROGRAM_ID, +} from "@solana/spl-token"; +import { TokenInstructions } from "@project-serum/serum"; +import { logger } from "../../../../helpers/logger"; +import { + retrieveEnvVariable, + getKeypairByJsonPath, + printSOLBalance, + getSPLBalance, +} from "../../../../utils"; +import { populateJitoLeaderArray } from "../streaming/stream-trader"; +import { sendBundle } from "../jito/bundle"; +import { AnchorProvider } from "@coral-xyz/anchor"; +import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet"; +let wallet: Keypair; +let quoteAmount: TokenAmount; +export const solanaConnection = new Connection(RPC_ENDPOINT, { + wsEndpoint: RPC_WEBSOCKET_ENDPOINT, +}); + +// Init funtions right here + +export async function init(): Promise { + logger.level = LOG_LEVEL; + + // get wallet + wallet = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY)); + logger.info(`Wallet Address: ${wallet.publicKey}`); + + logger.info(`Any Buys using WSOL`); + + // check existing wallet for associated token account of quote mint + const SOLBalance = await solanaConnection.getBalance(wallet.publicKey); + if (SOLBalance === 0) { + throw new Error(`No SOL balance left in wallet: ${wallet.publicKey}`); + } + + await populateJitoLeaderArray(); +} diff --git a/data/payer_keypair/.DS_Store b/src/grpc_streaming_dev/grpc-pf-sniper/.DS_Store similarity index 97% rename from data/payer_keypair/.DS_Store rename to src/grpc_streaming_dev/grpc-pf-sniper/.DS_Store index ed4e49e..f7f871e 100644 Binary files a/data/payer_keypair/.DS_Store and b/src/grpc_streaming_dev/grpc-pf-sniper/.DS_Store differ diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/README.md b/src/grpc_streaming_dev/grpc-pf-sniper/README.md new file mode 100644 index 0000000..3396a58 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/README.md @@ -0,0 +1,55 @@ +# *Geyser gRPC Pump.fun Sniper Bot (Beta)* + +## Overview + +A sniper bot uses gRPC to stream the new txns from mint authority of Pump.fun. It's designed to quickly detect and trade any new tokens or target new token on pump.fun + +## How it works + +- It uses the geyser grpc plugin that subscribe all the latest slot that receive from the grpc server. +- It basically only consider the slot or block in "processed" commitment level to make sure the request can land in the next block or next few block(what we expected). + +- Use a grpc subscription to subscribe the transactions that includes the solana account of the Pump.fun Token Mint Authority and listen for the mint event (https://solscan.io/account/TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM). +- Once the mint event is detected, it will send a snipe transaction to snipe the token! +- it uses SOL for trading. + +## Prerequisites + +- run `ts-node src/streaming/snipe-create.ts -h` to test the snipe-create command and see the available options +- to change the parameters, you can modify the .env file +- to have a try, run ```ts-node src/streaming/snipe-create.ts --auto-sell --jito --n 3``` + +## Code usage + +- constants/constants.ts: retriving the variable in .env + +- streaming/pump.fun.ts: subscribing any pump.fun create token's txns of newest block in processed level + +- src/jito/bundle.ts: sending the bundle with tips to jito blockengine + +- src/transaction/transaction.ts: main functions of createAndBuy, buy, and sell + +- src/pumpdotfun-sdk/*: constructing the proper instructions of create, buy, and sell + +- src/streaming/snipe-create.ts: a cli interface to interact the whole dir + +- src/streaming/grpc-requests-type.ts: different grpc request types for sniping on pump.fun + +## Features + +- Real-time streaming of Pump.fun's mint authority +- Fast sniping using pump.fun sdk in milliseconds +- Integration with Jito leader schedule (optional) +- Customizable logging with Pino + +## Contributing + +Contributions are welcome. Please submit pull requests with any improvements or bug fixes. + +## Disclaimer + +This software is in beta and for educational purposes only. Use at your own risk. The authors are not responsible for any financial losses incurred while using this software. + +## Note + +The current implementation includes commented-out code for Jito leader schedule integration. Uncomment and configure as needed for advanced usage. diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/command.sh b/src/grpc_streaming_dev/grpc-pf-sniper/command.sh new file mode 100644 index 0000000..7e81208 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/command.sh @@ -0,0 +1 @@ +ts-node src/streaming/snipe-create.ts --auto-sell --jito --n 3 \ No newline at end of file diff --git a/data/token_keypair/.DS_Store b/src/grpc_streaming_dev/grpc-pf-sniper/src/.DS_Store similarity index 97% rename from data/token_keypair/.DS_Store rename to src/grpc_streaming_dev/grpc-pf-sniper/src/.DS_Store index ed4e49e..2ae1ed0 100644 Binary files a/data/token_keypair/.DS_Store and b/src/grpc_streaming_dev/grpc-pf-sniper/src/.DS_Store differ diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/constants/constants.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/constants/constants.ts new file mode 100644 index 0000000..f0145d9 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/constants/constants.ts @@ -0,0 +1,21 @@ +import { logger, retrieveEnvVariable } from "../../../../utils"; +import { + Commitment + } from "@solana/web3.js"; +export const NETWORK = 'mainnet-beta'; +export const COMMITMENT_LEVEL: Commitment = retrieveEnvVariable('COMMITMENT_LEVEL', logger) as Commitment; +export const RPC_ENDPOINT = retrieveEnvVariable('MAINNET_ENDPOINT', logger); +export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable('WS_MAINNET_ENDPOINT', logger); +export const GRPC_XTOKEN = retrieveEnvVariable('GRPC_XTOKEN', logger); +console.log('GRPC_XTOKEN: ', GRPC_XTOKEN); +export const GRPC_URL = retrieveEnvVariable('GRPC_URL', logger); +export const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger); +export const PRIVATE_KEY = retrieveEnvVariable('PRIVATE_KEY', logger); +export const QUOTE_AMOUNT = retrieveEnvVariable('QUOTE_AMOUNT', logger); +export const JITO_TIPS = retrieveEnvVariable('JITO_FEE', logger); +export const AUTO_SELL = retrieveEnvVariable('AUTO_SELL', logger) === 'true'; +export const AUTO_SELL_TIMEOUT = retrieveEnvVariable('AUTO_SELL_TIMEOUT', logger); +export {ComputeBudgetProgram, Connection, + Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, + TransactionMessage, VersionedTransaction, Transaction, + Commitment} from "@solana/web3.js"; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/constants/index.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/constants/index.ts new file mode 100644 index 0000000..c7582ff --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/constants/index.ts @@ -0,0 +1 @@ +export * from "./constants" \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/jito/bundle.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/jito/bundle.ts new file mode 100644 index 0000000..3fdd55e --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/jito/bundle.ts @@ -0,0 +1,133 @@ +import { + Connection, + PublicKey, + Keypair, + VersionedTransaction, + MessageV0, + LAMPORTS_PER_SOL + } + from '@solana/web3.js'; + import { Bundle } from 'jito-ts/dist/sdk/block-engine/types'; + import * as Fs from 'fs'; + require('dotenv').config(); + import { searcherClient } from 'jito-ts/dist/sdk/block-engine/searcher'; + import { + ChannelCredentials, + ChannelOptions, + ClientReadableStream, + ServiceError, + } from '@grpc/grpc-js'; + import { SearcherServiceClient } from 'jito-ts/dist/gen/block-engine/searcher' + import { + PRIVATE_KEY, + RPC_ENDPOINT, + RPC_WEBSOCKET_ENDPOINT, + JITO_TIPS + } from '../constants'; + + import bs58 from 'bs58'; + import { logger } from '../utils/logger'; + import { bundle } from 'jito-ts'; + const blockEngineUrl = process.env.BLOCK_ENGINE_URL || ''; + logger.info(`BLOCK_ENGINE_URL: ${blockEngineUrl}`); + const c = searcherClient(blockEngineUrl, undefined); + export const searcherClientAdv = ( + url: string, + authKeypair: Keypair | undefined, + grpcOptions?: Partial + ): SearcherServiceClient => { + const client: SearcherServiceClient = new SearcherServiceClient( + url, + ChannelCredentials.createSsl(), + { ...grpcOptions } + ); + + return client; + } + + + // Get Tip Accounts + + let tipAccounts: string[] = []; + (async () => { + try { + tipAccounts = await c.getTipAccounts(); + // console.log('Result:', tipAccounts); + } catch (error) { + console.error('Error:', error); + } + })(); + + + + export async function sendBundle(latestBlockhash: string, transaction: VersionedTransaction, mint: PublicKey, masterKeypair: Keypair) { + + try { + logger.info(`Fetching and adding tip`); + const _tipAccount = tipAccounts[Math.floor(Math.random() * 6)]; + const tipAccount = new PublicKey(_tipAccount); + const b = new Bundle([transaction], 3); + const jito_tips = parseFloat(JITO_TIPS); + b.addTipTx( + masterKeypair, + jito_tips*LAMPORTS_PER_SOL, // Adjust Jito tip amount here + tipAccount, + latestBlockhash + ); + logger.info(`Sending bundle`); + const bundleResult = await c.sendBundle(b); + logger.info(`Sent bundle! bundleResult = ${bundleResult}`); + logger.info( + { + Pumpfun:`https://pump.fun/${mint.toBase58()}` + }, + ); + + + } + + catch (error) { + logger.error(error); + + } + + } + + // Get leader schedule + + // This was when I was experimenting with only sending the buy tx when a Jito leader was up or going to be up in the next slot so that I wouldn't + // have to wait multiple slots for the tx to be processed. I ended up not using this feature as it couldn't get it working correctly before I moved on. + + export async function storeJitoLeaderSchedule() { + + const cs = searcherClientAdv(blockEngineUrl, undefined); + + + const leaderSchedule = new Set(); + + cs.getConnectedLeadersRegioned({ regions: ["tokyo", "amsterdam", "ny", "frankfurt"] }, (error, response) => { + + + for (let key in response) { + if (key === 'connectedValidators') { + let validators = response[key]; + for (let validatorKey in validators) { + // Each validator object + let validator = validators[validatorKey]; + // Assuming `slots` is an array inside each validator object + Object.keys(validator.connectedValidators).forEach((key: string) => { + const slotsArray: number[][] = Object.values(validator.connectedValidators[key]); // Assume SlotList is an array of arrays + const flattenedSlotsArray: number[] = slotsArray.flat(); // Flatten the array + flattenedSlotsArray.forEach((slot: number) => { + leaderSchedule.add(slot); + }); + }); + } + } + } + + //console.log(leaderSchedule); + }); + + return leaderSchedule; + } \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/jito/index.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/jito/index.ts new file mode 100644 index 0000000..cf76714 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/jito/index.ts @@ -0,0 +1 @@ +export * from "./bundle"; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/basic/index.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/basic/index.ts new file mode 100644 index 0000000..8b65d5d --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/basic/index.ts @@ -0,0 +1,165 @@ +// import dotenv from "dotenv"; +// import fs from "fs"; +// import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js"; +// import { DEFAULT_DECIMALS, PumpFunSDK } from "../../src"; +// import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet"; +// import { AnchorProvider } from "@coral-xyz/anchor"; +// import { +// getOrCreateKeypair, +// getSPLBalance, +// printSOLBalance, +// printSPLBalance, +// } from "../util"; + +// const KEYS_FOLDER = __dirname + "/.keys"; +// const SLIPPAGE_BASIS_POINTS = 100n; + +// //create token example: +// //https://solscan.io/tx/bok9NgPeoJPtYQHoDqJZyRDmY88tHbPcAk1CJJsKV3XEhHpaTZhUCG3mA9EQNXcaUfNSgfPkuVbEsKMp6H7D9NY +// //devnet faucet +// //https://faucet.solana.com/ + +// const main = async () => { +// dotenv.config(); + +// if (!process.env.HELIUS_RPC_URL) { +// console.error("Please set HELIUS_RPC_URL in .env file"); +// console.error( +// "Example: HELIUS_RPC_URL=https://mainnet.helius-rpc.com/?api-key=" +// ); +// console.error("Get one at: https://www.helius.dev"); +// return; +// } + +// let connection = new Connection(process.env.HELIUS_RPC_URL || ""); + +// let wallet = new NodeWallet(new Keypair()); //note this is not used +// const provider = new AnchorProvider(connection, wallet, { +// commitment: "finalized", +// }); + +// const testAccount = getOrCreateKeypair(KEYS_FOLDER, "test-account"); +// const mint = getOrCreateKeypair(KEYS_FOLDER, "mint"); + +// await printSOLBalance( +// connection, +// testAccount.publicKey, +// "Test Account keypair" +// ); + +// let sdk = new PumpFunSDK(provider); + +// let globalAccount = await sdk.getGlobalAccount(); +// console.log(globalAccount); + +// let currentSolBalance = await connection.getBalance(testAccount.publicKey); +// if (currentSolBalance == 0) { +// console.log( +// "Please send some SOL to the test-account:", +// testAccount.publicKey.toBase58() +// ); +// return; +// } + +// console.log(await sdk.getGlobalAccount()); + +// //Check if mint already exists +// let boundingCurveAccount = await sdk.getBondingCurveAccount(mint.publicKey); +// if (!boundingCurveAccount) { +// let tokenMetadata = { +// name: "TST-7", +// symbol: "TST-7", +// description: "TST-7: This is a test token", +// file: await fs.openAsBlob("example/basic/random.png"), +// }; + +// let createResults = await sdk.createAndBuy( +// testAccount, +// mint, +// tokenMetadata, +// BigInt(0.0001 * LAMPORTS_PER_SOL), +// SLIPPAGE_BASIS_POINTS, +// { +// unitLimit: 250000, +// unitPrice: 250000, +// } +// ); + +// if (createResults.success) { +// console.log("Success:", `https://pump.fun/${mint.publicKey.toBase58()}`); +// boundingCurveAccount = await sdk.getBondingCurveAccount(mint.publicKey); +// console.log("Bonding curve after create and buy", boundingCurveAccount); +// printSPLBalance(connection, mint.publicKey, testAccount.publicKey); +// } +// } else { +// console.log("boundingCurveAccount", boundingCurveAccount); +// console.log("Success:", `https://pump.fun/${mint.publicKey.toBase58()}`); +// printSPLBalance(connection, mint.publicKey, testAccount.publicKey); +// } + +// if (boundingCurveAccount) { +// //buy 0.0001 SOL worth of tokens +// let buyResults = await sdk.buy( +// testAccount, +// mint.publicKey, +// BigInt(0.0001 * LAMPORTS_PER_SOL), +// SLIPPAGE_BASIS_POINTS, +// { +// unitLimit: 250000, +// unitPrice: 250000, +// } +// ); + +// if (buyResults.success) { +// printSPLBalance(connection, mint.publicKey, testAccount.publicKey); +// console.log( +// "Bonding curve after buy", +// await sdk.getBondingCurveAccount(mint.publicKey) +// ); +// } else { +// console.log("Buy failed"); +// } + +// //sell all tokens +// let currentSPLBalance = await getSPLBalance( +// connection, +// mint.publicKey, +// testAccount.publicKey +// ); +// console.log("currentSPLBalance", currentSPLBalance); +// if (currentSPLBalance) { +// let sellResults = await sdk.sell( +// testAccount, +// mint.publicKey, +// BigInt(currentSPLBalance * Math.pow(10, DEFAULT_DECIMALS)), +// SLIPPAGE_BASIS_POINTS, +// { +// unitLimit: 250000, +// unitPrice: 250000, +// } +// ); +// if (sellResults.success) { +// await printSOLBalance( +// connection, +// testAccount.publicKey, +// "Test Account keypair" +// ); + +// printSPLBalance( +// connection, +// mint.publicKey, +// testAccount.publicKey, +// "After SPL sell all" +// ); +// console.log( +// "Bonding curve after sell", +// await sdk.getBondingCurveAccount(mint.publicKey) +// ); +// } else { +// console.log("Sell failed"); +// } +// } +// } +// }; + +// main(); diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/basic/random.png b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/basic/random.png new file mode 100644 index 0000000..6c107cd Binary files /dev/null and b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/basic/random.png differ diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/events/index.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/events/index.ts new file mode 100644 index 0000000..cfd3bc7 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/events/index.ts @@ -0,0 +1,44 @@ +import dotenv from "dotenv"; +import { Connection, Keypair } from "@solana/web3.js"; +import { PumpFunSDK } from "../../src"; +import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet"; +import { AnchorProvider } from "@coral-xyz/anchor"; + +const main = async () => { + dotenv.config(); + + if (!process.env.HELIUS_RPC_URL) { + console.error("Please set HELIUS_RPC_URL in .env file"); + console.error( + "Example: HELIUS_RPC_URL=https://mainnet.helius-rpc.com/?api-key=" + ); + console.error("Get one at: https://www.helius.dev"); + return; + } + + let connection = new Connection(process.env.HELIUS_RPC_URL || ""); + + let wallet = new NodeWallet(new Keypair()); //note this is not used + const provider = new AnchorProvider(connection, wallet, { + commitment: "finalized", + }); + + let sdk = new PumpFunSDK(provider); + + let createEvent = sdk.addEventListener("createEvent", (event) => { + console.log("createEvent", event); + }); + console.log("createEvent", createEvent); + + let tradeEvent = sdk.addEventListener("tradeEvent", (event) => { + console.log("tradeEvent", event); + }); + console.log("tradeEvent", tradeEvent); + + let completeEvent = sdk.addEventListener("completeEvent", (event) => { + console.log("completeEvent", event); + }); + console.log("completeEvent", completeEvent); +}; + +main(); diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/util.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/util.ts new file mode 100644 index 0000000..9ddd534 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/example/util.ts @@ -0,0 +1,91 @@ +import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; +import { getAssociatedTokenAddressSync } from "@solana/spl-token"; +import { + Keypair, + PublicKey, + Connection, + LAMPORTS_PER_SOL, +} from "@solana/web3.js"; +import { sha256 } from "js-sha256"; + +import fs from "fs"; + +export function getOrCreateKeypair(dir: string, keyName: string): Keypair { + if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); + const authorityKey = dir + "/" + keyName + ".json"; + if (fs.existsSync(authorityKey)) { + const data: { + secretKey: string; + publicKey: string; + } = JSON.parse(fs.readFileSync(authorityKey, "utf-8")); + return Keypair.fromSecretKey(bs58.decode(data.secretKey)); + } else { + const keypair = Keypair.generate(); + keypair.secretKey; + fs.writeFileSync( + authorityKey, + JSON.stringify({ + secretKey: bs58.encode(keypair.secretKey), + publicKey: keypair.publicKey.toBase58(), + }) + ); + return keypair; + } +} + +export const printSOLBalance = async ( + connection: Connection, + pubKey: PublicKey, + info: string = "" +) => { + const balance = await connection.getBalance(pubKey); + console.log( + `${info ? info + " " : ""}${pubKey.toBase58()}:`, + balance / LAMPORTS_PER_SOL, + `SOL` + ); +}; + +export const getSPLBalance = async ( + connection: Connection, + mintAddress: PublicKey, + pubKey: PublicKey, + allowOffCurve: boolean = false +) => { + try { + let ata = getAssociatedTokenAddressSync(mintAddress, pubKey, allowOffCurve); + const balance = await connection.getTokenAccountBalance(ata, "processed"); + return balance.value.uiAmount; + } catch (e) {} + return null; +}; + +export const printSPLBalance = async ( + connection: Connection, + mintAddress: PublicKey, + user: PublicKey, + info: string = "" +) => { + const balance = await getSPLBalance(connection, mintAddress, user); + if (balance === null) { + console.log( + `${info ? info + " " : ""}${user.toBase58()}:`, + "No Account Found" + ); + } else { + console.log(`${info ? info + " " : ""}${user.toBase58()}:`, balance); + } +}; + +export const baseToValue = (base: number, decimals: number): number => { + return base * Math.pow(10, decimals); +}; + +export const valueToBase = (value: number, decimals: number): number => { + return value / Math.pow(10, decimals); +}; + +//i.e. account:BondingCurve +export function getDiscriminator(name: string) { + return sha256.digest(name).slice(0, 8); +} diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/index.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/index.ts new file mode 100644 index 0000000..65beef3 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/index.ts @@ -0,0 +1,2 @@ +export { default as IDL } from "./pump-fun.json"; +export { PumpFun } from "./pump-fun"; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/pump-fun.json b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/pump-fun.json new file mode 100644 index 0000000..eea03f0 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/pump-fun.json @@ -0,0 +1,925 @@ +{ + "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P", + "metadata": { + "name": "pump", + "version": "0.1.0", + "spec": "0.1.0" + }, + "instructions": [ + { + "name": "initialize", + "discriminator": [175, 175, 109, 31, 13, 152, 155, 237], + "docs": ["Creates the global state."], + "accounts": [ + { + "name": "global", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108 + ] + } + ] + } + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [] + }, + { + "name": "setParams", + "discriminator": [165, 31, 134, 53, 189, 180, 130, 255], + "docs": ["Sets the global state parameters."], + "accounts": [ + { + "name": "global", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108 + ] + } + ] + } + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "address": "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1" + }, + { + "name": "program", + "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" + } + ], + "args": [ + { + "name": "feeRecipient", + "type": "pubkey" + }, + { + "name": "initialVirtualTokenReserves", + "type": "u64" + }, + { + "name": "initialVirtualSolReserves", + "type": "u64" + }, + { + "name": "initialRealTokenReserves", + "type": "u64" + }, + { + "name": "tokenTotalSupply", + "type": "u64" + }, + { + "name": "feeBasisPoints", + "type": "u64" + } + ] + }, + { + "name": "create", + "discriminator": [24, 30, 200, 40, 5, 28, 7, 119], + "docs": ["Creates a new coin and bonding curve."], + "accounts": [ + { + "name": "mint", + "writable": true, + "signer": true + }, + { + "name": "mint_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 109, + 105, + 110, + 116, + 45, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "associated_bonding_curve", + "writable": true, + "signer": false + }, + { + "name": "global", + "writable": false, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108 + ] + } + ] + } + }, + { + "name": "mpl_token_metadata", + "address": "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" + }, + { + "name": "metadata", + "writable": true, + "signer": false + }, + { + "name": "user", + "isMut": true, + "isSigner": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "rent", + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "name": "event_authority", + "address": "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1" + }, + { + "name": "program", + "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" + } + ], + "args": [ + { + "name": "name", + "type": "string" + }, + { + "name": "symbol", + "type": "string" + }, + { + "name": "uri", + "type": "string" + } + ] + }, + { + "name": "buy", + "discriminator": [102, 6, 61, 18, 1, 218, 235, 234], + "docs": ["Buys tokens from a bonding curve."], + "accounts": [ + { + "name": "global", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108 + ] + } + ] + } + }, + { + "name": "fee_recipient", + "writable": true, + "signer": false + }, + { + "name": "mint", + "writable": false, + "signer": false + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "associated_bonding_curve", + "writable": true, + "signer": false + }, + { + "name": "associated_user", + "writable": true, + "signer": false + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "rent", + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "name": "event_authority", + "address": "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1" + }, + { + "name": "program", + "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "maxSolCost", + "type": "u64" + } + ] + }, + { + "name": "sell", + "discriminator": [51, 230, 133, 164, 1, 127, 131, 173], + "docs": ["Sells tokens into a bonding curve."], + "accounts": [ + { + "name": "global", + "writable": false, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108 + ] + } + ] + } + }, + { + "name": "feeRecipient", + "writable": true, + "signer": false + }, + { + "name": "mint", + "writable": false, + "signer": false + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "associatedBondingCurve", + "writable": true, + "signer": false + }, + { + "name": "associatedUser", + "writable": true, + "signer": false + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "event_authority", + "address": "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1" + }, + { + "name": "program", + "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "minSolOutput", + "type": "u64" + } + ] + }, + { + "name": "withdraw", + "discriminator": [183, 18, 70, 156, 148, 109, 161, 34], + "docs": [ + "Allows the admin to withdraw liquidity for a migration once the bonding curve completes" + ], + "accounts": [ + { + "name": "global", + "writable": false, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108 + ] + } + ] + } + }, + { + "name": "lastWithdraw", + "writable": true, + "signer": false + }, + { + "name": "mint", + "writable": false, + "signer": false + }, + { + "name": "bonding_curve", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "associatedBondingCurve", + "writable": true, + "signer": false + }, + { + "name": "associatedUser", + "writable": true, + "signer": false + }, + { + "name": "user", + "writable": true, + "signer": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "rent", + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "name": "event_authority", + "address": "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1" + }, + { + "name": "program", + "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" + } + ], + "args": [] + } + ], + "accounts": [ + { + "name": "BondingCurve", + "discriminator": [ + 23, + 183, + 248, + 55, + 96, + 216, + 172, + 96 + ] + }, + { + "name": "Global", + "discriminator": [ + 167, + 232, + 232, + 177, + 200, + 108, + 114, + 127 + ] + } + ], + "events": [ + { + "name": "CreateEvent", + "discriminator": [27, 114, 169, 77, 222, 235, 99, 118] + }, + { + "name": "TradeEvent", + "discriminator": [189, 219, 127, 211, 78, 230, 97, 238] + }, + { + "name": "CompleteEvent", + "discriminator": [95, 114, 97, 156, 212, 46, 152, 8] + }, + { + "name": "SetParamsEvent", + "discriminator": [223, 195, 159, 246, 62, 48, 143, 131] + } + ], + "types": [ + { + "name": "Global", + "type": { + "kind": "struct", + "fields": [ + { + "name": "initialized", + "type": "bool" + }, + { + "name": "authority", + "type": "pubkey" + }, + { + "name": "feeRecipient", + "type": "pubkey" + }, + { + "name": "initialVirtualTokenReserves", + "type": "u64" + }, + { + "name": "initialVirtualSolReserves", + "type": "u64" + }, + { + "name": "initialRealTokenReserves", + "type": "u64" + }, + { + "name": "tokenTotalSupply", + "type": "u64" + }, + { + "name": "feeBasisPoints", + "type": "u64" + } + ] + } + }, + { + "name": "LastWithdraw", + "type": { + "kind": "struct", + "fields": [ + { + "name": "lastWithdrawTimestamp", + "type": "i64" + } + ] + } + }, + { + "name": "BondingCurve", + "type": { + "kind": "struct", + "fields": [ + { + "name": "virtualTokenReserves", + "type": "u64" + }, + { + "name": "virtualSolReserves", + "type": "u64" + }, + { + "name": "realTokenReserves", + "type": "u64" + }, + { + "name": "realSolReserves", + "type": "u64" + }, + { + "name": "tokenTotalSupply", + "type": "u64" + }, + { + "name": "complete", + "type": "bool" + } + ] + } + }, + { + "name": "CreateEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "name", + "type": "string", + "index": false + }, + { + "name": "symbol", + "type": "string", + "index": false + }, + { + "name": "uri", + "type": "string", + "index": false + }, + { + "name": "mint", + "type": "pubkey", + "index": false + }, + { + "name": "bondingCurve", + "type": "pubkey", + "index": false + }, + { + "name": "user", + "type": "pubkey", + "index": false + } + ] + } + }, + { + "name": "TradeEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "mint", + "type": "pubkey", + "index": false + }, + { + "name": "solAmount", + "type": "u64", + "index": false + }, + { + "name": "tokenAmount", + "type": "u64", + "index": false + }, + { + "name": "isBuy", + "type": "bool", + "index": false + }, + { + "name": "user", + "type": "pubkey", + "index": false + }, + { + "name": "timestamp", + "type": "i64", + "index": false + }, + { + "name": "virtualSolReserves", + "type": "u64", + "index": false + }, + { + "name": "virtualTokenReserves", + "type": "u64", + "index": false + }, + { + "name": "realSolReserves", + "type": "u64", + "index": false + }, + { + "name": "realTokenReserves", + "type": "u64", + "index": false + } + ] + } + }, + { + "name": "CompleteEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "user", + "type": "pubkey", + "index": false + }, + { + "name": "mint", + "type": "pubkey", + "index": false + }, + { + "name": "bondingCurve", + "type": "pubkey", + "index": false + }, + { + "name": "timestamp", + "type": "i64", + "index": false + } + ] + } + }, + { + "name": "SetParamsEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "feeRecipient", + "type": "pubkey", + "index": false + }, + { + "name": "initialVirtualTokenReserves", + "type": "u64", + "index": false + }, + { + "name": "initialVirtualSolReserves", + "type": "u64", + "index": false + }, + { + "name": "initialRealTokenReserves", + "type": "u64", + "index": false + }, + { + "name": "tokenTotalSupply", + "type": "u64", + "index": false + }, + { + "name": "feeBasisPoints", + "type": "u64", + "index": false + } + ] + } + } + ], + "errors": [ + { + "code": 6000, + "name": "NotAuthorized", + "msg": "The given account is not authorized to execute this instruction." + }, + { + "code": 6001, + "name": "AlreadyInitialized", + "msg": "The program is already initialized." + }, + { + "code": 6002, + "name": "TooMuchSolRequired", + "msg": "slippage: Too much SOL required to buy the given amount of tokens." + }, + { + "code": 6003, + "name": "TooLittleSolReceived", + "msg": "slippage: Too little SOL received to sell the given amount of tokens." + }, + { + "code": 6004, + "name": "MintDoesNotMatchBondingCurve", + "msg": "The mint does not match the bonding curve." + }, + { + "code": 6005, + "name": "BondingCurveComplete", + "msg": "The bonding curve has completed and liquidity migrated to raydium." + }, + { + "code": 6006, + "name": "BondingCurveNotComplete", + "msg": "The bonding curve has not completed." + }, + { + "code": 6007, + "name": "NotInitialized", + "msg": "The program is not initialized." + }, + { + "code": 6008, + "name": "WithdrawTooFrequent", + "msg": "Withdraw too frequent" + } + ] +} diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/pump-fun.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/pump-fun.ts new file mode 100644 index 0000000..99cc93e --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/IDL/pump-fun.ts @@ -0,0 +1,865 @@ +export type PumpFun = { + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + metadata: { + name: "pump"; + version: "0.1.0"; + spec: "0.1.0"; + }; + instructions: [ + { + name: "initialize"; + discriminator: [175, 175, 109, 31, 13, 152, 155, 237]; + docs: ["Creates the global state."]; + accounts: [ + { + name: "global"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + } + ]; + args: []; + }, + { + name: "setParams"; + discriminator: [165, 31, 134, 53, 189, 180, 130, 255]; + docs: ["Sets the global state parameters."]; + accounts: [ + { + name: "global"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: [ + { + name: "feeRecipient"; + type: "pubkey"; + }, + { + name: "initialVirtualTokenReserves"; + type: "u64"; + }, + { + name: "initialVirtualSolReserves"; + type: "u64"; + }, + { + name: "initialRealTokenReserves"; + type: "u64"; + }, + { + name: "tokenTotalSupply"; + type: "u64"; + }, + { + name: "feeBasisPoints"; + type: "u64"; + } + ]; + }, + { + name: "create"; + discriminator: [24, 30, 200, 40, 5, 28, 7, 119]; + docs: ["Creates a new coin and bonding curve."]; + accounts: [ + { + name: "mint"; + writable: true; + signer: true; + }, + { + name: "mint_authority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 109, + 105, + 110, + 116, + 45, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "bondingCurve"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ]; + }, + { + kind: "account"; + path: "mint"; + } + ]; + }; + }, + { + name: "associatedBondingCurve"; + writable: true; + signer: false; + }, + { + name: "global"; + writable: false; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "mplTokenMetadata"; + address: "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"; + }, + { + name: "metadata"; + writable: true; + signer: false; + }, + { + name: "user"; + isMut: true; + isSigner: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "associatedTokenProgram"; + address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; + }, + { + name: "rent"; + address: "SysvarRent111111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: [ + { + name: "name"; + type: "string"; + }, + { + name: "symbol"; + type: "string"; + }, + { + name: "uri"; + type: "string"; + } + ]; + }, + { + name: "buy"; + discriminator: [102, 6, 61, 18, 1, 218, 235, 234]; + docs: ["Buys tokens from a bonding curve."]; + accounts: [ + { + name: "global"; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "feeRecipient"; + writable: true; + signer: false; + }, + { + name: "mint"; + writable: false; + signer: false; + }, + { + name: "bondingCurve"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ]; + }, + { + kind: "account"; + path: "mint"; + } + ]; + }; + }, + { + name: "associatedBondingCurve"; + writable: true; + signer: false; + }, + { + name: "associatedUser"; + writable: true; + signer: false; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "rent"; + address: "SysvarRent111111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: [ + { + name: "amount"; + type: "u64"; + }, + { + name: "maxSolCost"; + type: "u64"; + } + ]; + }, + { + name: "sell"; + discriminator: [51, 230, 133, 164, 1, 127, 131, 173]; + docs: ["Sells tokens into a bonding curve."]; + accounts: [ + { + name: "global"; + writable: false; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "feeRecipient"; + writable: true; + signer: false; + }, + { + name: "mint"; + writable: false; + signer: false; + }, + { + name: "bondingCurve"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ]; + }, + { + kind: "account"; + path: "mint"; + } + ]; + }; + }, + { + name: "associatedBondingCurve"; + writable: true; + signer: false; + }, + { + name: "associatedUser"; + writable: true; + signer: false; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "associatedTokenProgram"; + address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: [ + { + name: "amount"; + type: "u64"; + }, + { + name: "minSolOutput"; + type: "u64"; + } + ]; + }, + { + name: "withdraw"; + discriminator: [183, 18, 70, 156, 148, 109, 161, 34]; + docs: [ + "Allows the admin to withdraw liquidity for a migration once the bonding curve completes" + ]; + accounts: [ + { + name: "global"; + writable: false; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "lastWithdraw"; + writable: true; + signer: false; + }, + { + name: "mint"; + writable: false; + signer: false; + }, + { + name: "bondingCurve"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ]; + }, + { + kind: "account"; + path: "mint"; + } + ]; + }; + }, + { + name: "associatedBondingCurve"; + writable: true; + signer: false; + }, + { + name: "associatedUser"; + writable: true; + signer: false; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "system_program"; + address: "11111111111111111111111111111111"; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "rent"; + address: "SysvarRent111111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: []; + } + ]; + accounts: [ + { + name: "bondingCurve"; + discriminator: [23, 183, 248, 55, 96, 216, 172, 96]; + }, + { + name: "global"; + discriminator: [167, 232, 232, 177, 200, 108, 114, 127]; + } + ]; + events: [ + { + name: "createEvent"; + discriminator: [27, 114, 169, 77, 222, 235, 99, 118]; + }, + { + name: "tradeEvent"; + discriminator: [189, 219, 127, 211, 78, 230, 97, 238]; + }, + { + name: "completeEvent"; + discriminator: [95, 114, 97, 156, 212, 46, 152, 8]; + }, + { + name: "setParamsEvent"; + discriminator: [223, 195, 159, 246, 62, 48, 143, 131]; + } + ]; + types: [ + { + name: "global"; + type: { + kind: "struct"; + fields: [ + { + name: "initialized"; + type: "bool"; + }, + { + name: "authority"; + type: "pubkey"; + }, + { + name: "feeRecipient"; + type: "pubkey"; + }, + { + name: "initialVirtualTokenReserves"; + type: "u64"; + }, + { + name: "initialVirtualSolReserves"; + type: "u64"; + }, + { + name: "initialRealTokenReserves"; + type: "u64"; + }, + { + name: "tokenTotalSupply"; + type: "u64"; + }, + { + name: "feeBasisPoints"; + type: "u64"; + } + ]; + }; + }, + { + name: "lastWithdraw"; + type: { + kind: "struct"; + fields: [ + { + name: "lastWithdrawTimestamp"; + type: "i64"; + } + ]; + }; + }, + { + name: "bondingCurve"; + type: { + kind: "struct"; + fields: [ + { + name: "virtualTokenReserves"; + type: "u64"; + }, + { + name: "virtualSolReserves"; + type: "u64"; + }, + { + name: "realTokenReserves"; + type: "u64"; + }, + { + name: "realSolReserves"; + type: "u64"; + }, + { + name: "tokenTotalSupply"; + type: "u64"; + }, + { + name: "complete"; + type: "bool"; + } + ]; + }; + }, + { + name: "createEvent"; + type: { + kind: "struct"; + fields: [ + { + name: "name"; + type: "string"; + index: false; + }, + { + name: "symbol"; + type: "string"; + index: false; + }, + { + name: "uri"; + type: "string"; + index: false; + }, + { + name: "mint"; + type: "pubkey"; + index: false; + }, + { + name: "bondingCurve"; + type: "pubkey"; + index: false; + }, + { + name: "user"; + type: "pubkey"; + index: false; + } + ]; + }; + }, + { + name: "tradeEvent"; + type: { + kind: "struct"; + fields: [ + { + name: "mint"; + type: "pubkey"; + index: false; + }, + { + name: "solAmount"; + type: "u64"; + index: false; + }, + { + name: "tokenAmount"; + type: "u64"; + index: false; + }, + { + name: "isBuy"; + type: "bool"; + index: false; + }, + { + name: "user"; + type: "pubkey"; + index: false; + }, + { + name: "timestamp"; + type: "i64"; + index: false; + }, + { + name: "virtualSolReserves"; + type: "u64"; + index: false; + }, + { + name: "virtualTokenReserves"; + type: "u64"; + index: false; + }, + { + name: "realSolReserves"; + type: "u64"; + index: false; + }, + { + name: "realTokenReserves"; + type: "u64"; + index: false; + } + ]; + }; + }, + { + name: "completeEvent"; + type: { + kind: "struct"; + fields: [ + { + name: "user"; + type: "pubkey"; + index: false; + }, + { + name: "mint"; + type: "pubkey"; + index: false; + }, + { + name: "bondingCurve"; + type: "pubkey"; + index: false; + }, + { + name: "timestamp"; + type: "i64"; + index: false; + } + ]; + }; + }, + { + name: "setParamsEvent"; + type: { + kind: "struct"; + fields: [ + { + name: "feeRecipient"; + type: "pubkey"; + index: false; + }, + { + name: "initialVirtualTokenReserves"; + type: "u64"; + index: false; + }, + { + name: "initialVirtualSolReserves"; + type: "u64"; + index: false; + }, + { + name: "initialRealTokenReserves"; + type: "u64"; + index: false; + }, + { + name: "tokenTotalSupply"; + type: "u64"; + index: false; + }, + { + name: "feeBasisPoints"; + type: "u64"; + index: false; + } + ]; + }; + } + ]; + errors: [ + { + code: 6000; + name: "NotAuthorized"; + msg: "The given account is not authorized to execute this instruction."; + }, + { + code: 6001; + name: "AlreadyInitialized"; + msg: "The program is already initialized."; + }, + { + code: 6002; + name: "TooMuchSolRequired"; + msg: "slippage: Too much SOL required to buy the given amount of tokens."; + }, + { + code: 6003; + name: "TooLittleSolReceived"; + msg: "slippage: Too little SOL received to sell the given amount of tokens."; + }, + { + code: 6004; + name: "MintDoesNotMatchBondingCurve"; + msg: "The mint does not match the bonding curve."; + }, + { + code: 6005; + name: "BondingCurveComplete"; + msg: "The bonding curve has completed and liquidity migrated to raydium."; + }, + { + code: 6006; + name: "BondingCurveNotComplete"; + msg: "The bonding curve has not completed."; + }, + { + code: 6007; + name: "NotInitialized"; + msg: "The program is not initialized."; + }, + { + code: 6008; + name: "WithdrawTooFrequent"; + msg: "Withdraw too frequent"; + } + ]; +}; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/amm.js b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/amm.ts similarity index 73% rename from src/pumpfunsdk/pumpdotfun-sdk/src/amm.js rename to src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/amm.ts index 1799c3d..f48889a 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/amm.js +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/amm.ts @@ -1,26 +1,26 @@ -const { BondingCurveAccount } =require ("./bondingCurveAccount"); -const { GlobalAccount } =require ("./globalAccount"); +import { BondingCurveAccount } from "./bondingCurveAccount"; +import { GlobalAccount } from "./globalAccount"; -// type BuyResult = { -// token_amount: bigint; -// sol_amount: bigint; -// }; +export type BuyResult = { + token_amount: bigint; + sol_amount: bigint; +}; -// type SellResult = { -// token_amount: bigint; -// sol_amount: bigint; -// }; +export type SellResult = { + token_amount: bigint; + sol_amount: bigint; +}; -class AMM { +export class AMM { constructor( - virtualSolReserves, - virtualTokenReserves, - realSolReserves, - realTokenReserves, - initialVirtualTokenReserves + public virtualSolReserves: bigint, + public virtualTokenReserves: bigint, + public realSolReserves: bigint, + public realTokenReserves: bigint, + public initialVirtualTokenReserves: bigint ) {} - static fromGlobalAccount(global) { + static fromGlobalAccount(global: GlobalAccount): AMM { return new AMM( global.initialVirtualSolReserves, global.initialVirtualTokenReserves, @@ -30,7 +30,7 @@ class AMM { ); } - static fromBondingCurveAccount(bonding_curve, initialVirtualTokenReserves) { + static fromBondingCurveAccount(bonding_curve: BondingCurveAccount, initialVirtualTokenReserves: bigint): AMM { return new AMM( bonding_curve.virtualSolReserves, bonding_curve.virtualTokenReserves, @@ -40,7 +40,7 @@ class AMM { ); } - getBuyPrice(tokens){ + getBuyPrice(tokens: bigint): bigint { const product_of_reserves = this.virtualSolReserves * this.virtualTokenReserves; const new_virtual_token_reserves = this.virtualTokenReserves - tokens; const new_virtual_sol_reserves = product_of_reserves / new_virtual_token_reserves + 1n; @@ -48,7 +48,7 @@ class AMM { return amount_needed > 0n ? amount_needed : 0n; } - applyBuy(token_amount ) { + applyBuy(token_amount: bigint): BuyResult { const final_token_amount = token_amount > this.realTokenReserves ? this.realTokenReserves : token_amount; const sol_amount = this.getBuyPrice(final_token_amount); @@ -64,7 +64,7 @@ class AMM { } } - applySell(token_amount ) { + applySell(token_amount: bigint): SellResult { this.virtualTokenReserves = this.virtualTokenReserves + token_amount; this.realTokenReserves = this.realTokenReserves + token_amount; @@ -79,13 +79,10 @@ class AMM { } } - getSellPrice(tokens ) { + getSellPrice(tokens: bigint): bigint { const scaling_factor = this.initialVirtualTokenReserves; const token_sell_proportion = (tokens * scaling_factor) / this.virtualTokenReserves; const sol_received = (this.virtualSolReserves * token_sell_proportion) / scaling_factor; return sol_received < this.realSolReserves ? sol_received : this.realSolReserves; } -} -module.exports = { - AMM } \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/bondingCurveAccount.js b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/bondingCurveAccount.ts similarity index 76% rename from src/pumpfunsdk/pumpdotfun-sdk/src/bondingCurveAccount.js rename to src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/bondingCurveAccount.ts index 70caf83..f2133e5 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/bondingCurveAccount.js +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/bondingCurveAccount.ts @@ -1,16 +1,22 @@ -const { struct, bool, u64, Layout } =require ("@coral-xyz/borsh"); - -class BondingCurveAccount { +import { struct, bool, u64, Layout } from "@coral-xyz/borsh"; +export class BondingCurveAccount { + public discriminator: bigint; + public virtualTokenReserves: bigint; + public virtualSolReserves: bigint; + public realTokenReserves: bigint; + public realSolReserves: bigint; + public tokenTotalSupply: bigint; + public complete: boolean; constructor( - discriminator, - virtualTokenReserves, - virtualSolReserves, - realTokenReserves, - realSolReserves, - tokenTotalSupply, - complete + discriminator: bigint, + virtualTokenReserves: bigint, + virtualSolReserves: bigint, + realTokenReserves: bigint, + realSolReserves: bigint, + tokenTotalSupply: bigint, + complete: boolean ) { this.discriminator = discriminator; this.virtualTokenReserves = virtualTokenReserves; @@ -21,7 +27,7 @@ class BondingCurveAccount { this.complete = complete; } - getBuyPrice(amount) { + getBuyPrice(amount: bigint): bigint { if (this.complete) { throw new Error("Curve is complete"); } @@ -46,7 +52,7 @@ class BondingCurveAccount { return s < this.realTokenReserves ? s : this.realTokenReserves; } - getSellPrice(amount , feeBasisPoints ) { + getSellPrice(amount: bigint, feeBasisPoints: bigint): bigint { if (this.complete) { throw new Error("Curve is complete"); } @@ -66,7 +72,7 @@ class BondingCurveAccount { return n - a; } - getMarketCapSOL() { + getMarketCapSOL(): bigint { if (this.virtualTokenReserves === 0n) { return 0n; } @@ -77,7 +83,7 @@ class BondingCurveAccount { ); } - getFinalMarketCapSOL(feeBasisPoints){ + getFinalMarketCapSOL(feeBasisPoints: bigint): bigint { let totalSellValue = this.getBuyOutPrice( this.realTokenReserves, feeBasisPoints @@ -92,7 +98,7 @@ class BondingCurveAccount { return (this.tokenTotalSupply * totalVirtualValue) / totalVirtualTokens; } - getBuyOutPrice(amount, feeBasisPoints) { + getBuyOutPrice(amount: bigint, feeBasisPoints: bigint): bigint { let solTokens = amount < this.realSolReserves ? this.realSolReserves : amount; let totalSellValue = @@ -103,8 +109,8 @@ class BondingCurveAccount { return totalSellValue + fee; } - static fromBuffer(buffer) { - const structure = struct([ + public static fromBuffer(buffer: Buffer): BondingCurveAccount { + const structure: Layout = struct([ u64("discriminator"), u64("virtualTokenReserves"), u64("virtualSolReserves"), @@ -126,5 +132,3 @@ class BondingCurveAccount { ); } } - -module.exports = {BondingCurveAccount}; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/events.js b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/events.ts similarity index 75% rename from src/pumpfunsdk/pumpdotfun-sdk/src/events.js rename to src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/events.ts index 8405c4d..bf001f8 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/events.js +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/events.ts @@ -1,6 +1,12 @@ -const { PublicKey } =require ("@solana/web3.js"); +import { PublicKey } from "@solana/web3.js"; +import { + CompleteEvent, + CreateEvent, + SetParamsEvent, + TradeEvent, +} from "./types"; - function toCreateEvent(event) { +export function toCreateEvent(event: CreateEvent): CreateEvent { return { name: event.name, symbol: event.symbol, @@ -11,7 +17,7 @@ const { PublicKey } =require ("@solana/web3.js"); }; } - function toCompleteEvent(event) { +export function toCompleteEvent(event: CompleteEvent): CompleteEvent { return { user: new PublicKey(event.user), mint: new PublicKey(event.mint), @@ -20,7 +26,7 @@ const { PublicKey } =require ("@solana/web3.js"); }; } - function toTradeEvent(event) { +export function toTradeEvent(event: TradeEvent): TradeEvent { return { mint: new PublicKey(event.mint), solAmount: BigInt(event.solAmount), @@ -35,7 +41,7 @@ const { PublicKey } =require ("@solana/web3.js"); }; } - function toSetParamsEvent(event) { +export function toSetParamsEvent(event: SetParamsEvent): SetParamsEvent { return { feeRecipient: new PublicKey(event.feeRecipient), initialVirtualTokenReserves: BigInt(event.initialVirtualTokenReserves), diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/globalAccount.js b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/globalAccount.ts similarity index 62% rename from src/pumpfunsdk/pumpdotfun-sdk/src/globalAccount.js rename to src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/globalAccount.ts index 00451ef..b422c50 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/globalAccount.js +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/globalAccount.ts @@ -1,19 +1,27 @@ -const { PublicKey } =require( "@solana/web3.js"); -const { struct, bool, u64, publicKey, Layout } =require( "@coral-xyz/borsh"); - -class GlobalAccount { +import { PublicKey } from "@solana/web3.js"; +import { struct, bool, u64, publicKey, Layout } from "@coral-xyz/borsh"; +export class GlobalAccount { + public discriminator: bigint; + public initialized: boolean = false; + public authority: PublicKey; + public feeRecipient: PublicKey; + public initialVirtualTokenReserves: bigint; + public initialVirtualSolReserves: bigint; + public initialRealTokenReserves: bigint; + public tokenTotalSupply: bigint; + public feeBasisPoints: bigint; constructor( - discriminator, - initialized, - authority, - feeRecipient, - initialVirtualTokenReserves, - initialVirtualSolReserves, - initialRealTokenReserves, - tokenTotalSupply, - feeBasisPoints + discriminator: bigint, + initialized: boolean, + authority: PublicKey, + feeRecipient: PublicKey, + initialVirtualTokenReserves: bigint, + initialVirtualSolReserves: bigint, + initialRealTokenReserves: bigint, + tokenTotalSupply: bigint, + feeBasisPoints: bigint ) { this.discriminator = discriminator; this.initialized = initialized; @@ -26,7 +34,7 @@ class GlobalAccount { this.feeBasisPoints = feeBasisPoints; } - getInitialBuyPrice(amount) { + getInitialBuyPrice(amount: bigint): bigint { if (amount <= 0n) { return 0n; } @@ -40,8 +48,8 @@ class GlobalAccount { : this.initialRealTokenReserves; } - static fromBuffer(buffer){ - const structure = struct([ + public static fromBuffer(buffer: Buffer): GlobalAccount { + const structure: Layout = struct([ u64("discriminator"), bool("initialized"), publicKey("authority"), @@ -67,5 +75,3 @@ class GlobalAccount { ); } } - -module.exports = {GlobalAccount}; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/index.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/index.ts new file mode 100644 index 0000000..79f3450 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/index.ts @@ -0,0 +1,7 @@ +export * from './pumpfun' +export * from './util' +export * from './types' +export * from './events' +export * from './globalAccount' +export * from './bondingCurveAccount' +export * from './amm' diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/pumpfun.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/pumpfun.ts new file mode 100644 index 0000000..2883cbd --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/pumpfun.ts @@ -0,0 +1,459 @@ +import { + Commitment, + Connection, + Finality, + Keypair, + PublicKey, + Transaction, +} from "@solana/web3.js"; +import { Program, Provider } from "@coral-xyz/anchor"; +import { GlobalAccount } from "./globalAccount"; +import { + CompleteEvent, + CreateEvent, + CreateTokenMetadata, + PriorityFee, + PumpFunEventHandlers, + PumpFunEventType, + SetParamsEvent, + TradeEvent, + TransactionResult, +} from "./types"; +import { + toCompleteEvent, + toCreateEvent, + toSetParamsEvent, + toTradeEvent, +} from "./events"; +import { + createAssociatedTokenAccountIdempotentInstruction, + createAssociatedTokenAccountInstruction, + getAccount, + getAssociatedTokenAddress, +} from "@solana/spl-token"; +import { BondingCurveAccount } from "./bondingCurveAccount"; +const {BN} = require('bn.js'); +import { + DEFAULT_COMMITMENT, + DEFAULT_FINALITY, + calculateWithSlippageBuy, + calculateWithSlippageSell, + sendTx, +} from "./util"; +import { PumpFun, IDL } from "./IDL"; +const PROGRAM_ID = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; +const MPL_TOKEN_METADATA_PROGRAM_ID = + "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"; + +export const GLOBAL_ACCOUNT_SEED = "global"; +export const MINT_AUTHORITY_SEED = "mint-authority"; +export const BONDING_CURVE_SEED = "bonding-curve"; +export const METADATA_SEED = "metadata"; + +export const DEFAULT_DECIMALS = 6; + +export class PumpFunSDK { + public program: Program; + public connection: Connection; + constructor(provider?: Provider) { + this.program = new Program(IDL as PumpFun, provider); + this.connection = this.program.provider.connection; + } + + async createAndBuy( + creator: Keypair, + mint: Keypair, + createTokenMetadata: CreateTokenMetadata, + buyAmountSol: bigint, + slippageBasisPoints: bigint = 500n, + priorityFees?: PriorityFee, + commitment: Commitment = DEFAULT_COMMITMENT, + finality: Finality = DEFAULT_FINALITY + ): Promise { + let tokenMetadata = await this.createTokenMetadata(createTokenMetadata); + + let createTx = await this.getCreateInstructions( + creator.publicKey, + createTokenMetadata.name, + createTokenMetadata.symbol, + tokenMetadata.metadataUri, + mint + ); + + let newTx = new Transaction().add(createTx); + + if (buyAmountSol > 0) { + const globalAccount = await this.getGlobalAccount(commitment); + const buyAmount = globalAccount.getInitialBuyPrice(buyAmountSol); + const buyAmountWithSlippage = calculateWithSlippageBuy( + buyAmountSol, + slippageBasisPoints + ); + + const buyTx = await this.getBuyInstructions( + creator.publicKey, + mint.publicKey, + globalAccount.feeRecipient, + buyAmount, + buyAmountWithSlippage + ); + + newTx.add(buyTx); + } + + return newTx; + } + + async buy( + buyer: Keypair, + mint: PublicKey, + buyAmountSol: bigint, + slippageBasisPoints: bigint = 500n, + priorityFees?: PriorityFee, + commitment: Commitment = DEFAULT_COMMITMENT, + finality: Finality = DEFAULT_FINALITY + ): Promise { + let final_tx = new Transaction(); + let buyTx = await this.getBuyInstructionsBySolAmount( + buyer.publicKey, + mint, + buyAmountSol, + slippageBasisPoints, + commitment); + final_tx.add(buyTx); + return final_tx; + } + + async sell( + seller: Keypair, + mint: PublicKey, + sellTokenAmount: bigint, + slippageBasisPoints: bigint = 10000n, + priorityFees?: PriorityFee, + commitment: Commitment = DEFAULT_COMMITMENT, + finality: Finality = DEFAULT_FINALITY + ): Promise { + let final_tx = new Transaction(); + let sellTx = await this.getSellInstructionsByTokenAmount( + seller.publicKey, + mint, + sellTokenAmount, + slippageBasisPoints, + commitment + ); + final_tx.add(sellTx); + return final_tx; + } + async getBalance(account: PublicKey, mint: PublicKey) { + console.log("Fetching Ata..."); + const associatedTokenAddress = await getAssociatedTokenAddress( + mint, + account, + true + ); + let accountInfo:any = null + try { + accountInfo = await getAccount(this.connection, associatedTokenAddress, "confirmed"); + } catch (error) { + console.log("Token balance not found"); + return 0; + } + // + accountInfo = await getAccount(this.connection, associatedTokenAddress, "confirmed"); + return accountInfo.amount; + } + //create token instructions + async getCreateInstructions( + creator: PublicKey, + name: string, + symbol: string, + uri: string, + mint: Keypair + ) { + const mplTokenMetadata = new PublicKey(MPL_TOKEN_METADATA_PROGRAM_ID); + + const [metadataPDA] = PublicKey.findProgramAddressSync( + [ + Buffer.from(METADATA_SEED), + mplTokenMetadata.toBuffer(), + mint.publicKey.toBuffer(), + ], + mplTokenMetadata + ); + + const associatedBondingCurve = await getAssociatedTokenAddress( + mint.publicKey, + this.getBondingCurvePDA(mint.publicKey), + true + ); + + return this.program.methods + .create(name, symbol, uri) + .accounts({ + mint: mint.publicKey, + associatedBondingCurve: associatedBondingCurve, + metadata: metadataPDA, + user: creator, + }) + .signers([mint]) + .transaction(); + } + + async getBuyInstructionsBySolAmount( + buyer: PublicKey, + mint: PublicKey, + buyAmountSol: bigint, + slippageBasisPoints: bigint = 500n, + commitment: Commitment = DEFAULT_COMMITMENT + ) { + let bondingCurveAccount = await this.getBondingCurveAccount( + mint, + commitment + ); + if (!bondingCurveAccount) { + throw new Error(`Bonding curve account not found: ${mint.toBase58()}`); + } + + let buyAmount = bondingCurveAccount.getBuyPrice(buyAmountSol); + let buyAmountWithSlippage = calculateWithSlippageBuy( + buyAmountSol, + slippageBasisPoints + ); + + // let globalAccount = await this.getGlobalAccount(commitment); + const feeRecipient = new PublicKey("CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM"); + return await this.getBuyInstructions( + buyer, + mint, + feeRecipient, + buyAmount, + buyAmountWithSlippage + ); + } + + //buy + async getBuyInstructions( + buyer: PublicKey, + mint: PublicKey, + feeRecipient: PublicKey, + amount: bigint, + solAmount: bigint, + commitment: Commitment = DEFAULT_COMMITMENT + ) { + const associatedBondingCurve = await getAssociatedTokenAddress( + mint, + this.getBondingCurvePDA(mint), + true + ); + + const associatedUser = await getAssociatedTokenAddress(mint, buyer, false); + let transaction = new Transaction(); + // try { + // await getAccount(this.connection, associatedUser, commitment); + // } catch (e) { + transaction.add( + createAssociatedTokenAccountIdempotentInstruction( + buyer, + associatedUser, + buyer, + mint + ) + ); + //} + transaction.add( + await this.program.methods + .buy(new BN(amount.toString()), new BN(solAmount.toString())) + .accounts({ + feeRecipient: feeRecipient, + mint: mint, + associatedBondingCurve: associatedBondingCurve, + associatedUser: associatedUser, + user: buyer, + }) + .transaction() + ); + + return transaction; + } + async delay(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + //sell + async getSellInstructionsByTokenAmount( + seller: PublicKey, + mint: PublicKey, + sellTokenAmount: bigint, + slippageBasisPoints: bigint = 500n, + commitment: Commitment = DEFAULT_COMMITMENT + ) { + + let bondingCurveAccount = await this.getBondingCurveAccount( + mint, + commitment + ); + if (!bondingCurveAccount) { + throw new Error(`Bonding curve account not found: ${mint.toBase58()}`); + } + + let globalAccount = await this.getGlobalAccount(commitment); + + let minSolOutput = bondingCurveAccount.getSellPrice( + sellTokenAmount, + globalAccount.feeBasisPoints + ); + let sellAmountWithSlippage = calculateWithSlippageSell( + minSolOutput, + slippageBasisPoints + ); + return await this.getSellInstructions( + seller, + mint, + globalAccount.feeRecipient, + sellTokenAmount, + sellAmountWithSlippage + ); + } + + async getSellInstructions( + seller: PublicKey, + mint: PublicKey, + feeRecipient: PublicKey, + amount: bigint, + minSolOutput: bigint + ) { + const associatedBondingCurve = await getAssociatedTokenAddress( + mint, + this.getBondingCurvePDA(mint), + true + ); + + const associatedUser = await getAssociatedTokenAddress(mint, seller, false); + + let transaction = new Transaction(); + + transaction.add( + await this.program.methods + .sell(new BN(amount.toString()), new BN(minSolOutput.toString())) + .accounts({ + feeRecipient: feeRecipient, + mint: mint, + associatedBondingCurve: associatedBondingCurve, + associatedUser: associatedUser, + user: seller, + }) + .transaction() + ); + + return transaction; + } + + async getBondingCurveAccount( + mint: PublicKey, + commitment: Commitment = DEFAULT_COMMITMENT + ) { + const tokenAccount = await this.connection.getAccountInfo( + this.getBondingCurvePDA(mint), + commitment + ); + if (!tokenAccount) { + return null; + } + return BondingCurveAccount.fromBuffer(tokenAccount!.data); + } + + async getGlobalAccount(commitment: Commitment = DEFAULT_COMMITMENT) { + const [globalAccountPDA] = PublicKey.findProgramAddressSync( + [Buffer.from(GLOBAL_ACCOUNT_SEED)], + new PublicKey(PROGRAM_ID) + ); + + const tokenAccount = await this.connection.getAccountInfo( + globalAccountPDA, + commitment + ); + + return GlobalAccount.fromBuffer(tokenAccount!.data); + } + + getBondingCurvePDA(mint: PublicKey) { + return PublicKey.findProgramAddressSync( + [Buffer.from(BONDING_CURVE_SEED), mint.toBuffer()], + this.program.programId + )[0]; + } + + async createTokenMetadata(create: CreateTokenMetadata) { + let formData = new FormData(); + formData.append("file", create.file), + formData.append("name", create.name), + formData.append("symbol", create.symbol), + formData.append("description", create.description), + formData.append("twitter", create.twitter || ""), + formData.append("telegram", create.telegram || ""), + formData.append("website", create.website || ""), + formData.append("showName", "true"); + let request = await fetch("https://pump.fun/api/ipfs", { + method: "POST", + body: formData, + }); + return request.json(); + } + + //EVENTS + addEventListener( + eventType: T, + callback: ( + event: PumpFunEventHandlers[T], + slot: number, + signature: string + ) => void + ) { + return this.program.addEventListener( + eventType, + (event: any, slot: number, signature: string) => { + let processedEvent; + switch (eventType) { + case "createEvent": + processedEvent = toCreateEvent(event as CreateEvent); + callback( + processedEvent as PumpFunEventHandlers[T], + slot, + signature + ); + break; + case "tradeEvent": + processedEvent = toTradeEvent(event as TradeEvent); + callback( + processedEvent as PumpFunEventHandlers[T], + slot, + signature + ); + break; + case "completeEvent": + processedEvent = toCompleteEvent(event as CompleteEvent); + callback( + processedEvent as PumpFunEventHandlers[T], + slot, + signature + ); + console.log("completeEvent", event, slot, signature); + break; + case "setParamsEvent": + processedEvent = toSetParamsEvent(event as SetParamsEvent); + callback( + processedEvent as PumpFunEventHandlers[T], + slot, + signature + ); + break; + default: + console.error("Unhandled event type:", eventType); + } + } + ); + } + + removeEventListener(eventId: number) { + this.program.removeEventListener(eventId); + } +} diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/types.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/types.ts new file mode 100644 index 0000000..e42c826 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/types.ts @@ -0,0 +1,80 @@ +import { PublicKey, VersionedTransactionResponse } from "@solana/web3.js"; + +export type CreateTokenMetadata = { + name: string; + symbol: string; + description: string; + file: Blob; + twitter?: string; + telegram?: string; + website?: string; +}; + +export type TokenMetadata = { + name: string; + symbol: string; + description: string; + image: string; + showName: boolean; + createdOn: string; + twitter: string; +}; + +export type CreateEvent = { + name: string; + symbol: string; + uri: string; + mint: PublicKey; + bondingCurve: PublicKey; + user: PublicKey; +}; + +export type TradeEvent = { + mint: PublicKey; + solAmount: bigint; + tokenAmount: bigint; + isBuy: boolean; + user: PublicKey; + timestamp: number; + virtualSolReserves: bigint; + virtualTokenReserves: bigint; + realSolReserves: bigint; + realTokenReserves: bigint; +}; + +export type CompleteEvent = { + user: PublicKey; + mint: PublicKey; + bondingCurve: PublicKey; + timestamp: number; +}; + +export type SetParamsEvent = { + feeRecipient: PublicKey; + initialVirtualTokenReserves: bigint; + initialVirtualSolReserves: bigint; + initialRealTokenReserves: bigint; + tokenTotalSupply: bigint; + feeBasisPoints: bigint; +}; + +export interface PumpFunEventHandlers { + createEvent: CreateEvent; + tradeEvent: TradeEvent; + completeEvent: CompleteEvent; + setParamsEvent: SetParamsEvent; +} + +export type PumpFunEventType = keyof PumpFunEventHandlers; + +export type PriorityFee = { + unitLimit: number; + unitPrice: number; +}; + +export type TransactionResult = { + signature?: string; + error?: unknown; + results?: VersionedTransactionResponse; + success: boolean; +}; diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/util.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/util.ts new file mode 100644 index 0000000..fd14da8 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/pumpdotfun-sdk/src/util.ts @@ -0,0 +1,131 @@ +import { + Commitment, + ComputeBudgetProgram, + Connection, + Finality, + Keypair, + PublicKey, + SendTransactionError, + Transaction, + TransactionMessage, + VersionedTransaction, + VersionedTransactionResponse, +} from "@solana/web3.js"; +import { PriorityFee, TransactionResult } from "./types"; + +export const DEFAULT_COMMITMENT: Commitment = "processed"; +export const DEFAULT_FINALITY: Finality = "confirmed"; + +export const calculateWithSlippageBuy = ( + amount: bigint, + basisPoints: bigint +) => { + return amount + (amount * basisPoints) / 10000n; +}; + +export const calculateWithSlippageSell = ( + amount: bigint, + basisPoints: bigint +) => { + return amount - (amount * basisPoints) / 10000n; +}; + +export async function sendTx( + connection: Connection, + tx: Transaction, + payer: PublicKey, + signers: Keypair[], + priorityFees?: PriorityFee, + commitment: Commitment = DEFAULT_COMMITMENT, + finality: Finality = DEFAULT_FINALITY +): Promise { + let newTx = new Transaction(); + + if (priorityFees) { + const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({ + units: priorityFees.unitLimit, + }); + + const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: priorityFees.unitPrice, + }); + newTx.add(modifyComputeUnits); + newTx.add(addPriorityFee); + } + + newTx.add(tx); + + let versionedTx = await buildVersionedTx(connection, payer, newTx, commitment); + versionedTx.sign(signers); + + try { + const sig = await connection.sendTransaction(versionedTx, { + skipPreflight: false, + }); + console.log("sig:", `https://solscan.io/tx/${sig}`); + + let txResult = await getTxDetails(connection, sig, commitment, finality); + if (!txResult) { + return { + success: false, + error: "Transaction failed", + }; + } + return { + success: true, + signature: sig, + results: txResult, + }; + } catch (e) { + if (e instanceof SendTransactionError) { + let ste = e as SendTransactionError; + //console.log(await ste.getLogs(connection)); + } else { + console.error(e); + } + return { + error: e, + success: false, + }; + } +} + +export const buildVersionedTx = async ( + connection: Connection, + payer: PublicKey, + tx: Transaction, + commitment: Commitment = DEFAULT_COMMITMENT +): Promise => { + const blockHash = (await connection.getLatestBlockhash(commitment)) + .blockhash; + + let messageV0 = new TransactionMessage({ + payerKey: payer, + recentBlockhash: blockHash, + instructions: tx.instructions, + }).compileToV0Message(); + + return new VersionedTransaction(messageV0); +}; + +export const getTxDetails = async ( + connection: Connection, + sig: string, + commitment: Commitment = DEFAULT_COMMITMENT, + finality: Finality = DEFAULT_FINALITY +): Promise => { + const latestBlockHash = await connection.getLatestBlockhash(); + await connection.confirmTransaction( + { + blockhash: latestBlockHash.blockhash, + lastValidBlockHeight: latestBlockHash.lastValidBlockHeight, + signature: sig, + }, + commitment + ); + + return connection.getTransaction(sig, { + maxSupportedTransactionVersion: 0, + commitment: finality, + }); +}; diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/grpc-requests-type.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/grpc-requests-type.ts new file mode 100644 index 0000000..bc8e52d --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/grpc-requests-type.ts @@ -0,0 +1,121 @@ +import { + CommitmentLevel, + SubscribeRequest, + } from "@triton-one/yellowstone-grpc"; +import { req } from "pino-std-serializers"; +export async function createSubscribeNewTokenRequest( + targetToken: string | undefined + ): Promise { + let request: any = null; + if (targetToken !== undefined) { + // if has target mint to snipe + request = { + slots: {}, + accounts: {}, + transactions: { + pumpdotfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: [ + "TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM", + targetToken, + ], + accountExclude: [], + accountRequired: [targetToken], + }, + }, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + commitment: CommitmentLevel.PROCESSED, // Subscribe to processed blocks for the fastest updates + entry: {}, + }; + } else { + // if doesn't have target mint to snipe + request = { + slots: {}, + accounts: {}, + transactions: { + pumpdotfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: ["TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM"], + accountExclude: [], + accountRequired: [], + }, + }, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + commitment: CommitmentLevel.PROCESSED, // Subscribe to processed blocks for the fastest updates + entry: {}, + }; + } + + return request; + } +export async function createSubscribeTokenRequest(mintAddress: string) { + let request: any = null; + request = { + slots: {}, + accounts: {}, + transactions: { + pumpdotfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: [mintAddress], + accountExclude: [], + accountRequired: [mintAddress], + }, + }, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + commitment: CommitmentLevel.PROCESSED, // Subscribe to processed blocks for the fastest updates + entry: {}, + }; + return request; +} +export async function createSubscribeTokenInSnipeCacheRequest(snipedTokenList: []){ + let request: any = null; + request = { + slots: {}, + accounts: {}, + transactions: { + pumpdotfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: ["TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM", ...snipedTokenList], + accountExclude: [], + accountRequired: [], + }, + }, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + commitment: CommitmentLevel.PROCESSED, // Subscribe to processed blocks for the fastest updates + entry: {}, + }; + return request; +} +export async function createClearAllSubscriptionsRequest() { + const request = { + "slots": {}, + "accounts": {}, + "transactions": {}, + "blocks": {}, + "blocksMeta": {}, + "accountsDataSlice": [] + }; + return request; +} + + diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/pump.fun.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/pump.fun.ts new file mode 100644 index 0000000..5463e90 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/pump.fun.ts @@ -0,0 +1,130 @@ +import { + CommitmentLevel, + SubscribeRequest, +} from "@triton-one/yellowstone-grpc"; +import pino from "pino"; +import Client from "@triton-one/yellowstone-grpc"; +import { PublicKey } from "@solana/web3.js"; +import { buy, solanaConnection, sell } from "../transaction/transaction"; +import { storeJitoLeaderSchedule } from "../jito/bundle"; +import { AUTO_SELL, AUTO_SELL_TIMEOUT, GRPC_XTOKEN, GRPC_URL } from "../constants"; +import * as borsh from "@coral-xyz/borsh"; +import bs58 from "bs58"; +import { Buffer } from "buffer"; +import {createSubscribeNewTokenRequest, createClearAllSubscriptionsRequest, createSubscribeTokenRequest, createSubscribeTokenInSnipeCacheRequest} from "./grpc-requests-type" +import {handleSubscribe} from "./utils" + +const client:any = new Client( + GRPC_URL, + GRPC_XTOKEN, + { + "grpc.max_receive_message_length": 64 * 1024 * 1024, // 64MiB + } +); //grpc endpoint +const transport = pino.transport({ + target: "pino-pretty", +}); + +export const logger = pino( + { + level: "info", + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport +); +// Array to store Jito leaders for current epoch +let leaderSchedule = new Set(); +export async function populateJitoLeaderArray() { + leaderSchedule = await storeJitoLeaderSchedule(); +} + +(async () => { + const version = await client.getVersion(); // gets the version information + logger.info(version); +})(); + +/** + * Waits for a specified timeout and then sells all tokens associated with the given mint address. + * @param mintAddress - The address of the mint associated with the tokens to be sold. + * @param isJito - A boolean value indicating whether the tokens are Jito tokens. + */ +export async function waitAndSellAll(mintAddress: string, isJito: boolean) { + const strinToInt = parseInt(AUTO_SELL_TIMEOUT); + console.log("Selling", mintAddress); + try{ + await new Promise((resolve) => setTimeout(resolve, strinToInt*1000+1000)); // extra 1s to make sure the transaction is confirmed + sell(new PublicKey(mintAddress), isJito); + }catch(e){ + logger.error(`error when selling ${mintAddress}, ${e}`); + } +} + +/** + * Subscribes to a stream and listens for new tokens and snipe it. + * + * @param isAutoSell - Indicates whether to automatically sell tokens. + * @param sellAfterNumberBuys - The number of buys after which to sell tokens. + * @param isJito - Indicates whether to use Jito for buying and selling. + */ +export async function streamAnyNewTokens(isAutoSell: boolean, sellAfterNumberBuys: number, isJito: boolean, n: number) { + const stream = await client.subscribe(); + // Create `error` / `end` handler + + // let sellQueue: string[] = []; + let count = 0; + let currentPumpFunToken: string = ""; + const r1: SubscribeRequest = await createSubscribeNewTokenRequest(undefined); + handleSubscribe(stream, r1); + stream.on("data", (data:any) => { + if (data.transaction !== undefined) { + // sellQueue = []; // clear the queue after selling all + logger.info(`Current slot: ${data.transaction.slot}`); + currentPumpFunToken = data.transaction.transaction.meta.postTokenBalances[0].mint + logger.info(`New token created: ${currentPumpFunToken}`); + if(count < n){ + buy(new PublicKey(currentPumpFunToken), isJito); + logger.info(`Sniped ${1} times`); + if(isAutoSell) waitAndSellAll(currentPumpFunToken, isJito); + count += 1; + } + } + }); + +} + +/** + * Subscribes to a stream and listens for new token creation transactions. + * If the target token is created and meets the specified conditions, it performs a buy action. + * @param mintAddress The address of the target token. + * @param isAutoSell A boolean indicating whether to automatically sell after a certain number of buys. + * @param sellAfterNumberBuys The number of buys after which to automatically sell. + * @param isJito A boolean indicating whether to use Jito for the buy action. + */ +export async function streamTargetNewToken(mintAddress: string, isAutoSell: boolean, sellAfterNumberBuys: number, isJito: boolean) { + const stream = await client.subscribe(); + let count = 0; + // Create `error` / `end` handler + const r1 = await createSubscribeNewTokenRequest(mintAddress); + await handleSubscribe(stream, r1); + stream.on("data", (data:any) => { + if (data.transaction !== undefined) { + logger.info(`Current slot: ${data.transaction.slot}`); + logger.info( + `Target token create tx: https://solscan.io/tx/${bs58.encode(Buffer.from(data.transaction.transaction.signature))}` + ); + const pumpFunNewToken = data.transaction.transaction.meta.postTokenBalances[0].mint + logger.info(`Traget token created: ${pumpFunNewToken}`); + if (pumpFunNewToken === mintAddress && count === 0) { + buy(new PublicKey(pumpFunNewToken), isJito); + if(isAutoSell) waitAndSellAll(pumpFunNewToken, isJito); + logger.info(`Sniped ${count + 1} times`); + count += 1; + } + } + }); +} + + diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/snipe-create.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/snipe-create.ts new file mode 100644 index 0000000..9b8e8de --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/snipe-create.ts @@ -0,0 +1,75 @@ +import {streamAnyNewTokens, streamTargetNewToken} from "./pump.fun" +import {AUTO_SELL_TIMEOUT} from "../constants" +import {init} from "../transaction/transaction" +import { logger } from "../utils/logger"; +const {program} = require("commander") +let targetTokenToSnipe:string = ""; +let isAutoSell = false; +let sellAfterNumberBuys = 1 +let isJito = false; +let n = 1; + +program.option("--token ", "Specify the token you want to snipe") + .option("-h, --help", "display help for command") + .option("--auto-sell", "Auto sell token after buying") + .option("--sell-after ", "Sell token after number of buys") + .option("--n ", "number of tokens to snipe") + .option("--jito", "Jito mode") + .action((options:any) => { + if (options.help) { + logger.info( + "ts-node snipe-create.ts --token --sell-after --n --auto-sell --jito" + ); + process.exit(0); + } + if(options.token){ + targetTokenToSnipe = options.token + } + if(options.autoSell){ + isAutoSell = true; + } + if(options.sellAfter){ + sellAfterNumberBuys = options.sellAfter; + } + if(options.jito){ + isJito = true; + } + if(options.n){ + n = options.n; + } + }); +program.parse(); + +async function snipe(){ + + // show the options + logger.info(`Auto sell mode enabled: ${isAutoSell}`) + logger.info(`Sell after: ${sellAfterNumberBuys} buys`) + logger.info(`Jito mode enabled: ${isJito}`) + logger.info(`Number of tokens to snipe: ${n}`) + if(isAutoSell){ + logger.info(`Auto sell after ${AUTO_SELL_TIMEOUT} seconds`) + } + // show the target token + if(targetTokenToSnipe === ""){ + logger.info("bot will snipe any new tokens") + } + else logger.info(`bot will snipe ${targetTokenToSnipe}`) + + // initialize the bot + await init(); + // stream the tokens and auto-sell when condition is met + try{ + if(targetTokenToSnipe === ""){ + await streamAnyNewTokens(isAutoSell, sellAfterNumberBuys, isJito, n); + }else{ + await streamTargetNewToken(targetTokenToSnipe, isAutoSell, sellAfterNumberBuys, isJito); + } + }catch(e){ + logger.error(`error when streaming ${e}`); + } + + +} + +snipe(); \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/utils.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/utils.ts new file mode 100644 index 0000000..3233728 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/utils.ts @@ -0,0 +1,65 @@ +import { + CommitmentLevel, + SubscribeRequest, + } from "@triton-one/yellowstone-grpc"; +import Client from "@triton-one/yellowstone-grpc"; +const PING_INTERVAL_MS = 30_000; + +export async function handleSubscribe(client_stream: any, args: SubscribeRequest){ + // Create `error` / `end` handler + const streamClosed = new Promise((resolve, reject) => { + client_stream.on("error", (error:any) => { + console.log("ERROR", error); + reject(error); + client_stream.end(); + }); + client_stream.on("end", () => { + resolve(); + }); + client_stream.on("close", () => { + resolve(); + }); + }); + + // Send subscribe request + await new Promise((resolve, reject) => { + client_stream.write(args, (err: any) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); + // Send pings every 5s to keep the connection open + const pingRequest: SubscribeRequest = { + ping: { id: 1 }, + // Required, but unused arguments + accounts: {}, + accountsDataSlice: [], + transactions: {}, + blocks: {}, + blocksMeta: {}, + entry: {}, + slots: {}, + }; + setInterval(async () => { + await new Promise((resolve, reject) => { + client_stream.write(pingRequest, (err:any) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); + }, PING_INTERVAL_MS); + + await streamClosed; +} \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/transaction/index.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/transaction/index.ts new file mode 100644 index 0000000..5c71111 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/transaction/index.ts @@ -0,0 +1 @@ +export * from "./transaction" \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/transaction/transaction.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/transaction/transaction.ts new file mode 100644 index 0000000..e6cfad6 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/transaction/transaction.ts @@ -0,0 +1,350 @@ +import { + Liquidity, + LiquidityPoolKeys, + LiquidityStateV4, + Token, + TokenAmount, +} from "@raydium-io/raydium-sdk"; +import { + Commitment, + ComputeBudgetProgram, + Connection, + Keypair, + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + TransactionMessage, + VersionedTransaction, + Transaction, +} from "@solana/web3.js"; +import fs from "fs"; +import bs58 from "bs58"; +import { + COMMITMENT_LEVEL, + LOG_LEVEL, + PRIVATE_KEY, + QUOTE_AMOUNT, + RPC_ENDPOINT, + RPC_WEBSOCKET_ENDPOINT, + //PRIVATE_KEY_1, +} from "../constants"; +import { + AccountLayout, + createAssociatedTokenAccountIdempotentInstruction, + createCloseAccountInstruction, + getAssociatedTokenAddress, + getAssociatedTokenAddressSync, + TOKEN_PROGRAM_ID, +} from "@solana/spl-token"; +import { TokenInstructions } from "@project-serum/serum"; +import { logger } from "../utils/logger"; +import { + retrieveEnvVariable, + getKeypairByJsonPath, + printSOLBalance, + getSPLBalance, +} from "../utils"; +import { populateJitoLeaderArray } from "../streaming/pump.fun"; +import { sendBundle } from "../jito/bundle"; +import { PumpFunSDK } from "../pumpdotfun-sdk/src/pumpfun"; +import { AnchorProvider } from "@coral-xyz/anchor"; +import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet"; +import { printSPLBalance } from "../pumpdotfun-sdk/example/util"; +let wallet: Keypair; +let dev_wallet: Keypair; +let quoteAmount: TokenAmount; +quoteAmount = new TokenAmount(Token.WSOL, QUOTE_AMOUNT, false); +export const solanaConnection = new Connection(RPC_ENDPOINT, { + wsEndpoint: RPC_WEBSOCKET_ENDPOINT, +}); + +// Init funtions right here + +export async function init(): Promise { + logger.level = LOG_LEVEL; + + // get wallet + wallet = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY)); + //dev_wallet = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY_1)); + logger.info(`Wallet Address: ${wallet.publicKey}`); + //logger.info(`Dev Wallet Address: ${dev_wallet.publicKey}`); + + logger.info( + `Script will buy all new tokens on Pump.fun using SOL. Amount that will be used to buy each token is: ${quoteAmount.toFixed().toString()}` + ); + + // check existing wallet for associated token account of quote mint + const SOLBalance = await solanaConnection.getBalance(wallet.publicKey); + // const dev_SOLBalance = await solanaConnection.getBalance( + // dev_wallet.publicKey + // ); + if (SOLBalance === 0) { + throw new Error(`No SOL balance left in wallet: ${wallet.publicKey}`); + } + // if (dev_SOLBalance === 0) { + // throw new Error(`No SOL balance left in wallet: ${dev_wallet.publicKey}`); + // } + const quote_amt = Number(QUOTE_AMOUNT); + if (SOLBalance < quote_amt * LAMPORTS_PER_SOL) { + throw new Error(`Insufficient SOL balance in wallet: ${wallet.publicKey}`); + } + + await populateJitoLeaderArray(); +} + +// non-jito execution functions +async function simple_executeAndConfirm(transaction: VersionedTransaction) { + logger.info("Sent tx!"); + const signature = await simple_execute(transaction); + logger.info(`https://solscan.io/tx/${signature}`); +} + +async function simple_execute(transaction: VersionedTransaction) { + return solanaConnection.sendRawTransaction(transaction.serialize(), { + skipPreflight: true, + maxRetries: 0, + }); +} + +// trading functions right here + +export async function sell( + mintPublicKey: PublicKey, + isJito: Boolean +): Promise { + const Wallet = new NodeWallet(wallet); + const provider = new AnchorProvider(solanaConnection, Wallet, { + commitment: "finalized", + }); + const latestBlockhash = await solanaConnection.getLatestBlockhash({ + commitment: "confirmed", + }); + const sdk = new PumpFunSDK(provider); + console.log("Fetching balance of mint: ", mintPublicKey.toBase58()); + const currentBalanceOfMint = await sdk.getBalance( + wallet.publicKey, + mintPublicKey + ); + if (currentBalanceOfMint === 0) { + logger.info("No balance to sell"); + return; + } + console.log("Current balance of mint: ", currentBalanceOfMint); + + let ata = await getAssociatedTokenAddress(mintPublicKey, wallet.publicKey); + const sellInstruction: Transaction = await sdk.sell( + wallet, + mintPublicKey, + currentBalanceOfMint, + 10000n, + undefined, + "confirmed", + "finalized" + ); + console.log("sellInstruction: ", sellInstruction); + const messageV0 = new TransactionMessage({ + payerKey: wallet.publicKey, + recentBlockhash: latestBlockhash.blockhash, + instructions: [ + ...[ + ComputeBudgetProgram.setComputeUnitLimit({ + units: 71999, + }), + ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: 0.0004 * LAMPORTS_PER_SOL, + }), + ], + ...sellInstruction.instructions, + ], + }).compileToV0Message(); + let commitment: Commitment = retrieveEnvVariable( + "COMMITMENT_LEVEL", + logger + ) as Commitment; + const transaction = new VersionedTransaction(messageV0); + transaction.sign([wallet]); + logger.info("sell tx sent!"); + if (isJito) { + sendBundle(latestBlockhash.blockhash, transaction, mintPublicKey, wallet); // with jito + await new Promise((r) => setTimeout(r, 1000)); + sendBundle( + latestBlockhash.blockhash, + transaction, + mintPublicKey, + dev_wallet + ); // with jito + } else simple_executeAndConfirm(transaction); // without jito +} + +export async function buy( + mintPublicKey: PublicKey, + isJito: Boolean +): Promise { + try { + const Wallet = new NodeWallet(wallet); + const provider = new AnchorProvider(solanaConnection, Wallet, { + commitment: "processed", + }); + const latestBlockhash = await solanaConnection.getLatestBlockhash({ + commitment: "processed", + }); + const sdk = new PumpFunSDK(provider); + let ata = await getAssociatedTokenAddressSync( + mintPublicKey, + wallet.publicKey + ); + // this is where the buy instruction of pump.fun new token will be added + logger.info(`Sniping token: ${mintPublicKey.toBase58()}`); + const buyInstruction: Transaction = await sdk.buy( + wallet, + mintPublicKey, + BigInt(Number(quoteAmount.toFixed()) * LAMPORTS_PER_SOL) + ); + + const messageV0 = new TransactionMessage({ + payerKey: wallet.publicKey, + recentBlockhash: latestBlockhash.blockhash, + instructions: [ + ...[ + ComputeBudgetProgram.setComputeUnitLimit({ + units: 71900, + }), + ], + createAssociatedTokenAccountIdempotentInstruction( + wallet.publicKey, + ata, + wallet.publicKey, + mintPublicKey + ), + ...buyInstruction.instructions, + ], + }).compileToV0Message(); + + let commitment: Commitment = retrieveEnvVariable( + "COMMITMENT_LEVEL", + logger + ) as Commitment; + + const transaction = new VersionedTransaction(messageV0); + + transaction.sign([wallet]); + + //await sleep(30000); + logger.info("buy tx sent!"); + /*const signature = await solanaConnection.sendRawTransaction(transaction.serialize(), { + preflightCommitment: commitment, + }); + */ + //logger.info(`Sending bundle transaction with mint - ${signature}`); + if (isJito) + sendBundle(latestBlockhash.blockhash, transaction, mintPublicKey, wallet); // with jito + else simple_executeAndConfirm(transaction); // without jito + } catch (error) { + logger.error(error); + } +} + +export async function createAndBuy( + pathToMintKeypair: string, + tokenMetadata: any, + initialBuySolAmount: number +) { + const Wallet = new NodeWallet(dev_wallet); + const provider = new AnchorProvider(solanaConnection, Wallet, { + commitment: "processed", + }); + + const sdk = new PumpFunSDK(provider); + const mintKeypair = await getKeypairByJsonPath(pathToMintKeypair); + console.log("Mint keypair: ", mintKeypair); + await printSOLBalance( + solanaConnection, + dev_wallet.publicKey, + "Dev wallet keypair" + ); + let bondingCurveAccount = await sdk.getBondingCurveAccount( + mintKeypair.publicKey + ); + if (!bondingCurveAccount) { + // the mint is not exist in pump.fun yet + const latestBlockhash = await solanaConnection.getLatestBlockhash({ + commitment: "processed", + }); + let createAndBuyInstruction: Transaction = await sdk.createAndBuy( + dev_wallet, + mintKeypair, + tokenMetadata, + BigInt(initialBuySolAmount * LAMPORTS_PER_SOL) + ); + const messageV0 = new TransactionMessage({ + payerKey: dev_wallet.publicKey, + recentBlockhash: latestBlockhash.blockhash, + instructions: [ + ...[ + ComputeBudgetProgram.setComputeUnitLimit({ + units: 250000, + }), + ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: 0.004 * LAMPORTS_PER_SOL, + }), + ], + ...createAndBuyInstruction.instructions, + ], + }).compileToV0Message(); + + let commitment: Commitment = retrieveEnvVariable( + "COMMITMENT_LEVEL", + logger + ) as Commitment; + + const transaction = new VersionedTransaction(messageV0); + + transaction.sign([dev_wallet, mintKeypair]); + + //await sleep(30000); + logger.info("create and buy tx sent!"); + /*const signature = await solanaConnection.sendRawTransaction(transaction.serialize(), { + preflightCommitment: commitment, + }); + */ + //logger.info(`Sending bundle transaction with mint - ${signature}`); + // await simple_executeAndConfirm(transaction); + await sendBundle( + latestBlockhash.blockhash, + transaction, + mintKeypair.publicKey, + dev_wallet + ); // with jito + // wait for 2 seconds for the transaction to be processed + await new Promise((r) => setTimeout(r, 1000)); + bondingCurveAccount = await sdk.getBondingCurveAccount( + mintKeypair.publicKey + ); + logger.info("Bonding curve after create and buy", bondingCurveAccount); + printSPLBalance( + solanaConnection, + mintKeypair.publicKey, + dev_wallet.publicKey + ); + } +} + +async function main() { + const pathToMintKeypair = + "/Users/chiwangso/Desktop/beta-memecoin-cli/src/Trading/Sniper_dev/grpc-pump.fun-bot/test-token-keypairs/soC5qgyb82XUQiEPEYsHspNtiKYcYsQiKeNSoiihyG9.json"; + let tokenMetadata = { + name: "Juice Wrld", + symbol: "JW", + description: "YES, how?", + telegram: "", + twitter: "", + website: "", + file: await fs.openAsBlob( + "/Users/chiwangso/Desktop/beta-memecoin-cli/src/Trading/pumpfun-bundler-cli/pumpfunsdk-js/pumpdotfun-sdk/images/999.jpg" // change your own path + ), + }; + let initialBuySolAmount = 0.02; + await init(); + await createAndBuy(pathToMintKeypair, tokenMetadata, initialBuySolAmount); +} +// main() diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/index.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/index.ts new file mode 100644 index 0000000..d90cdf8 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './utils'; +export * from './logger'; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/logger.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/logger.ts new file mode 100644 index 0000000..393068e --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/logger.ts @@ -0,0 +1,17 @@ +import pino from "pino"; + +const transport = pino.transport({ + target: 'pino-pretty', +}); + +export const logger = pino( + { + level: 'info', + redact: ['poolKeys'], + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport, +); diff --git a/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/utils.ts b/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/utils.ts new file mode 100644 index 0000000..0d22abd --- /dev/null +++ b/src/grpc_streaming_dev/grpc-pf-sniper/src/utils/utils.ts @@ -0,0 +1,70 @@ +import { Logger } from 'pino'; +import dotenv from 'dotenv'; +import fs from "fs"; +import { Keypair, LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { Connection } from '@solana/web3.js'; +import { PublicKey } from '@solana/web3.js'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +dotenv.config(); + +export const retrieveEnvVariable = (variableName: string, logger: Logger) => { + const variable = process.env[variableName] || ''; + if (!variable) { + logger.error(`${variableName} is not set`); + process.exit(1); + } + return variable; +}; + +export function getKeypairByJsonPath(jsonPath: string): any { + try { + const keypairJson = fs.readFileSync(jsonPath, "utf-8"); + const data = JSON.parse(keypairJson); + const mintKeypair = Keypair.fromSecretKey(Uint8Array.from(data)); + return mintKeypair + } catch (e) { + console.log(e); + } +} +export async function printSOLBalance ( + connection: Connection, + pubKey: PublicKey, + info = "" +) { + const balance = await connection.getBalance(pubKey); + console.log( + `${info ? info + " " : ""}${pubKey.toBase58()}:`, + balance / LAMPORTS_PER_SOL, + `SOL` + ); +}; + +export async function getSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + pubKey: PublicKey, + allowOffCurve = false +) { + try { + let ata = getAssociatedTokenAddressSync(mintAddress, pubKey, allowOffCurve); + const balance = await connection.getTokenAccountBalance(ata, "processed"); + return balance.value.uiAmount; + } catch (e) {} + return null; +}; +async function printSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + user: PublicKey, + info = "" +) { + const balance = await getSPLBalance(connection, mintAddress, user); + if (balance === null) { + console.log( + `${info ? info + " " : ""}${user.toBase58()}:`, + "No Account Found" + ); + } else { + console.log(`${info ? info + " " : ""}${user.toBase58()}:`, balance); + } +}; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/README.md b/src/grpc_streaming_dev/grpc-raydium-sniper/README.md new file mode 100755 index 0000000..49b1c73 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/README.md @@ -0,0 +1,43 @@ +# Geyser gRPC Raydium Sniper (Still testing, don't use it plz) + +## Overview + +A sniper bot that uses gRPC streaming to monitor and interact with Raydium and Openbook markets. It's designed to quickly detect and trade new tokens or specific target tokens on the Solana blockchain. + +## How It Works + +1. Streams Openbook market data and stores it in a queue. +2. Monitors Raydium liquidity pools for new token events. +3. When a target token is detected, it attempts to execute a buy transaction. +4. Optionally uses Jito leader schedule for transaction timing optimization. + +## Usage + +- run `ts-node src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-pump.ts -h` to test the snipe-pump command and see the available options +- run `ts-node src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-normal-raydium.ts -h` to test the snipe-raydium command and see the available options +- run `ts-node src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-pump.ts` to snipe any pump token that mirigating from pump.fun to raydium +- run `ts-node src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-normal-raydium.ts` to snipe any new created pool on raydium + +- run `ts-node src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/pump-listeners.ts` to see the pump token which completed the bonding curve in real-time + +## Features + +- Real-time streaming of Openbook and Raydium data +- swap tokens in milliseconds +- snipe pump tokens that mirigating from pump.fun to raydium +- snipe normal new created pool on raydium +- Configurable for different token types (e.g., "pump" tokens) +- Integration with Jito leader schedule (optional) +- Customizable logging with Pino + +## Contributing + +Contributions are welcome. Please submit pull requests with any improvements or bug fixes. + +## Disclaimer + +This software is in beta and for educational purposes only. Use at your own risk. The authors are not responsible for any financial losses incurred while using this software. + +## Note + +The current implementation includes commented-out code for Jito leader schedule integration. Uncomment and configure as needed for advanced usage. diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/buffer/buffer.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/buffer/buffer.ts new file mode 100755 index 0000000..c100251 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/buffer/buffer.ts @@ -0,0 +1,68 @@ +import { MARKET_STATE_LAYOUT_V3 } from '@raydium-io/raydium-sdk'; +import { PublicKey } from '@solana/web3.js'; +import { Buffer } from 'buffer'; + +export class BufferRingBuffer { + private buffer: Array; + private head: number; + private tail: number; + private count: number; + private capacity: number; + + constructor(capacity: number) { + this.capacity = capacity; + this.buffer = new Array(capacity).fill(null); + this.head = 0; + this.tail = 0; + this.count = 0; + } + + isFull(): boolean { + return this.count === this.capacity; + } + + isEmpty(): boolean { + return this.count === 0; + } + + enqueue(item: Buffer): void { + if (this.isFull()) { + this.head = (this.head + 1) % this.capacity; + } else { + this.count++; + } + this.buffer[this.tail] = item; + this.tail = (this.tail + 1) % this.capacity; + } + + dequeue(): Buffer | null { + if (this.isEmpty()) { + return null; + } + const item = this.buffer[this.head]; + this.buffer[this.head] = null; + this.head = (this.head + 1) % this.capacity; + this.count--; + return item; + } + + findPattern(publicKey: PublicKey): Buffer | false { + const publicKeyBuffer = publicKey.toBuffer(); + const baseMintOffset = MARKET_STATE_LAYOUT_V3.offsetOf('baseMint'); + const baseMintEndOffset = baseMintOffset + publicKeyBuffer.length; + + for (let i = this.capacity - 1; i >= 0; i--) { + if (this.buffer[i]) { + const baseMintInBuffer = this.buffer[i]!.slice(baseMintOffset, baseMintEndOffset); + if (baseMintInBuffer.equals(publicKeyBuffer)) { + console.log(i); + return this.buffer[i] as Buffer; // PublicKey found + } + } + } + return false; // PublicKey not found + } + +} + + diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/buffer/index.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/buffer/index.ts new file mode 100644 index 0000000..e925899 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/buffer/index.ts @@ -0,0 +1 @@ +export * from "./buffer"; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/constants/constants.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/constants/constants.ts new file mode 100755 index 0000000..435705c --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/constants/constants.ts @@ -0,0 +1,13 @@ +import { Commitment } from "@solana/web3.js"; +import { logger, retrieveEnvVariable } from "../../../../utils"; + +export const NETWORK = 'mainnet-beta'; +export const COMMITMENT_LEVEL: Commitment = retrieveEnvVariable('COMMITMENT_LEVEL', logger) as Commitment; +export const RPC_ENDPOINT = retrieveEnvVariable('MAINNET_ENDPOINT', logger); +export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable('WS_MAINNET_ENDPOINT', logger); +export const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger); +export const PRIVATE_KEY = retrieveEnvVariable('PRIVATE_KEY', logger); +export const QUOTE_AMOUNT = retrieveEnvVariable('QUOTE_AMOUNT', logger); +export const GRPC_XTOKEN = retrieveEnvVariable('GRPC_XTOKEN', logger); +export const GRPC_URL = retrieveEnvVariable('GRPC_URL', logger); +export const QUOTE_MINT = retrieveEnvVariable('QUOTE_MINT', logger); \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/constants/index.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/constants/index.ts new file mode 100755 index 0000000..e94e4b1 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/constants/index.ts @@ -0,0 +1 @@ +export * from './constants'; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/jito/bundle.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/jito/bundle.ts new file mode 100755 index 0000000..bc21302 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/jito/bundle.ts @@ -0,0 +1,169 @@ +import { + Connection, + PublicKey, + Keypair, + VersionedTransaction, + MessageV0, + LAMPORTS_PER_SOL +} +from '@solana/web3.js'; + +import { Bundle } from 'jito-ts/dist/sdk/block-engine/types'; + +import * as Fs from 'fs'; + + +require('dotenv').config(); + + +import { searcherClient } from 'jito-ts/dist/sdk/block-engine/searcher'; + +import { +ChannelCredentials, +ChannelOptions, +ClientReadableStream, +ServiceError, +} from '@grpc/grpc-js'; +import { SearcherServiceClient } from 'jito-ts/dist/gen/block-engine/searcher' +import { AuthServiceClient } from 'jito-ts/dist/gen/block-engine/auth'; +import { authInterceptor, AuthProvider } from 'jito-ts/dist/sdk/block-engine/auth'; +import { + PRIVATE_KEY, + RPC_ENDPOINT, + RPC_WEBSOCKET_ENDPOINT, +} from '../constants'; + +import bs58 from 'bs58'; +import { logger } from '../utils/logger'; +import { bundle } from 'jito-ts'; + +function sleep(ms: number) { +return new Promise((resolve) => setTimeout(resolve, ms)); +} + +const SIGNER_WALLET = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY)); + + +const blockEngineUrl = process.env.BLOCK_ENGINE_URL || ''; +console.log('BLOCK_ENGINE_URL:', blockEngineUrl); + + +const c = searcherClient(blockEngineUrl, undefined); + + +export const searcherClientAdv = ( +url: string, +authKeypair: Keypair | undefined, +grpcOptions?: Partial +): SearcherServiceClient => { +const client: SearcherServiceClient = new SearcherServiceClient( + url, + ChannelCredentials.createSsl(), + { ...grpcOptions } +); + +return client; +} + + +// Get Tip Accounts + +let tipAccounts: string[] = []; +(async () => { +try { + tipAccounts = await c.getTipAccounts(); + console.log('Result:', tipAccounts); +} catch (error) { + console.error('Error:', error); +} +})(); + + + +export async function sendBundle(latestBlockhash: string, message: MessageV0, mint: PublicKey) { + +try { + + const transaction = new VersionedTransaction(message); + + transaction.sign([SIGNER_WALLET]); + + + + + logger.info(`Fetching and adding tip`); + + const _tipAccount = tipAccounts[Math.floor(Math.random() * 6)]; + const tipAccount = new PublicKey(_tipAccount); + + + + const b = new Bundle([transaction], 2); + b.addTipTx( + SIGNER_WALLET, + 0.15*LAMPORTS_PER_SOL, // Adjust Jito tip amount here + tipAccount, + latestBlockhash + ); + + + logger.info(`Sending bundle`); + const bundleResult = await c.sendBundle(b); + logger.info(`Sent bundle! bundleResult = ${bundleResult}`); + + + + logger.info( + { + dex:`https://dexscreener.com/solana/${mint}?maker=${SIGNER_WALLET.publicKey}` + }, + ); + + +} + +catch (error) { + logger.error(error); + +} + +} + +// Get leader schedule + +// This was when I was experimenting with only sending the buy tx when a Jito leader was up or going to be up in the next slot so that I wouldn't +// have to wait multiple slots for the tx to be processed. I ended up not using this feature as it couldn't get it working correctly before I moved on. + +export async function storeJitoLeaderSchedule() { + +const cs = searcherClientAdv(blockEngineUrl, undefined); + + +const leaderSchedule = new Set(); + +cs.getConnectedLeadersRegioned({ regions: ["tokyo", "amsterdam", "ny", "frankfurt"] }, (error, response) => { + + + for (let key in response) { + if (key === 'connectedValidators') { + let validators = response[key]; + for (let validatorKey in validators) { + // Each validator object + let validator = validators[validatorKey]; + // Assuming `slots` is an array inside each validator object + Object.keys(validator.connectedValidators).forEach((key: string) => { + const slotsArray: number[][] = Object.values(validator.connectedValidators[key]); // Assume SlotList is an array of arrays + const flattenedSlotsArray: number[] = slotsArray.flat(); // Flatten the array + flattenedSlotsArray.forEach((slot: number) => { + leaderSchedule.add(slot); + }); + }); + } + } + } + + //console.log(leaderSchedule); +}); + +return leaderSchedule; +} \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/liquidity/index.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/liquidity/index.ts new file mode 100755 index 0000000..3a01cd7 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/liquidity/index.ts @@ -0,0 +1 @@ +export * from './liquidity'; diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/liquidity/liquidity.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/liquidity/liquidity.ts new file mode 100755 index 0000000..cee9096 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/liquidity/liquidity.ts @@ -0,0 +1,88 @@ +import { Commitment, Connection, PublicKey } from '@solana/web3.js'; +import { + Liquidity, + LiquidityPoolKeys, + Market, + TokenAccount, + SPL_ACCOUNT_LAYOUT, + publicKey, + struct, + MAINNET_PROGRAM_ID, + LiquidityStateV4, +} from '@raydium-io/raydium-sdk'; +import { TOKEN_PROGRAM_ID } from '@solana/spl-token'; +import { MinimalMarketLayoutV3 } from '../market'; + +export const RAYDIUM_LIQUIDITY_PROGRAM_ID_V4 = MAINNET_PROGRAM_ID.AmmV4; +export const OPENBOOK_PROGRAM_ID = MAINNET_PROGRAM_ID.OPENBOOK_MARKET; + +export const MINIMAL_MARKET_STATE_LAYOUT_V3 = struct([ + publicKey('eventQueue'), + publicKey('bids'), + publicKey('asks'), +]); + +export function createPoolKeys( + id: PublicKey, + accountData: LiquidityStateV4, + minimalMarketLayoutV3: MinimalMarketLayoutV3, +): LiquidityPoolKeys { + return { + id, + baseMint: accountData.baseMint, + quoteMint: accountData.quoteMint, + lpMint: accountData.lpMint, + baseDecimals: accountData.baseDecimal.toNumber(), + quoteDecimals: accountData.quoteDecimal.toNumber(), + lpDecimals: 5, + version: 4, + programId: RAYDIUM_LIQUIDITY_PROGRAM_ID_V4, + authority: Liquidity.getAssociatedAuthority({ + programId: RAYDIUM_LIQUIDITY_PROGRAM_ID_V4, + }).publicKey, + openOrders: accountData.openOrders, + targetOrders: accountData.targetOrders, + baseVault: accountData.baseVault, + quoteVault: accountData.quoteVault, + marketVersion: 3, + marketProgramId: accountData.marketProgramId, + marketId: accountData.marketId, + marketAuthority: Market.getAssociatedAuthority({ + programId: accountData.marketProgramId, + marketId: accountData.marketId, + }).publicKey, + marketBaseVault: accountData.baseVault, + marketQuoteVault: accountData.quoteVault, + marketBids: minimalMarketLayoutV3.bids, + marketAsks: minimalMarketLayoutV3.asks, + marketEventQueue: minimalMarketLayoutV3.eventQueue, + withdrawQueue: accountData.withdrawQueue, + lpVault: accountData.lpVault, + lookupTableAccount: PublicKey.default, + }; +} + +export async function getTokenAccounts( + connection: Connection, + owner: PublicKey, + commitment?: Commitment, +) { + const tokenResp = await connection.getTokenAccountsByOwner( + owner, + { + programId: TOKEN_PROGRAM_ID, + }, + commitment, + ); + + const accounts: TokenAccount[] = []; + for (const { pubkey, account } of tokenResp.value) { + accounts.push({ + pubkey, + programId: account.owner, + accountInfo: SPL_ACCOUNT_LAYOUT.decode(account.data), + }); + } + + return accounts; +} diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/market/index.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/market/index.ts new file mode 100755 index 0000000..00c17b6 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/market/index.ts @@ -0,0 +1 @@ +export * from './market'; diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/market/market.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/market/market.ts new file mode 100755 index 0000000..3c90548 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/market/market.ts @@ -0,0 +1,26 @@ +import { Commitment, Connection, PublicKey } from '@solana/web3.js'; +import { GetStructureSchema, MARKET_STATE_LAYOUT_V3, LiquidityStateV4, Token, TokenAmount } from '@raydium-io/raydium-sdk'; +import { MINIMAL_MARKET_STATE_LAYOUT_V3 } from '../liquidity'; +import BN from 'bn.js'; +import { logger } from '../utils'; + +export type MinimalMarketStateLayoutV3 = typeof MINIMAL_MARKET_STATE_LAYOUT_V3; +export type MinimalMarketLayoutV3 = + GetStructureSchema; + +export async function getMinimalMarketV3( + connection: Connection, + marketId: PublicKey, + commitment?: Commitment, +): Promise { + const marketInfo = await connection.getAccountInfo(marketId, { + commitment, + dataSlice: { + offset: MARKET_STATE_LAYOUT_V3.offsetOf('eventQueue'), + length: 32 * 3, + }, + }); + + return MINIMAL_MARKET_STATE_LAYOUT_V3.decode(marketInfo!.data); +} + diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/openbook.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/openbook.ts new file mode 100755 index 0000000..6b7c4f0 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/openbook.ts @@ -0,0 +1,97 @@ +import { + CommitmentLevel, + SubscribeRequest, +} from "@triton-one/yellowstone-grpc"; +import pino from "pino"; +import Client from "@triton-one/yellowstone-grpc"; +import { MARKET_STATE_LAYOUT_V3 } from "@raydium-io/raydium-sdk"; +import { PublicKey } from "@solana/web3.js"; +import { BufferRingBuffer } from "../buffer"; +import {GRPC_XTOKEN, GRPC_URL} from "../constants"; +const client:any = new Client( + GRPC_URL, + GRPC_XTOKEN, + undefined +); +const transport = pino.transport({ + target: "pino-pretty", +}); + +export const logger = pino( + { + level: "info", + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport +); + +//Initialize Ring Buffer + +// This portion of the code streams the Openbook data which is needed to make a buy request. +// The data is stored in a buffer ring and then queried if the raydium stream gets a liquidity event. +// We stream and store this data because a lot of the time the data we need from here is streamed before the raydium stream gets the liquidity event. +// This way we can store the data and then query it when we need it instead of making a slow web request to get the data. +// Many times it will not contain the data we need in which case the buy will be aborted. A trade-off for speed. + +// I know somebody can probably improve this a lot. I'm not a pro at this stuff. I'm just a guy who likes to code. + +export const bufferRing = new BufferRingBuffer(5000); + +export async function streamOpenbook( + SnipetokenType: string, + targetTokenToSnipe: string +) { + const stream = await client.subscribe(); + // Collecting all incoming events in the buffer ring. + stream.on("data", (data:any) => { + if (data.account != undefined) { + bufferRing.enqueue(data.account.account.data); + } + }); + let tokenTypeFilter = + SnipetokenType === "pump" + ? { + memcmp: { + offset: MARKET_STATE_LAYOUT_V3.offsetOf("baseMint").toString(), // Filter for the target token we want to snipe + base58: "So11111111111111111111111111111111111111112", + }, + } + : { + memcmp: { + offset: MARKET_STATE_LAYOUT_V3.offsetOf("quoteMint").toString(), // Filter for the target token we want to snipe + base58: "So11111111111111111111111111111111111111112", + }, + }; + const openBookRequest: SubscribeRequest = { + slots: {}, // + accounts: { + raydium: { + account: [], + filters: [tokenTypeFilter], + owner: ["srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"], //Openbook program ID + }, + }, + transactions: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + commitment: CommitmentLevel.PROCESSED, + entry: {}, + }; + // Sending a subscription request. + await new Promise((resolve, reject) => { + stream.write(openBookRequest, (err: null | undefined) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); +} diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/pump-listeners.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/pump-listeners.ts new file mode 100755 index 0000000..e7a22fe --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/pump-listeners.ts @@ -0,0 +1,53 @@ +import { solanaConnection } from "../transaction/transaction"; +const { Keypair, Connection } = require("@solana/web3.js"); +const { PumpFunSDK } = require("pumpdotfun-sdk"); +const { AnchorProvider } = require("@coral-xyz/anchor"); + +function getProvider() { + const wallet = Keypair.generate(); + const provider = new AnchorProvider(solanaConnection, wallet, { + commitment: "proccessed", + }); + return provider; +} + +async function subscribeToCompleteBondingCurveEvent(sdk: any) { + const completeEventId = sdk.addEventListener( + "completeEvent", + (event: any, slot: any, signature: any) => { + console.log("mint pubkey", event.mint.toBase58()); + } + ); + console.log("Subscribed to completeEvent with ID:", completeEventId); +} +async function subscribeToCreatePumpTokenEvent(sdk: any) { + const createEventId = sdk.addEventListener( + "createEvent", + (event: any, slot: any, signature: any) => { + console.log("createEvent", event, slot, signature); + console.log("mint pubkey", event.mint.toBase58()); + } + ); + console.log("Subscribed to createEvent with ID:", createEventId); +} +async function subscribeToTradeEvent(sdk: any) { + const tradeEventId = sdk.addEventListener( + "tradeEvent", + (event: any, slot: any, signature: any) => { + console.log("tradeEvent", event, slot, signature); + } + ); + console.log("Subscribed to tradeEvent with ID:", tradeEventId); +} +async function main() { + try { + const provider = getProvider(); + const sdk = new PumpFunSDK(provider); + + // Set up event listeners + await subscribeToCompleteBondingCurveEvent(sdk); + } catch (error) { + console.error("An error occurred:", error); + } +} +main(); diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/raydium.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/raydium.ts new file mode 100755 index 0000000..0cea20c --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/raydium.ts @@ -0,0 +1,175 @@ +import { CommitmentLevel, SubscribeRequest } from "@triton-one/yellowstone-grpc"; +import pino from "pino"; +import Client from "@triton-one/yellowstone-grpc"; +import { LIQUIDITY_STATE_LAYOUT_V4, MARKET_STATE_LAYOUT_V3 } from "@raydium-io/raydium-sdk"; +import { PublicKey } from "@solana/web3.js"; +import { bufferRing } from "./openbook"; +import { buy } from "../transaction/transaction"; +import { storeJitoLeaderSchedule } from "../jito/bundle"; +import {GRPC_XTOKEN, GRPC_URL} from "../constants" +const client:any = new Client(GRPC_URL, GRPC_XTOKEN, undefined); //grpc endpoint +let snipeCache:string[] = [] // to avoid duplicate sniping same token + +const transport = pino.transport({ + target: 'pino-pretty', +}); + +export const logger = pino( + { + level: 'info', + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport, +); + +// Array to store Jito leaders for current epoch +let leaderSchedule = new Set(); + +// Function to populate the Jito leader array +export async function populateJitoLeaderArray() { + leaderSchedule = await storeJitoLeaderSchedule(); +} + +// uncomment this line to enable Jito leader schedule check and delete the return line. +function slotExists(slot: number): boolean { + //return leaderSchedule.has(slot); + return true +} + + +(async () => { + const version = await client.getVersion(); // gets the version information + console.log(version); +})(); + +let latestBlockHash: string = ""; + +export async function streamNewTokens(snipeTokenType:string, targetToken:string) { + const stream = await client.subscribe(); + // Collecting all incoming events. + stream.on("data", (data:any) => { + if (data.blockMeta) { + latestBlockHash = data.blockMeta.blockhash; + } + + if (data.account != undefined) { + logger.info(`New token alert!`); + let slotCheckResult = false; + let slotCheck = Number(data.account.slot); + for (let i = 0; i < 2; i++) { + logger.info(`Start slot check. Attempt ${i}`); + const exists = slotExists(slotCheck + i); + logger.info(`End slot check`); + if (exists === true) { + slotCheckResult = true; + break; + } + } + + if (slotCheckResult) { + const poolstate = LIQUIDITY_STATE_LAYOUT_V4.decode(data.account.account.data); + const tokenAccount = new PublicKey(data.account.account.pubkey); + logger.info(`Token Account: ${tokenAccount}`); + let TokenToBuy = (snipeTokenType==="pump")?poolstate.quoteMint:poolstate.baseMint; + let Attempt = 0; + const maxAttempts = 3; + const intervalId = setInterval(async () => { + const marketDetails = bufferRing.findPattern(poolstate.baseMint); + console.log("Token incoming: ", TokenToBuy); + console.log("Market Details: ", marketDetails) + if(targetToken !== "" && TokenToBuy.toBase58() !== targetToken) clearInterval(intervalId); + else if (Buffer.isBuffer(marketDetails)) { + const fullMarketDetailsDecoded = MARKET_STATE_LAYOUT_V3.decode(marketDetails); + const marketDetailsDecoded = { + bids: fullMarketDetailsDecoded.bids, + asks: fullMarketDetailsDecoded.asks, + eventQueue: fullMarketDetailsDecoded.eventQueue, + }; + console.log(`Sniping ${targetToken}`) + if(TokenToBuy.toBase58() === targetToken) buy(latestBlockHash, tokenAccount, poolstate, marketDetailsDecoded, snipeTokenType); + else { + if(targetToken === "") buy(latestBlockHash, tokenAccount, poolstate, marketDetailsDecoded, snipeTokenType); + } + clearInterval(intervalId); + } else if(Attempt>=maxAttempts){ + logger.error("Invalid market details") + clearInterval(intervalId) + } + }, 1); // send tx per 10ms + } + else { + logger.info(`No up coming Jito leaders. Slot: ${data.account.slot}`) + } + + + + } + }); + let tokenTypeFilter = (snipeTokenType==="pump")?{ + "memcmp": { + "offset": LIQUIDITY_STATE_LAYOUT_V4.offsetOf('baseMint').toString(), // Filter for the target token we want to snipe + "base58": "So11111111111111111111111111111111111111112" + } + }:{ + "memcmp": { + "offset": LIQUIDITY_STATE_LAYOUT_V4.offsetOf('quoteMint').toString(), // Filter for the target token we want to snipe + "base58": "So11111111111111111111111111111111111111112" + } + } + // Create a subscription request. + const request: SubscribeRequest = { + "slots": {}, + "accounts": { + "raydium": { + "account": [], + "filters": [ + tokenTypeFilter, + { + "memcmp": { + "offset": LIQUIDITY_STATE_LAYOUT_V4.offsetOf('marketProgramId').toString(), // Filter for only Raydium markets that contain references to Serum + "base58": "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX" + } + }, + { + "memcmp": { + "offset": LIQUIDITY_STATE_LAYOUT_V4.offsetOf('swapQuoteInAmount').toString(), // Hack to filter for only new tokens. There is probably a better way to do this + "bytes": Uint8Array.from([0]) + } + }, + { + "memcmp": { + "offset": LIQUIDITY_STATE_LAYOUT_V4.offsetOf('swapBaseOutAmount').toString(), // Hack to filter for only new tokens. There is probably a better way to do this + "bytes": Uint8Array.from([0]) + } + } + ], + "owner": ["675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"] // raydium program id to subscribe to + } + }, + "transactions": {}, + "blocks": {}, + "blocksMeta": { + "block": [] + }, + "accountsDataSlice": [], + "commitment": CommitmentLevel.PROCESSED, // Subscribe to processed blocks for the fastest updates + entry: {} + } + + // Sending a subscription request. + await new Promise((resolve, reject) => { + stream.write(request, (err: null | undefined) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); +} diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-normal-raydium.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-normal-raydium.ts new file mode 100755 index 0000000..9d0fb1b --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-normal-raydium.ts @@ -0,0 +1,33 @@ +import {streamNewTokens} from "./raydium" +import {streamOpenbook} from "./openbook" +import {init} from "../transaction/transaction" +const {program} = require("commander"); +let targetTokenToSnipe:string = ""; + +program.option("--targetToken ", "Specify the token you want to snipe") + .option("-h, --help", "display help for command") + .action((options:any) => { + if (options.help) { + console.log( + "ts-node snipe-normal-raydium.ts --targetToken " + ); + process.exit(0); + } + + targetTokenToSnipe = options.targetToken + }); +program.parse(); + +async function snipe(){ + console.log(`Siping ${targetTokenToSnipe}`) + await init(); + if(targetTokenToSnipe!== ""){ + streamNewTokens("normal", targetTokenToSnipe) + streamOpenbook("normal", targetTokenToSnipe) + }else{ + streamNewTokens("normal", ""); + streamOpenbook("normal", ""); + } +} + +snipe(); \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-pump.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-pump.ts new file mode 100755 index 0000000..e7834bf --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/streaming/snipe-pump.ts @@ -0,0 +1,32 @@ +import {streamNewTokens} from "./raydium" +import {streamOpenbook} from "./openbook" +import {init} from "../transaction/transaction" +const {program} = require("commander") +let targetTokenToSnipe:string = ""; + +program.option("--token ", "Specify the token you want to snipe") + .option("-h, --help", "display help for command") + .action((options:any) => { + if (options.help) { + console.log( + "ts-node snipe-pump.ts --token " + ); + process.exit(0); + } + targetTokenToSnipe = options.token + }); +program.parse(); + +async function snipe(){ + console.log(`Siping ${targetTokenToSnipe}`) + await init(); + if(targetTokenToSnipe!== ""){ + streamNewTokens("pump", targetTokenToSnipe) + streamOpenbook("pump", targetTokenToSnipe) + }else{ + streamNewTokens("pump", ""); + streamOpenbook("pump", ""); + } +} + +snipe(); \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/token-cache.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/token-cache.ts new file mode 100644 index 0000000..d5cd725 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/token-cache.ts @@ -0,0 +1,25 @@ + +export class BoughtCache { + private readonly keys: Map = new Map< + string, + { tokenAddress: string; isCached: boolean } + >(); + + public save(tokenAddress: string, isCached: boolean) { + if (!this.keys.has(tokenAddress)) { + console.log(`Caching new bought token: ${tokenAddress}`); + this.keys.set(tokenAddress, { tokenAddress, isCached }); + } + } + + public async get(mint: string): Promise<{ tokenAddress: string; isCached: boolean } | undefined> { + return this.keys.get(mint)!; + } + + public async deleteKey(mint: string): Promise { + return this.keys.delete(mint); + } + + + +} diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/transaction/transaction.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/transaction/transaction.ts new file mode 100755 index 0000000..16b94c9 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/transaction/transaction.ts @@ -0,0 +1,283 @@ +import { + Liquidity, + LiquidityPoolKeys, + LiquidityStateV4, + Token, + TokenAmount, +} from "@raydium-io/raydium-sdk"; +import { + Commitment, + ComputeBudgetProgram, + Connection, + Keypair, + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + TransactionMessage, + VersionedTransaction, +} from "@solana/web3.js"; +import bs58 from "bs58"; +import { + COMMITMENT_LEVEL, + LOG_LEVEL, + PRIVATE_KEY, + QUOTE_AMOUNT, + QUOTE_MINT, + RPC_ENDPOINT, + RPC_WEBSOCKET_ENDPOINT, +} from "../constants"; +import { + AccountLayout, + createAssociatedTokenAccountIdempotentInstruction, + createCloseAccountInstruction, + getAssociatedTokenAddressSync, + TOKEN_PROGRAM_ID, +} from "@solana/spl-token"; +import { TokenInstructions } from "@project-serum/serum"; +import { sendBundle } from "../jito/bundle"; +import { logger } from "../utils/logger"; +import { MinimalMarketLayoutV3, getMinimalMarketV3 } from "../market"; +import { createPoolKeys, getTokenAccounts } from "../liquidity"; +import { populateJitoLeaderArray } from "../streaming/raydium"; +import { retrieveEnvVariable } from "../utils"; +import {sendNozomiTx} from "../../../../transactions/nozomi/tx-submission"; +import {BoughtCache} from "../token-cache"; +import { Mutex } from 'async-mutex'; +let mutexForSnipe = new Mutex(); +let boughtCache = new BoughtCache(); + +let wallet: Keypair; +let quoteToken: Token; +let quoteTokenAssociatedAddress: PublicKey; +let quoteAmount: TokenAmount; + +wallet = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY)); +quoteAmount = new TokenAmount(Token.WSOL, QUOTE_AMOUNT, false); + +export interface MinimalTokenAccountData { + mint: PublicKey; + address: PublicKey; + poolKeys?: LiquidityPoolKeys; + market?: MinimalMarketLayoutV3; +} + +const existingTokenAccounts: Map = new Map< + string, + MinimalTokenAccountData +>(); + +export const solanaConnection = new Connection(RPC_ENDPOINT, { + wsEndpoint: RPC_WEBSOCKET_ENDPOINT, +}); + +// Init Function + +export async function init(): Promise { + logger.level = LOG_LEVEL; + + // get wallet + wallet = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY)); + logger.info(`Wallet Address: ${wallet.publicKey}`); + + // get quote mint and amount + switch (QUOTE_MINT) { + case "WSOL": { + quoteToken = Token.WSOL; + quoteAmount = new TokenAmount(Token.WSOL, QUOTE_AMOUNT, false); + break; + } + case "USDC": { + quoteToken = new Token( + TOKEN_PROGRAM_ID, + new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), + 6, + "USDC", + "USDC" + ); + quoteAmount = new TokenAmount(quoteToken, QUOTE_AMOUNT, false); + break; + } + default: { + throw new Error( + `Unsupported quote mint "${QUOTE_MINT}". Supported values are USDC and WSOL` + ); + } + } + + logger.info( + `Script will buy all new tokens using ${QUOTE_MINT}. Amount that will be used to buy each token is: ${quoteAmount.toFixed().toString()}` + ); + + // check existing wallet for associated token account of quote mint + const tokenAccounts = await getTokenAccounts( + solanaConnection, + wallet.publicKey, + COMMITMENT_LEVEL + ); + + for (const ta of tokenAccounts) { + existingTokenAccounts.set(ta.accountInfo.mint.toString(), < + MinimalTokenAccountData + >{ + mint: ta.accountInfo.mint, + address: ta.pubkey, + }); + } + + const tokenAccount = tokenAccounts.find( + (acc) => acc.accountInfo.mint.toString() === quoteToken.mint.toString() + )!; + + if (!tokenAccount) { + throw new Error( + `No ${quoteToken.symbol} token account found in wallet: ${wallet.publicKey}` + ); + } + + quoteTokenAssociatedAddress = tokenAccount.pubkey; + + await populateJitoLeaderArray(); +} + +async function simple_executeAndConfirm( + transaction: VersionedTransaction, + payer: Keypair, + lastestBlockhash: string, + tokenToBuy: string +) { + console.log("Executing transaction..."); + const signature = await simple_execute(transaction); + console.log("Transaction executed."); + logger.info(`Sent tx! https://solscan.io/tx/${signature}`); + + logger.info({ + dex: `https://dexscreener.com/solana/${tokenToBuy}?maker=${payer.publicKey}`, + }); +} + +async function simple_execute(transaction: VersionedTransaction) { + return solanaConnection.sendRawTransaction(transaction.serialize(), { + skipPreflight: true, + maxRetries: 0, + }); +} + +// Create transaction + +export async function buy( + latestBlockhash: string, + newTokenAccount: PublicKey, + poolState: LiquidityStateV4, + marketDetails: MinimalMarketLayoutV3, + tokenType: string +): Promise { + try { + if(mutexForSnipe.isLocked()) { + logger.debug( "Skipping buy because one token at a time and token is already being processed"); + //writeLineToBundleBuyBotFile(`Skipping buy because one token at a time and token is already being processed, token: ${tokenAddress}, percentage: ${percentage}`); + return; + } + let ata:any = null; + let target_token = ""; + if (tokenType === "pump"){ + ata = getAssociatedTokenAddressSync( + poolState.quoteMint, + wallet.publicKey + ); + target_token = poolState.quoteMint.toBase58(); + } + else{ + ata = getAssociatedTokenAddressSync(poolState.baseMint, wallet.publicKey); + target_token = poolState.baseMint.toBase58(); + } + const exists = await boughtCache.get(target_token); + if(exists) { logger.debug("Skipping buy because token is already bought");return;} + await mutexForSnipe.acquire(); // one token at a time + const poolKeys = createPoolKeys(newTokenAccount, poolState, marketDetails!); + const { innerTransaction } = Liquidity.makeSwapFixedInInstruction( + { + poolKeys: poolKeys, + userKeys: { + tokenAccountIn: quoteTokenAssociatedAddress, + tokenAccountOut: ata, + owner: wallet.publicKey, + }, + amountIn: quoteAmount.raw, + minAmountOut: 0, + }, + poolKeys.version + ); + + const ix_list = [ + ...[ + ComputeBudgetProgram.setComputeUnitLimit({ + units: 80000, + }), + ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: 0.004 * LAMPORTS_PER_SOL, + }), + ], + createAssociatedTokenAccountIdempotentInstruction( + wallet.publicKey, + ata, + wallet.publicKey, + tokenType == "pump" ? poolState.quoteMint : poolState.baseMint + ), + ...innerTransaction.instructions, + ]; + + const messageV0 = new TransactionMessage({ + payerKey: wallet.publicKey, + recentBlockhash: latestBlockhash, + instructions: ix_list, + }).compileToV0Message(); + + let commitment: Commitment = retrieveEnvVariable( + "COMMITMENT_LEVEL", + logger + ) as Commitment; + + const transaction = new VersionedTransaction(messageV0); + + transaction.sign([wallet, ...innerTransaction.signers]); + + // uncomment if you want to land ur buy though nozomi + //sendNozomiTx(ix_list, wallet, latestBlockhash, "RAY", "Buy"); + + //await sleep(30000); + + /*const signature = await solanaConnection.sendRawTransaction(transaction.serialize(), { + preflightCommitment: commitment, + }); +*/ + //logger.info(`Sending bundle transaction with mint - ${signature}`); + // // + // if(tokenType==="pump") sendBundle(latestBlockhash, messageV0, poolState.quoteMint); + // else sendBundle(latestBlockhash, messageV0, poolState.baseMint); + + if (tokenType === "pump"){ + simple_executeAndConfirm( + transaction, + wallet, + latestBlockhash, + poolState.quoteMint.toBase58() + ); + } + else{ + simple_executeAndConfirm( + transaction, + wallet, + latestBlockhash, + poolState.baseMint.toBase58() + ); + } + boughtCache.save(target_token, true); + mutexForSnipe.release(); + } catch (error) { + logger.error(error); + } +} + +function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/index.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/index.ts new file mode 100755 index 0000000..1c5f313 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './utils'; +export * from './logger'; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/logger.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/logger.ts new file mode 100755 index 0000000..4e6ed61 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/logger.ts @@ -0,0 +1,17 @@ +import pino from "pino"; + +const transport = pino.transport({ + target: 'pino-pretty', +}); + +export const logger = pino( + { + level: 'info', + redact: ['poolKeys'], + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport, +); diff --git a/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/utils.ts b/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/utils.ts new file mode 100755 index 0000000..c404e1a --- /dev/null +++ b/src/grpc_streaming_dev/grpc-raydium-sniper/src/utils/utils.ts @@ -0,0 +1,13 @@ +import { Logger } from 'pino'; +import dotenv from 'dotenv'; + +dotenv.config(); + +export const retrieveEnvVariable = (variableName: string, logger: Logger) => { + const variable = process.env[variableName] || ''; + if (!variable) { + logger.error(`${variableName} is not set`); + process.exit(1); + } + return variable; +}; diff --git a/src/grpc_streaming_dev/grpc-rug-detection/README.md b/src/grpc_streaming_dev/grpc-rug-detection/README.md new file mode 100644 index 0000000..27eb347 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/README.md @@ -0,0 +1,50 @@ +# *Geyser grpc Rug Detection Bot (Still in development, don't use it)* + +## How it works + +- It uses the Geyser gRPC plugin to subscribe to all the latest slots received from the gRPC server. +- It monitors token addresses and checks for suspicious inflows to specific wallet addresses. +- If the inflow to a wallet address exceeds a defined threshold, it logs a warning indicating potential rug pull activity. + +## Prerequisites + +- Ensure you have the necessary environment variables set up in the `.env` file. +- Install the required dependencies by running `npm install` or `yarn install`. + +## Code usage + +- **constants/constants.ts**: Retrieves variables from the `.env` file. +- **streaming/stream-token.ts**: Contains the main logic for subscribing to token transactions and detecting suspicious inflows. +- **utils.ts**: Utility functions for handling gRPC subscriptions and other common tasks. +- **grpc-requests-type.ts**: Defines different gRPC request types for monitoring token transactions. +- **logger.ts**: Configures the logging mechanism for the project. + +## Running the Bot + +1. **Start the Rug Detection Bot**: + - Run the following command to start monitoring a specific token address: + ```bash + ts-node src/streaming/stream-token.ts --token-address + ``` + +2. **Example Command**: + - To monitor a token address and log suspicious inflows: + ```bash + ts-node src/streaming/stream-token.ts --token-address + ``` + +## Configuration + +- **Threshold**: You can configure the threshold for suspicious inflows in the `stream-token.ts` file. +- **Logging**: Adjust the logging level and format in the `logger.ts` file. + +## Additional Information + +- The bot uses the `@solana/web3.js` library to interact with the Solana blockchain. +- The gRPC client is configured to connect to the Geyser gRPC server for real-time transaction data. + +## Troubleshooting + +- Ensure your environment variables are correctly set in the `.env` file. +- Check the logs for any error messages and adjust the configuration as needed. +- Make sure you have a stable internet connection to receive real-time data from the gRPC server. diff --git a/src/grpc_streaming_dev/grpc-rug-detection/command.sh b/src/grpc_streaming_dev/grpc-rug-detection/command.sh new file mode 100644 index 0000000..a317466 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/command.sh @@ -0,0 +1 @@ +ts-node src/streaming/rug-detection.ts --token \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/constants/constants.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/constants/constants.ts new file mode 100644 index 0000000..4b1c18d --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/constants/constants.ts @@ -0,0 +1,11 @@ +import { logger, retrieveEnvVariable } from "../../../../utils"; +import { + Commitment + } from "@solana/web3.js"; +export const NETWORK = 'mainnet-beta'; +export const COMMITMENT_LEVEL: Commitment = retrieveEnvVariable('COMMITMENT_LEVEL', logger) as Commitment; +export const RPC_ENDPOINT = retrieveEnvVariable('MAINNET_ENDPOINT', logger); +export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable('WS_MAINNET_ENDPOINT', logger); +export const GRPC_XTOKEN = retrieveEnvVariable('GRPC_XTOKEN', logger); +export const GRPC_URL = retrieveEnvVariable('GRPC_URL', logger); +export const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger); \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/constants/index.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/constants/index.ts new file mode 100644 index 0000000..c7582ff --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/constants/index.ts @@ -0,0 +1 @@ +export * from "./constants" \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/grpc-requests-type.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/grpc-requests-type.ts new file mode 100644 index 0000000..e9f6679 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/grpc-requests-type.ts @@ -0,0 +1,42 @@ +import { + CommitmentLevel, + SubscribeRequest, + } from "@triton-one/yellowstone-grpc"; +import { req } from "pino-std-serializers"; +export async function createSubscribeTokenRequest(mintAddress: string) { + let request: any = null; + request = { + slots: {}, + accounts: {}, + transactions: { + pumpdotfun: { + vote: false, + failed: false, + signature: undefined, + accountInclude: [mintAddress], + accountExclude: [], + accountRequired: [mintAddress], + }, + }, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + commitment: CommitmentLevel.PROCESSED, // Subscribe to processed blocks for the fastest updates + entry: {}, + }; + return request; +} +export async function createClearAllSubscriptionsRequest() { + const request = { + "slots": {}, + "accounts": {}, + "transactions": {}, + "blocks": {}, + "blocksMeta": {}, + "accountsDataSlice": [] + }; + return request; +} + + diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/rug-detection.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/rug-detection.ts new file mode 100644 index 0000000..923be1d --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/rug-detection.ts @@ -0,0 +1,35 @@ +import { logger } from "../utils/logger"; +const {program} = require("commander") +let targetTokenToMonitor:string = ""; + +program.option("--token ", "Specify the token you want to monitor") + .option("-h, --help", "display help for command") + .action((options:any) => { + if (options.help) { + logger.info( + "ts-node rug-detection.ts --token " + ); + process.exit(0); + } + if(options.token){ + targetTokenToMonitor = options.token + } + }); +program.parse(); + +async function snipe(){ + + // show the options + logger.info(`Will monitor the token: ${targetTokenToMonitor}`); + + + try{ + + }catch(e){ + logger.error(`error when streaming ${e}`); + } + + +} + +snipe(); \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/stream-token.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/stream-token.ts new file mode 100644 index 0000000..4721f16 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/stream-token.ts @@ -0,0 +1,91 @@ +import pino from "pino"; +import Client from "@triton-one/yellowstone-grpc"; +import { PublicKey } from "@solana/web3.js"; +import bs58 from "bs58"; +import { + createClearAllSubscriptionsRequest, + createSubscribeTokenRequest, +} from "./grpc-requests-type"; +import { handleSubscribe } from "./utils"; +import { getSPLBalance, retriveWalletState } from "../../../../utils"; +import { GRPC_XTOKEN, GRPC_URL } from "../constants/constants"; +import { token } from "@metaplex-foundation/js"; +let trader_balance_wallet:any = {}; +export const raydium_authority = "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"; // ***it represent the person who extract/put the sol/token to the pool for every raydium swap txn*** +const client = new Client( + GRPC_URL, + GRPC_XTOKEN, + { + "grpc.max_receive_message_length": 64 * 1024 * 1024, // 64MiB + } +); //grpc endpoint +const transport = pino.transport({ + target: "pino-pretty", +}); + +export const logger = pino( + { + level: "info", + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport +); +// Array to store Jito leaders for current epoch + + +(async () => { + const version = await client.getVersion(); // gets the version information + logger.info(version); +})(); + +export async function checkIfRug(data: any, token_address: string) { + const suspiciousAddresses: { [key: string]: number } = {}; + const threshold = 1000; // Define a threshold for suspicious inflow + + data.transaction.message.instructions.forEach((instruction: any) => { + if (instruction.programId === token_address) { + // Decode the instruction data from base58 + const decodedInstruction = bs58.decode(instruction.data); + + // Extract the destination address (bytes 1 to 33) + const destination = new PublicKey(decodedInstruction.slice(1, 33)).toString(); + + // Extract the amount (bytes 33 to 41) and convert to integer + const amountBuffer = decodedInstruction.slice(33, 41); + const amount = parseInt(Buffer.from(amountBuffer).toString('hex'), 16); + + // Track the inflow to the destination address + if (!suspiciousAddresses[destination]) { + suspiciousAddresses[destination] = 0; + } + suspiciousAddresses[destination] += amount; + + // Log a warning if the inflow exceeds the threshold + if (suspiciousAddresses[destination] > threshold) { + logger.warn(`Suspicious inflow detected to address: ${destination}, amount: ${suspiciousAddresses[destination]}`); + } + } + }); +} + +export async function streamTargetTrader(token_address: string) { + try { + logger.info("Target token to monitor if it's going to rug: ", token); + + const stream = await client.subscribe(); + const r1 = await createSubscribeTokenRequest(token_address); + handleSubscribe(stream, r1); + stream.on("data", (data) => { + if (data.transaction !== undefined) { + logger.info(`Current slot: ${data.transaction.slot}`); + checkIfRug(data, token_address); // Call the checkIfRug function + } + }); + } catch (e) { + logger.error(e); + throw e; + } +} diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/utils.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/utils.ts new file mode 100644 index 0000000..3233728 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/streaming/utils.ts @@ -0,0 +1,65 @@ +import { + CommitmentLevel, + SubscribeRequest, + } from "@triton-one/yellowstone-grpc"; +import Client from "@triton-one/yellowstone-grpc"; +const PING_INTERVAL_MS = 30_000; + +export async function handleSubscribe(client_stream: any, args: SubscribeRequest){ + // Create `error` / `end` handler + const streamClosed = new Promise((resolve, reject) => { + client_stream.on("error", (error:any) => { + console.log("ERROR", error); + reject(error); + client_stream.end(); + }); + client_stream.on("end", () => { + resolve(); + }); + client_stream.on("close", () => { + resolve(); + }); + }); + + // Send subscribe request + await new Promise((resolve, reject) => { + client_stream.write(args, (err: any) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); + // Send pings every 5s to keep the connection open + const pingRequest: SubscribeRequest = { + ping: { id: 1 }, + // Required, but unused arguments + accounts: {}, + accountsDataSlice: [], + transactions: {}, + blocks: {}, + blocksMeta: {}, + entry: {}, + slots: {}, + }; + setInterval(async () => { + await new Promise((resolve, reject) => { + client_stream.write(pingRequest, (err:any) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); + }, PING_INTERVAL_MS); + + await streamClosed; +} \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/utils/index.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/utils/index.ts new file mode 100644 index 0000000..d90cdf8 --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './utils'; +export * from './logger'; \ No newline at end of file diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/utils/logger.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/utils/logger.ts new file mode 100644 index 0000000..393068e --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/utils/logger.ts @@ -0,0 +1,17 @@ +import pino from "pino"; + +const transport = pino.transport({ + target: 'pino-pretty', +}); + +export const logger = pino( + { + level: 'info', + redact: ['poolKeys'], + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport, +); diff --git a/src/grpc_streaming_dev/grpc-rug-detection/src/utils/utils.ts b/src/grpc_streaming_dev/grpc-rug-detection/src/utils/utils.ts new file mode 100644 index 0000000..0d22abd --- /dev/null +++ b/src/grpc_streaming_dev/grpc-rug-detection/src/utils/utils.ts @@ -0,0 +1,70 @@ +import { Logger } from 'pino'; +import dotenv from 'dotenv'; +import fs from "fs"; +import { Keypair, LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { Connection } from '@solana/web3.js'; +import { PublicKey } from '@solana/web3.js'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +dotenv.config(); + +export const retrieveEnvVariable = (variableName: string, logger: Logger) => { + const variable = process.env[variableName] || ''; + if (!variable) { + logger.error(`${variableName} is not set`); + process.exit(1); + } + return variable; +}; + +export function getKeypairByJsonPath(jsonPath: string): any { + try { + const keypairJson = fs.readFileSync(jsonPath, "utf-8"); + const data = JSON.parse(keypairJson); + const mintKeypair = Keypair.fromSecretKey(Uint8Array.from(data)); + return mintKeypair + } catch (e) { + console.log(e); + } +} +export async function printSOLBalance ( + connection: Connection, + pubKey: PublicKey, + info = "" +) { + const balance = await connection.getBalance(pubKey); + console.log( + `${info ? info + " " : ""}${pubKey.toBase58()}:`, + balance / LAMPORTS_PER_SOL, + `SOL` + ); +}; + +export async function getSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + pubKey: PublicKey, + allowOffCurve = false +) { + try { + let ata = getAssociatedTokenAddressSync(mintAddress, pubKey, allowOffCurve); + const balance = await connection.getTokenAccountBalance(ata, "processed"); + return balance.value.uiAmount; + } catch (e) {} + return null; +}; +async function printSPLBalance ( + connection: Connection, + mintAddress: PublicKey, + user: PublicKey, + info = "" +) { + const balance = await getSPLBalance(connection, mintAddress, user); + if (balance === null) { + console.log( + `${info ? info + " " : ""}${user.toBase58()}:`, + "No Account Found" + ); + } else { + console.log(`${info ? info + " " : ""}${user.toBase58()}:`, balance); + } +}; \ No newline at end of file diff --git a/src/helpers/.env.copy b/src/helpers/.env.copy deleted file mode 100644 index 5e3ccf1..0000000 --- a/src/helpers/.env.copy +++ /dev/null @@ -1,17 +0,0 @@ -## mainnet (comment the following if you want to switch to devnet) -PRIVATE_KEY = YOUR_PRIVATE_KEY -## devnet (un-comment the following if you want to switch to devnet) -#PRIVATE_KEY = YOUR_PRIVATE_KEY - -# recommend to use https://dev.helius.xyz/rpcs/my -# or https://shyft.to/dashboard/overview -DEVNET_ENDPOINT = "https://devnet-rpc.shyft.to?api_key=" -MAINNET_ENDPOINT = "https://mainnet.helius-rpc.com/?api-key=" -# recommend to use 0.00009 -# specify the fee for jito if you want to land your transaction faster -JITO_FEE = "0.0001" -BLOXROUTE_FEE = 0.001 -TAKE_PROFIT = 0.1 # sell when price up 10% -STOP_LOST = 0.2 # sell when price down 20% -SMART_MONEY_WALLET = "YOUR_SMART_MONEY_WALLET" -BLOXROUTE_AUTH_HEADER = "BLOXROUTE_AUTH_HEADER" # to get, go to https://docs.bloxroute.com/apis/authorization-headers \ No newline at end of file diff --git a/src/helpers/.env.example b/src/helpers/.env.example new file mode 100644 index 0000000..6d5ef85 --- /dev/null +++ b/src/helpers/.env.example @@ -0,0 +1,43 @@ +## mainnet (comment the following if you want to switch to devnet) +PRIVATE_KEY = YOUR_PRIVATE_KEY +## devnet (un-comment the following if you want to switch to devnet) +#PRIVATE_KEY = YOUR_PRIVATE_KEY + +# recommend to use https://dev.helius.xyz/rpcs/my +# or https://shyft.to/dashboard/overview +DEVNET_ENDPOINT = "https://devnet-rpc.shyft.to?api_key=" +MAINNET_ENDPOINT = "https://mainnet.helius-rpc.com/?api-key=" + +WS_MAINNET_ENDPOINT = "wss://mainnet.helius-rpc.com/?api-key=" +# recommend to use 0.00009 +# specify the fee for jito if you want to land your transaction faster +JITO_FEE = "0.0001" +BLOXROUTE_FEE = 0.001 + +# for limit order & tp/sl module +TAKE_PROFIT = 0.1 # sell when price up 10% +STOP_LOSS = 0.2 # sell when price down 20% +ORDER_SIZE = 1 # buy using 1 SOL, if current price hits target price +BUYIN_PERCENTAGE = 0.05 # buy in when price down 5% +SMART_MONEY_WALLET = "YOUR_SMART_MONEY_WALLET" +BLOXROUTE_AUTH_HEADER = "BLOXROUTE_AUTH_HEADER" # to get, go to https://docs.bloxroute.com/apis/authorization-headers + + +# for grpc development +COMMITMENT_LEVEL=confirmed +GRPC_XTOKEN="" # you can fill this with your token, or leave it empty depends on the provider +GRPC_URL="https://grpc.fra.shyft.to" # just a example, you can use another one or another grpc provider +LOG_LEVEL=info +BLOCK_ENGINE_URL=tokyo.mainnet.block-engine.jito.wtf +QUOTE_MINT=WSOL +# choose one of this endpoint closest to you +# amsterdam.mainnet.block-engine.jito.wtf +# frankfurt.mainnet.block-engine.jito.wtf +# slc.mainnet.block-engine.jito.wtf +# tokyo.mainnet.block-engine.jito.wtf +# ny.mainnet.block-engine.jito.wtf + + # for grpc pump.fun sniper bot +QUOTE_AMOUNT=0.05 # in SOL +AUTO_SELL=true # true or false +AUTO_SELL_TIMEOUT=5 # in seconds diff --git a/src/helpers/check_balance.js b/src/helpers/check_balance.ts similarity index 80% rename from src/helpers/check_balance.js rename to src/helpers/check_balance.ts index 2368c6d..20dba17 100644 --- a/src/helpers/check_balance.js +++ b/src/helpers/check_balance.ts @@ -1,19 +1,18 @@ -const { Connection, LAMPORTS_PER_SOL, PublicKey } = require("@solana/web3.js"); -const { +import { Connection, LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js"; +import { getDomainKeySync, NameRegistryState, -} = require("@bonfida/spl-name-service"); -const { main_endpoint, dev_endpoint } = require("./config"); -const connectionDev = new Connection(dev_endpoint, "confirmed"); +} from "@bonfida/spl-name-service"; +import { main_endpoint, wallet } from "./config"; const connectionMain = new Connection(main_endpoint); -const { getAssociatedTokenAddressSync } = require("@solana/spl-token"); +import { getAssociatedTokenAddressSync } from "@solana/spl-token"; /** * Retrieves the public key associated with a given .sol domain. * @param {string} domain - The .sol domain to retrieve the public key for. * @returns {Promise} The public key associated with the domain. */ -async function getPublicKeyFromSOLDomain(domain) { +export async function getPublicKeyFromSOLDomain(domain:string) { // check if the domain is a .sol domain // the last four characters should be ".sol" if (!domain.endsWith(".sol")) { @@ -35,7 +34,7 @@ async function getPublicKeyFromSOLDomain(domain) { * @param {object} connection - The connection object for interacting with the Solana network. * @returns {Promise} - A promise that resolves when the balance is checked. */ -async function checkBalanceByAddress(address, connection) { +export async function checkBalanceByAddress(address:string, connection:Connection) { // check if the address is valid // check the domain name of the address @@ -62,7 +61,7 @@ async function checkBalanceByAddress(address, connection) { * @returns {Promise} The balance of the SPL token. * @throws {Error} If no balance is found. */ -async function getSPLTokenBalance(connection, tokenAccount, payerPubKey) { +export async function getSPLTokenBalance(connection:Connection, tokenAccount:PublicKey, payerPubKey:PublicKey) { const address = getAssociatedTokenAddressSync(tokenAccount, payerPubKey); const info = await connection.getTokenAccountBalance(address); if (info.value.uiAmount == null) throw new Error("No balance found"); @@ -74,15 +73,14 @@ async function getSPLTokenBalance(connection, tokenAccount, payerPubKey) { * @param {object} connection - The connection object for interacting with the Solana network. * @returns {Promise} - A promise that resolves once the balance is checked. */ -async function checkBalanceByDomain(domain, connection) { +export async function checkBalanceByDomain(domain:string, connection:Connection) { // get the public key from the domain - const owner = await getPublicKeyFromSOLDomain(domain); + const owner:any = await getPublicKeyFromSOLDomain(domain); const balanceInLamports = await connection.getBalance(new PublicKey(owner)); const balanceInSOL = balanceInLamports / LAMPORTS_PER_SOL; console.log( `πŸ’° Finished! The balance for the wallet at domain ${domain} is ${balanceInSOL}!` ); -} -module.exports = { checkBalanceByAddress, getSPLTokenBalance }; +} \ No newline at end of file diff --git a/src/helpers/config.js b/src/helpers/config.js deleted file mode 100644 index 9c8f933..0000000 --- a/src/helpers/config.js +++ /dev/null @@ -1,97 +0,0 @@ -const { - Currency, - Token, - ENDPOINT, - MAINNET_PROGRAM_ID, - RAYDIUM_MAINNET, - TxVersion, - LOOKUP_TABLE_CACHE, - TOKEN_PROGRAM_ID, -} = require("@raydium-io/raydium-sdk"); -const { Connection, Keypair, PublicKey } = require("@solana/web3.js"); -const fs = require("fs"); -const dotenv = require("dotenv"); -const bs58 = require("bs58"); -const path = require("path"); -// default path: /Users/{your_user_name}/Desktop/Solana-Memecoin-CLI/src/helpers/.env -// please specify your own .env path -const envPath = path.join(__dirname, ".env"); -dotenv.config({ - path: envPath, // fill in your .env path -}); -function loadKeypairFromFile(filename) { - const secret = fs.readFileSync(filename, { encoding: "utf8" }); - return Keypair.fromSecretKey(Uint8Array.from(JSON.parse(secret))); -} -const jito_fee = process.env.JITO_FEE; // 0.00009 SOL -const shyft_api_key = process.env.SHYFT_API_KEY; // your shyft api key -const wallet = Keypair.fromSecretKey(bs58.decode(process.env.PRIVATE_KEY)); // your wallet -const private_key = process.env.PRIVATE_KEY; // your private key -const dev_endpoint = process.env.DEVNET_ENDPOINT; // devnet endpoint, if you use devnet -const main_endpoint = process.env.MAINNET_ENDPOINT; // mainnet endpoint -const bloXRoute_auth_header = process.env.BLOXROUTE_AUTH_HEADER; -const bloXroute_fee = process.env.BLOXROUTE_FEE; // 0.001 SOL -// const second_main_endpoint = process.env.SECOND_MAINNET_ENDPOINT; // if you use copy trade program, second mainnet endpoint -// const RPC_Websocket_endpoint = process.env.WS_ENDPOINT; -// const second_RPC_Websocket_endpoint = process.env.SECOND_WS_ENDPOINT; // if you use copy trade program -// const stop_lost = process.env.STOP_LOST; // percentage of stop lost, if you use copy trade program -// const take_profit = process.env.TAKE_PROFIT; // percentage of take profit, if you use copy trade program -const smart_money_wallet = process.env.SMART_MONEY_WALLET; // if you use copy trade program -const connection = new Connection(main_endpoint, "confirmed"); // mainnet connection -//const connection = new Connection(main_endpoint, { // if you use copy trade program -// wsEndpoint: RPC_Websocket_endpoint, -// commitment: "confirmed", -//}); -//const second_connection = new Connection(second_main_endpoint, { // if you use copy trade program -// wsEndpoint: second_RPC_Websocket_endpoint, -// commitment: "confirmed", -//}); -const dev_connection = new Connection(dev_endpoint, "confirmed"); // devnet connection - -const PROGRAMIDS = MAINNET_PROGRAM_ID; // raydium mainnet program address - -const RAYDIUM_MAINNET_API = RAYDIUM_MAINNET; // raydium mainnet program's api - -const makeTxVersion = TxVersion.V0; // LEGACY -const _ENDPOINT = ENDPOINT; // raydium mainnet program's base api path -const addLookupTableInfo = LOOKUP_TABLE_CACHE; // only mainnet. other = undefined - -const DEFAULT_TOKEN = { - SOL: new Currency(9, "SOL", "SOL"), - WSOL: new Token( - TOKEN_PROGRAM_ID, - new PublicKey("So11111111111111111111111111111111111111112"), - 9, - "WSOL", - "WSOL" - ), - USDC: new Token( - TOKEN_PROGRAM_ID, - new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), - 6, - "USDC", - "USDC" - ), -}; - -module.exports = { - wallet, - dev_connection, - dev_endpoint, - main_endpoint, - connection, - TOKEN_PROGRAM_ID, - RAYDIUM_MAINNET, - RAYDIUM_MAINNET_API, - PROGRAMIDS, - makeTxVersion, - DEFAULT_TOKEN, - addLookupTableInfo, - _ENDPOINT, - shyft_api_key, - jito_fee, - smart_money_wallet, - bloXRoute_auth_header, - private_key, - bloXroute_fee, -}; diff --git a/src/helpers/config.ts b/src/helpers/config.ts new file mode 100644 index 0000000..4ef2a19 --- /dev/null +++ b/src/helpers/config.ts @@ -0,0 +1,80 @@ +import { + Currency, + Token, + ENDPOINT, + MAINNET_PROGRAM_ID, + RAYDIUM_MAINNET, + TxVersion, + LOOKUP_TABLE_CACHE, + TOKEN_PROGRAM_ID, +} from "@raydium-io/raydium-sdk"; +import { Connection, Keypair, PublicKey } from "@solana/web3.js"; +import fs from "fs"; +import dotenv from "dotenv"; +import bs58 from "bs58"; +import path from "path"; +// default path: /Users/{your_user_name}/Desktop/solana-trading-cli/src/helpers/.env +// please specify your own .env path +const envPath = path.join(__dirname, ".env"); +dotenv.config({ + path: envPath, // fill in your .env path +}); +export function loadKeypairFromFile(filename: string) { + const secret = fs.readFileSync(filename, { encoding: "utf8" }); + return Keypair.fromSecretKey(Uint8Array.from(JSON.parse(secret))); +} +export const jito_fee:any = process.env.JITO_FEE; // 0.00009 SOL +export const shyft_api_key = process.env.SHYFT_API_KEY; // your shyft api key +export const wallet = Keypair.fromSecretKey( + bs58.decode(process.env.PRIVATE_KEY || "") +); // your wallet +export const private_key = process.env.PRIVATE_KEY; // your private key +export const dev_endpoint = process.env.DEVNET_ENDPOINT || ""; // devnet endpoint, if you use devnet +export const main_endpoint = process.env.MAINNET_ENDPOINT || ""; // mainnet endpoint +export const bloXRoute_auth_header = process.env.BLOXROUTE_AUTH_HEADER; +export const bloXroute_fee = process.env.BLOXROUTE_FEE; // 0.001 SOL +// const second_main_endpoint = process.env.SECOND_MAINNET_ENDPOINT; // if you use copy trade program, second mainnet endpoint +// const RPC_Websocket_endpoint = process.env.WS_ENDPOINT; +// const second_RPC_Websocket_endpoint = process.env.SECOND_WS_ENDPOINT; // if you use copy trade program +// const stop_lost = process.env.STOP_LOST; // percentage of stop lost, if you use copy trade program +// const take_profit = process.env.TAKE_PROFIT; // percentage of take profit, if you use copy trade program +export const smart_money_wallet = process.env.SMART_MONEY_WALLET; // if you use copy trade program +export const connection = new Connection(main_endpoint, "confirmed"); // mainnet connection +//const connection = new Connection(main_endpoint, { // if you use copy trade program +// wsEndpoint: RPC_Websocket_endpoint, +// commitment: "confirmed", +//}); +//const second_connection = new Connection(second_main_endpoint, { // if you use copy trade program +// wsEndpoint: second_RPC_Websocket_endpoint, +// commitment: "confirmed", +//}); +export const dev_connection = new Connection(dev_endpoint, "confirmed"); // devnet connection + +export const PROGRAMIDS = MAINNET_PROGRAM_ID; // raydium mainnet program address + +export const RAYDIUM_MAINNET_API = RAYDIUM_MAINNET; // raydium mainnet program's api + +export const makeTxVersion = TxVersion.V0; // LEGACY +export const _ENDPOINT = ENDPOINT; // raydium mainnet program's base api path +export const addLookupTableInfo = LOOKUP_TABLE_CACHE; // only mainnet. other = undefined + +export const DEFAULT_TOKEN = { + SOL: new Currency(9, "SOL", "SOL"), + WSOL: new Token( + TOKEN_PROGRAM_ID, + new PublicKey("So11111111111111111111111111111111111111112"), + 9, + "WSOL", + "WSOL" + ), + USDC: new Token( + TOKEN_PROGRAM_ID, + new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), + 6, + "USDC", + "USDC" + ), +}; + + +export const wsol = "So11111111111111111111111111111111111111112"; \ No newline at end of file diff --git a/src/helpers/index.ts b/src/helpers/index.ts new file mode 100644 index 0000000..4811d57 --- /dev/null +++ b/src/helpers/index.ts @@ -0,0 +1,7 @@ +export * from "./config"; +export * from "./util"; +export * from "./unwrap_sol"; +export * from "./check_balance"; +export * from "./wrap_sol"; +export * from "./logger"; +export * from "./utils"; \ No newline at end of file diff --git a/src/helpers/logger.ts b/src/helpers/logger.ts new file mode 100644 index 0000000..393068e --- /dev/null +++ b/src/helpers/logger.ts @@ -0,0 +1,17 @@ +import pino from "pino"; + +const transport = pino.transport({ + target: 'pino-pretty', +}); + +export const logger = pino( + { + level: 'info', + redact: ['poolKeys'], + serializers: { + error: pino.stdSerializers.err, + }, + base: undefined, + }, + transport, +); diff --git a/src/helpers/unwrap_sol.js b/src/helpers/unwrap_sol.ts similarity index 78% rename from src/helpers/unwrap_sol.js rename to src/helpers/unwrap_sol.ts index 0ea12e4..4c3f214 100644 --- a/src/helpers/unwrap_sol.js +++ b/src/helpers/unwrap_sol.ts @@ -1,19 +1,20 @@ -const { NATIVE_MINT, getOrCreateAssociatedTokenAccount, createCloseAccountInstruction } = require("@solana/spl-token"); -const { wallet, connection } = require("./config"); -const { Transaction, LAMPORTS_PER_SOL, sendAndConfirmTransaction } = require("@solana/web3.js"); -const { program } = require("commander"); +import { NATIVE_MINT, getOrCreateAssociatedTokenAccount, createCloseAccountInstruction } from "@solana/spl-token"; +import { wallet, connection } from "./config"; +import { Transaction, LAMPORTS_PER_SOL, sendAndConfirmTransaction } from "@solana/web3.js"; +import { program } from "commander"; +import { logger } from "./logger"; program .option("-h, --help", "display help for command") .action((options) => { if (options.help) { - console.log( - "node unwrap_sol.js" + logger.info( + "ts-node unwrap_sol.js" ); process.exit(0); } }); program.parse(); -async function unwrapSol(){ +export async function unwrapSol(){ // wSol ATA const wSolAta = await getOrCreateAssociatedTokenAccount(connection, wallet, NATIVE_MINT, wallet.publicKey); diff --git a/src/helpers/util.js b/src/helpers/util.ts similarity index 85% rename from src/helpers/util.js rename to src/helpers/util.ts index dfa037a..9ecee4a 100644 --- a/src/helpers/util.js +++ b/src/helpers/util.ts @@ -1,18 +1,18 @@ -const { +import { TOKEN_PROGRAM_ID, SPL_ACCOUNT_LAYOUT, buildSimpleTransaction, -} = require("@raydium-io/raydium-sdk"); -const { PublicKey, VersionedTransaction, Keypair } = require("@solana/web3.js"); -const { +} from "@raydium-io/raydium-sdk"; +import { PublicKey, VersionedTransaction, Keypair } from "@solana/web3.js"; +import { addLookupTableInfo, connection, makeTxVersion, wallet, -} = require("./config.js"); -const { Metaplex } = require("@metaplex-foundation/js"); -const fs = require("fs"); -const { +} from "./config"; +import { Metaplex } from "@metaplex-foundation/js"; +import fs from "fs"; +import { Connection, LAMPORTS_PER_SOL, SystemProgram, @@ -20,24 +20,14 @@ const { TransactionMessage, Transaction, ComputeBudgetProgram, -} = require("@solana/web3.js"); +} from "@solana/web3.js"; -/** - * Retrieves the number of decimals for a given mint address. - * @param {PublicKey} mintAddress - The address of the mint. - * @returns {Promise} The number of decimals. - */ -async function getDecimals(mintAddress) { - const info = await connection.getParsedAccountInfo(mintAddress); - const result = (info.value?.data).parsed.info.decimals || 0; - return result; -} /** * Retrieves the metadata of a token based on its address. * @param {string} address - The address of the token. * @returns {Promise<{ tokenName: string, tokenSymbol: string }>} The token metadata, including the token name and symbol. */ -async function getTokenMetadata(address) { +export async function getTokenMetadata(address:string) { const metaplex = Metaplex.make(connection); const mintAddress = new PublicKey(address); @@ -69,7 +59,7 @@ async function getTokenMetadata(address) { * @param {TransactionSendOptions} options - The options for sending the transactions. * @returns {Promise>} - A promise that resolves to an array of transaction IDs. */ -async function sendTx(connection, payer, txs, options) { +export async function sendTx(connection:Connection, payer:Keypair, txs:any, options:any) { const txids = []; try { for (const iTx of txs) { @@ -96,7 +86,7 @@ async function sendTx(connection, payer, txs, options) { * @param {Wallet} localwallet - The wallet object. * @returns {Array} An array of token account objects. */ -async function getWalletTokenAccount(localconnection, localwallet) { +export async function getWalletTokenAccount(localconnection:Connection, localwallet:PublicKey) { const walletTokenAccount = await localconnection.getTokenAccountsByOwner( localwallet, { @@ -116,7 +106,7 @@ async function getWalletTokenAccount(localconnection, localwallet) { * @param {Object} options - The options for the transaction. * @returns {Promise} - A promise that resolves with the result of the transaction. */ -async function buildAndSendTx(innerSimpleV0Transaction, options) { +export async function buildAndSendTx(innerSimpleV0Transaction:any, options:any) { try { const recentBlockhash = await connection.getLatestBlockhash("confirmed"); const priority_fee_arr = [ @@ -155,7 +145,7 @@ async function buildAndSendTx(innerSimpleV0Transaction, options) { * @param {number} ms - The duration to sleep in milliseconds. * @returns {Promise} - A promise that resolves after the specified duration. */ -async function sleepTime(ms) { +export async function sleepTime(ms:any) { console.log(new Date().toLocaleString(), "sleepTime", ms); return new Promise((resolve) => setTimeout(resolve, ms)); } @@ -168,7 +158,7 @@ async function sleepTime(ms) { * @param {string} filepath - The path to the file where the keypair is stored or will be stored. * @returns {Promise} The loaded or newly created keypair. */ -async function loadOrCreateKeypair_wallet(filepath) { +export async function loadOrCreateKeypair_wallet(filepath:string) { try { const keypairString = fs.readFileSync(filepath, { encoding: "utf8" }); return Keypair.fromSecretKey(Uint8Array.from(JSON.parse(keypairString))); @@ -182,7 +172,7 @@ async function loadOrCreateKeypair_wallet(filepath) { return newKeypair; } } -async function isBlockhashExpired(lastValidBlockHeight) { +export async function isBlockhashExpired(lastValidBlockHeight:number) { let currentBlockHeight = await connection.getBlockHeight("finalized"); console.log(" "); console.log("Current Block height: ", currentBlockHeight); @@ -199,10 +189,10 @@ async function isBlockhashExpired(lastValidBlockHeight) { return currentBlockHeight > lastValidBlockHeight - 150; } -const sleep = (ms) => { +export const sleep = (ms:number) => { return new Promise((resolve) => setTimeout(resolve, ms)); }; -async function checkTx(txId) { +export async function checkTx(txId:string) { const blockhashResponse = await connection.getLatestBlockhashAndContext( "finalized" ); @@ -243,13 +233,8 @@ async function checkTx(txId) { } } -module.exports = { - getDecimals, - getTokenMetadata, - getWalletTokenAccount, - sendTx, - buildAndSendTx, - sleepTime, - loadOrCreateKeypair_wallet, - checkTx, -}; +export async function getDecimals(mintAddress: PublicKey): Promise { + const info: any = await connection.getParsedAccountInfo(mintAddress); + const result = (info.value?.data).parsed.info.decimals || 0; + return result; +} \ No newline at end of file diff --git a/src/helpers/utils.ts b/src/helpers/utils.ts new file mode 100644 index 0000000..ff8f791 --- /dev/null +++ b/src/helpers/utils.ts @@ -0,0 +1,111 @@ +import { Logger } from "pino"; +import dotenv from "dotenv"; +import fs from "fs"; +import { Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js"; +import { Connection, PublicKey } from "@solana/web3.js"; +import { getAssociatedTokenAddressSync } from "@solana/spl-token"; +import { connection } from "./config"; +dotenv.config(); + +export const TOKEN_PROGRAM_ID = new PublicKey( + "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" +); +export const retrieveEnvVariable = (variableName: string, logger: Logger) => { + const variable = process.env[variableName] || ""; + if(variableName === "GRPC_XTOKEN") return variable; + if (!variable) { + logger.error(`${variableName} is not set`); + process.exit(1); + } + return variable; +}; + +export function getKeypairByJsonPath(jsonPath: string): any { + try { + const keypairJson = fs.readFileSync(jsonPath, "utf-8"); + const data = JSON.parse(keypairJson); + const mintKeypair = Keypair.fromSecretKey(Uint8Array.from(data)); + return mintKeypair; + } catch (e) { + console.log(e); + } +} +export async function printSOLBalance( + connection: Connection, + pubKey: PublicKey, + info = "" +) { + const balance = await connection.getBalance(pubKey); + console.log( + `${info ? info + " " : ""}${pubKey.toBase58()}:`, + balance / LAMPORTS_PER_SOL, + `SOL` + ); +} + +export async function getSPLBalance( + connection: Connection, + mintAddress: PublicKey, + pubKey: PublicKey, + allowOffCurve = false +): Promise { + try { + let ata = getAssociatedTokenAddressSync(mintAddress, pubKey, allowOffCurve); + const balance = await connection.getTokenAccountBalance(ata, "processed"); + return balance.value.uiAmount || 0; + } catch (e) {} + return 0; +} +export async function printSPLBalance( + connection: Connection, + mintAddress: PublicKey, + user: PublicKey, + info = "" +) { + const balance = await getSPLBalance(connection, mintAddress, user); + if (balance === null) { + console.log( + `${info ? info + " " : ""}${user.toBase58()}:`, + "No Account Found" + ); + } else { + console.log(`${info ? info + " " : ""}${user.toBase58()}:`, balance); + } +} +export async function retriveWalletState(wallet_address: string) { + try { + const filters = [ + { + dataSize: 165, //size of account (bytes) + }, + { + memcmp: { + offset: 32, //location of our query in the account (bytes) + bytes: wallet_address, //our search criteria, a base58 encoded string + }, + }, + ]; + const accounts = await connection.getParsedProgramAccounts( + TOKEN_PROGRAM_ID, //new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") + { filters: filters } + ); + let results: any = {}; + const solBalance = await connection.getBalance( + new PublicKey(wallet_address) + ); + accounts.forEach((account, i) => { + //Parse the account data + const parsedAccountInfo: any = account.account.data; + const mintAddress = parsedAccountInfo["parsed"]["info"]["mint"]; + const tokenBalance = + parsedAccountInfo["parsed"]["info"]["tokenAmount"]["uiAmount"]; + results[mintAddress] = tokenBalance; + }); + results["SOL"] = solBalance / 10 ** 9; + return results || {}; + } catch (e) { + console.log(e); + } + return {}; +} + diff --git a/src/helpers/wrap_sol.js b/src/helpers/wrap_sol.ts similarity index 74% rename from src/helpers/wrap_sol.js rename to src/helpers/wrap_sol.ts index 4d47204..7ec8778 100644 --- a/src/helpers/wrap_sol.js +++ b/src/helpers/wrap_sol.ts @@ -1,16 +1,17 @@ -const { NATIVE_MINT, getOrCreateAssociatedTokenAccount, createSyncNativeInstruction, } = require("@solana/spl-token"); -const { wallet, connection } = require("./config"); -const { Transaction, SystemProgram, LAMPORTS_PER_SOL, sendAndConfirmTransaction } = require("@solana/web3.js"); -const {getSPLTokenBalance} = require("./check_balance") -const { program } = require("commander"); +import { NATIVE_MINT, getOrCreateAssociatedTokenAccount, createSyncNativeInstruction, } from "@solana/spl-token"; +import { wallet, connection } from "./config"; +import { Transaction, SystemProgram, LAMPORTS_PER_SOL, sendAndConfirmTransaction } from "@solana/web3.js"; +import {getSPLTokenBalance} from "./check_balance"; +import { program } from "commander"; +import { logger } from "./logger"; let wrap_size = 0; program .option("-s, --size ", "size of sol to wrap") .option("-h, --help", "display help for command") - .action((options) => { + .action((options:any) => { if (options.help) { - console.log( - "node wrap_sol.js --size " + logger.info( + "ts-node wrap_sol.js --size " ); process.exit(0); } @@ -23,8 +24,8 @@ program } }); program.parse(); -async function wrap_sol( - amount +export async function wrap_sol( + amount:number ){ // wSol ATA const wSolAta = await getOrCreateAssociatedTokenAccount(connection, wallet, NATIVE_MINT, wallet.publicKey); @@ -62,12 +63,12 @@ async function wrap_sol( return txSignature; } -async function check_wsol_balance(wSolAta){ +export async function check_wsol_balance(wSolAta:any){ const wsolBalance = await getSPLTokenBalance(connection, NATIVE_MINT, wallet.publicKey); console.log(`new wsol balance: ${wsolBalance}`); } -async function main(){ +export async function main(){ await wrap_sol(wrap_size); } diff --git a/src/jupiter/README.md b/src/jupiter/README.md new file mode 100644 index 0000000..f5fa12c --- /dev/null +++ b/src/jupiter/README.md @@ -0,0 +1,52 @@ +# Jupiter DEX Aggregator Usage Examples + +### Buy token through cli +` +ts-node src/jupiter/buy.ts --token --sol +` + +### Sell token through cli +` +ts-node src/jupiter/sell.ts --token --percentage +` + +### swap token on Jupiter +```typescript +import {swap} from "../jupiter"; +import {getSPLTokenBalance} from "../helpers/check_balance"; +import {wallet, connection} from "../helpers/config"; +import {usdc} from "../jupiter/constants"; +async function main() { + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + await swap(tokenAddress, usdc, 5000, 1) // swapping 5000 popcat to usdc, using 1% slippage +} + +``` +### buy/sell token on Jupiter +```typescript +import {buy, sell} from "../jupiter"; +import {getSPLTokenBalance} from "../helpers/check_balance"; +import {wallet, connection} from "../helpers/config"; +async function main() { + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const sol = 1; // buy 1 SOL worth of token using WSOL + const sellPercentage = 50; // sell 50% of the token + await buy(tokenAddress, sol, 1) // buy 1 SOL worth of token, using 1% slippage + const balance = await getSPLTokenBalance(connection, new PublicKey(tokenAddress), wallet.publicKey); + await sell(tokenAddress, balance*sellPercentage/100, 1); // sell 50% of the token, using 1% slippage +} +``` + +### Fetch the price from Jupiter +```typescript +import {getCurrentPriceInSOL, getCurrentPriceInUSD} from "../jupiter"; +async function main() { + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const currentPopcatPriceInSOL = await getCurrentPriceInSOL(tokenAddress); + const currentPopcatPriceInUSD = await getCurrentPriceInUSD(tokenAddress); +} + +``` + + + diff --git a/src/jupiter/buy.ts b/src/jupiter/buy.ts new file mode 100644 index 0000000..4566081 --- /dev/null +++ b/src/jupiter/buy.ts @@ -0,0 +1,38 @@ +import { logger } from "../helpers/logger"; +import { program } from "commander"; +import { buy } from "./swap"; +import { wallet } from "../helpers/config"; +let token:string="", + sol:number=0; +program + .option("--token ", "Specify the token address") + .option("--sol ", "Specify the number of SOL") + .option("-h, --help", "display help for command") + .action((options) => { + if (options.help) { + logger.info( + "ts-node buy --token --sol " + ); + process.exit(0); + } + if (!options.token || !options.sol) { + console.error("❌ Missing required options"); + process.exit(1); + } + token = options.token; + sol = options.sol; + }); +program.parse(); + +/** + * Buy function to perform a swap on Jupiter. + * + * @param {string} side - The side of the trade (buy/sell). + * @param {string} token_address - The address of the token to trade. + * @param {number} no_of_sol - The amount of SOL to trade. + * @returns {Promise} - A promise that resolves when the swap is completed. + */ +async function buy_cli(side:string, token_address:string, no_of_sol:number) { + await buy(token_address, no_of_sol, 1); // using 1% slippage +} +buy_cli("buy", token, sol); diff --git a/src/jupiter/constants.ts b/src/jupiter/constants.ts new file mode 100644 index 0000000..4eaf39d --- /dev/null +++ b/src/jupiter/constants.ts @@ -0,0 +1,4 @@ +export const wsol = "So11111111111111111111111111111111111111112"; +export const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; +export const usdt = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"; // USDT + diff --git a/src/Trading_dev/dex/orca/fetch-pool.js b/src/jupiter/dca.ts similarity index 100% rename from src/Trading_dev/dex/orca/fetch-pool.js rename to src/jupiter/dca.ts diff --git a/src/jupiter/fetch-price.ts b/src/jupiter/fetch-price.ts new file mode 100644 index 0000000..5fdc108 --- /dev/null +++ b/src/jupiter/fetch-price.ts @@ -0,0 +1,29 @@ +import fetch from 'cross-fetch'; +import {wsol, usdc} from './constants'; +export async function getCurrentPriceInSOL(tokenAddress:string){ + try{ + const response = await( await fetch(`https://price.jup.ag/v6/price?ids=${tokenAddress}&vsToken=${wsol}`)).json(); + //const response = await( await fetch(`https://quote-api.jup.ag/v6/quote?inputMint=${wsol}&outputMint=${tokenAddress}&amount=1000000&slippageBps=50`) ).json() + console.log(response); + return response.data[tokenAddress].price; + }catch(e){ + console.log(`Error when getting current price of ${tokenAddress} `, e) + } +} + +export async function getCurrentPriceInUSD(tokenAddress:string){ + try{ + const response = await( await fetch(`https://price.jup.ag/v6/price?ids=${tokenAddress}&vsToken=${usdc}`)).json(); + //const response = await( await fetch(`https://quote-api.jup.ag/v6/quote?inputMint=${wsol}&outputMint=${tokenAddress}&amount=1000000&slippageBps=50`) ).json() + console.log(response); + return response.data[tokenAddress].price; + }catch(e){ + console.log(`Error when getting current price of ${tokenAddress} `, e) + } +} + +async function main(){ + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + console.log(await getCurrentPriceInUSD(tokenAddress)); +} +//main(); \ No newline at end of file diff --git a/src/jupiter/index.ts b/src/jupiter/index.ts new file mode 100644 index 0000000..5b5ad35 --- /dev/null +++ b/src/jupiter/index.ts @@ -0,0 +1 @@ +export * from "./swap"; \ No newline at end of file diff --git a/src/Trading_dev/dex/orca/sell.js b/src/jupiter/limit_order.ts similarity index 100% rename from src/Trading_dev/dex/orca/sell.js rename to src/jupiter/limit_order.ts diff --git a/src/jupiter/sell.ts b/src/jupiter/sell.ts new file mode 100644 index 0000000..6ee2a74 --- /dev/null +++ b/src/jupiter/sell.ts @@ -0,0 +1,42 @@ +import { logger } from "../helpers/logger"; +import {sell} from "./swap" +import { program } from "commander"; +import {getSPLTokenBalance} from "../helpers/check_balance" +import { connection, wallet } from "../helpers/config"; +import { PublicKey } from "@solana/web3.js"; + +let token:string="", + percentage:number=0; +program + .option("--token ", "Specify the token address") + .option("--percentage ", "Specify the sell percentage") + .option("-h, --help", "display help for command") + .action((options) => { + if (options.help) { + logger.info( + "ts-node sell --token --percentage " + ); + process.exit(0); + } + if (!options.token || !options.percentage) { + console.error("❌ Missing required options"); + process.exit(1); + } + token = options.token; + percentage = options.percentage; + }); +program.parse(); + +/** + * Sell function to perform a swap on the Meteora DEX. + * + * @param {string} side - The side of the trade (buy/sell). + * @param {string} token_address - The address of the token to trade. + * @param {number} sell_percentage - The sell percentage. + * @returns {Promise} - A promise that resolves when the swap is completed. + */ +async function sell_cli(side:string, token_address:string, sell_percentage:number) { + const balance = await getSPLTokenBalance(connection, new PublicKey(token_address), wallet.publicKey); + await sell(token_address, balance*percentage/100, 1); // using 1% slippage +} +sell_cli("sell", token, percentage); diff --git a/src/jupiter/swap/buy-helper.js b/src/jupiter/swap/buy-helper.ts similarity index 58% rename from src/jupiter/swap/buy-helper.js rename to src/jupiter/swap/buy-helper.ts index 749e052..2f5d659 100644 --- a/src/jupiter/swap/buy-helper.js +++ b/src/jupiter/swap/buy-helper.ts @@ -1,7 +1,7 @@ -const swap_helper = require("./swap-helper"); -const { PublicKey } = require("@solana/web3.js"); -const { wallet } = require("../../helpers/config"); -const { getDecimals } = require("../../helpers/util"); +import {getQuote, getSwapTransaction, convertToInteger, finalizeTransaction} from "./swap-helper"; +import { PublicKey } from "@solana/web3.js"; +import { wallet } from "../../helpers/config"; +import { getDecimals } from "../../helpers/util"; const wsol = "So11111111111111111111111111111111111111112"; /** @@ -13,13 +13,13 @@ const wsol = "So11111111111111111111111111111111111111112"; * @returns {Promise} - A promise that resolves when the buy operation is completed. * @throws {Error} - If an error occurs during the buy operation. */ -async function buy(tokenToBuy, amountTokenOut, slippage) { +export async function buy(tokenToBuy:string, amountTokenOut:number, slippage:any) { try { - const convertedAmountOfTokenOut = await swap_helper.convertToInteger( + const convertedAmountOfTokenOut = await convertToInteger( amountTokenOut, 9 ); - const quoteResponse = await swap_helper.getQuote( + const quoteResponse = await getQuote( wsol, tokenToBuy, convertedAmountOfTokenOut, @@ -27,12 +27,12 @@ async function buy(tokenToBuy, amountTokenOut, slippage) { ); console.log(quoteResponse); const wallet_PubKey = wallet.publicKey.toBase58(); - const swapTransaction = await swap_helper.getSwapTransaction( + const swapTransaction = await getSwapTransaction( quoteResponse, wallet_PubKey ); const { confirmed, signature } = - await swap_helper.finalizeTransaction(swapTransaction); + await finalizeTransaction(swapTransaction); if (confirmed) { console.log("http://solscan.io/tx/" + signature); } else { @@ -45,4 +45,12 @@ async function buy(tokenToBuy, amountTokenOut, slippage) { } } -module.exports = { buy }; +async function main() { + const tokenAddress = "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh"; + const amountOfSOLToUse = 0.015 + const slippage = 1; + await buy(tokenAddress, amountOfSOLToUse, slippage); +} + +//main(); + diff --git a/src/jupiter/swap/index.ts b/src/jupiter/swap/index.ts new file mode 100644 index 0000000..a5a5715 --- /dev/null +++ b/src/jupiter/swap/index.ts @@ -0,0 +1,3 @@ +export * from "./buy-helper"; +export * from "./swap-helper"; +export * from "./sell-helper"; \ No newline at end of file diff --git a/src/jupiter/swap/sell-helper.js b/src/jupiter/swap/sell-helper.ts similarity index 57% rename from src/jupiter/swap/sell-helper.js rename to src/jupiter/swap/sell-helper.ts index 1e4d946..4eabd22 100644 --- a/src/jupiter/swap/sell-helper.js +++ b/src/jupiter/swap/sell-helper.ts @@ -1,7 +1,12 @@ -const swap_helper = require("./swap-helper"); -const { PublicKey } = require("@solana/web3.js"); -const { wallet } = require("../../helpers/config"); -const { getDecimals } = require("../../helpers/util"); +import { + convertToInteger, + getQuote, + getSwapTransaction, + finalizeTransaction, +} from "./swap-helper"; +import { PublicKey } from "@solana/web3.js"; +import { wallet } from "../../helpers/config"; +import { getDecimals } from "../../helpers/util"; const wsol = "So11111111111111111111111111111111111111112"; /** @@ -11,29 +16,31 @@ const wsol = "So11111111111111111111111111111111111111112"; * @param {number} slippage - The slippage tolerance percentage. * @returns {Promise} - A promise that resolves when the sell operation is completed. */ -async function sell(tokenToSell, amountOfTokenToSell, slippage) { +export async function sell( + tokenToSell: string, + amountOfTokenToSell: number, + slippage: any +) { try { const decimals = await getDecimals(new PublicKey(tokenToSell)); console.log(decimals); - const convertedAmountOfTokenOut = await swap_helper.convertToInteger( + const convertedAmountOfTokenOut = await convertToInteger( amountOfTokenToSell, decimals ); console.log(convertedAmountOfTokenOut); - const quoteResponse = await swap_helper.getQuote( + const quoteResponse = await getQuote( tokenToSell, wsol, convertedAmountOfTokenOut, slippage ); const wallet_PubKey = wallet.publicKey.toBase58(); - const swapTransaction = await swap_helper.getSwapTransaction( + const swapTransaction = await getSwapTransaction( quoteResponse, wallet_PubKey ); - const { confirmed, signature } = await swap_helper.finalizeTransaction( - swapTransaction - ); + const { confirmed, signature } = await finalizeTransaction(swapTransaction); if (confirmed) { console.log("http://solscan.io/tx/" + signature); } else { @@ -46,4 +53,11 @@ async function sell(tokenToSell, amountOfTokenToSell, slippage) { } } -module.exports = { sell }; +async function main() { + const tokenAddress = "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh"; + const amountOfTokenToSell = 0.000025; + const slippage = 1; + await sell(tokenAddress, amountOfTokenToSell, slippage); +} + +// main(); \ No newline at end of file diff --git a/src/jupiter/swap/swap-helper.js b/src/jupiter/swap/swap-helper.ts similarity index 81% rename from src/jupiter/swap/swap-helper.js rename to src/jupiter/swap/swap-helper.ts index b87e83a..85a7a8a 100644 --- a/src/jupiter/swap/swap-helper.js +++ b/src/jupiter/swap/swap-helper.ts @@ -1,10 +1,8 @@ -const { VersionedTransaction, PublicKey } = require("@solana/web3.js"); -const fetch = require("cross-fetch"); -const { connection, wallet, jito_fee } = require("../../helpers/config"); -const { - jito_executeAndConfirm, -} = require("../../Transactions/jito_tips_tx_executor"); -const { getDecimals } = require("../../helpers/util"); +import { VersionedTransaction, PublicKey } from "@solana/web3.js"; +import fetch from "cross-fetch"; +import { connection, wallet, jito_fee } from "../../helpers/config"; +import { jito_executeAndConfirm } from "../../transactions/jito_tips_tx_executor"; +import { getDecimals } from "../../helpers/util"; /** * Retrieves a quote for swapping tokens. * @@ -14,11 +12,11 @@ const { getDecimals } = require("../../helpers/util"); * @param {number} slippage - The allowed slippage in basis points. * @returns {Promise} - The quote object containing swap details. */ -async function getQuote( - tokenToSell, - tokenToBuy, - convertedAmountOfTokenOut, - slippage +export async function getQuote( + tokenToSell: string, + tokenToBuy: string, + convertedAmountOfTokenOut: number, + slippage: any ) { const url = `https://quote-api.jup.ag/v6/quote?inputMint=${tokenToSell}&outputMint=${tokenToBuy}&amount=${convertedAmountOfTokenOut}&slippageBps=${slippage}`; const response = await fetch(url); @@ -33,7 +31,10 @@ async function getQuote( * @returns {Promise} - The swap transaction. * @throws {Error} - If an error occurs during the process. */ -async function getSwapTransaction(quoteResponse, wallet_pubKey) { +export async function getSwapTransaction( + quoteResponse: any, + wallet_pubKey: string +) { try { let body = null; body = { @@ -42,9 +43,6 @@ async function getSwapTransaction(quoteResponse, wallet_pubKey) { wrapAndUnwrapSol: true, dynamicComputeUnitLimit: true, // allow dynamic compute limit instead of max 1,400,000 prioritizationFeeLamports: 4211970, // prioritization fee - prioritizationFeeLamports: { - autoMultiplier: 2, - }, }; const resp = await fetch("https://quote-api.jup.ag/v6/swap", { method: "POST", @@ -55,7 +53,7 @@ async function getSwapTransaction(quoteResponse, wallet_pubKey) { }); const swapResponse = await resp.json(); return swapResponse.swapTransaction; - } catch (error) { + } catch (error: any) { throw new Error(error); } } @@ -65,7 +63,7 @@ async function getSwapTransaction(quoteResponse, wallet_pubKey) { * @param {number} decimals - The number of decimal places. * @returns {Promise} The converted integer value. */ -async function convertToInteger(amount, decimals) { +export async function convertToInteger(amount: number, decimals: number) { return Math.floor(amount * 10 ** decimals); } @@ -75,7 +73,7 @@ async function convertToInteger(amount, decimals) { * @returns {Promise<{ confirmed: boolean, signature: string }>} - A promise that resolves to an object containing the confirmation status and transaction signature. * @throws {Error} - If an error occurs during the transaction finalization process. */ -async function finalizeTransaction(swapTransaction) { +export async function finalizeTransaction(swapTransaction: any) { try { let confirmed = null, signature = null; @@ -85,8 +83,8 @@ async function finalizeTransaction(swapTransaction) { // sign the transaction transaction.sign([wallet]); - const latestBlockhash = await connection.getLatestBlockhash("processed"); - res = await jito_executeAndConfirm( + const latestBlockhash = await connection.getLatestBlockhash("confirmed"); + const res = await jito_executeAndConfirm( transaction, wallet, latestBlockhash, @@ -95,7 +93,7 @@ async function finalizeTransaction(swapTransaction) { confirmed = res.confirmed; signature = res.signature; return { confirmed, signature }; - } catch (error) { + } catch (error: any) { throw new Error(error); } return { confirmed: false, signature: null }; @@ -109,7 +107,12 @@ async function finalizeTransaction(swapTransaction) { * @param {number} slippage - The allowed slippage percentage. * @returns {Promise} - A promise that resolves when the swap transaction is completed. */ -async function swap(tokenToSell, tokenToBuy, amountTokenOut, slippage) { +export async function swap( + tokenToSell: string, + tokenToBuy: string, + amountTokenOut: number, + slippage: any +) { try { const decimals = await getDecimals(new PublicKey(tokenToSell)); const convertedAmountOfTokenOut = await convertToInteger( @@ -139,10 +142,3 @@ async function swap(tokenToSell, tokenToBuy, amountTokenOut, slippage) { console.error(error); } } -module.exports = { - getQuote, - getSwapTransaction, - finalizeTransaction, - convertToInteger, - swap, -}; diff --git a/src/jupiter/test.ts b/src/jupiter/test.ts new file mode 100644 index 0000000..a733ad3 --- /dev/null +++ b/src/jupiter/test.ts @@ -0,0 +1,10 @@ +import { getCurrentPriceInSOL, getCurrentPriceInUSD } from "./fetch-price"; +async function main() { + const tokenAddress = "2SEUhUGpKMPuyDysMFfKNRLBxVf9kG2xBxW16FVopump"; + const currentPopcatPriceInSOL = await getCurrentPriceInSOL(tokenAddress); + const currentPopcatPriceInUSD = await getCurrentPriceInUSD(tokenAddress); + console.log(`Current price in SOL: ${currentPopcatPriceInSOL}`); + console.log(`Current price in USD: ${currentPopcatPriceInUSD}`); +} + +main(); diff --git a/src/Trading_dev/dex/orca/swap.js b/src/memecoin_dev/bundled_launcher/index.ts similarity index 100% rename from src/Trading_dev/dex/orca/swap.js rename to src/memecoin_dev/bundled_launcher/index.ts diff --git a/src/Memecoin_dev/market-making_dev/boost_volume.js b/src/memecoin_dev/market-making_dev/boost_volume.ts similarity index 68% rename from src/Memecoin_dev/market-making_dev/boost_volume.js rename to src/memecoin_dev/market-making_dev/boost_volume.ts index 751df3a..b709bd0 100644 --- a/src/Memecoin_dev/market-making_dev/boost_volume.js +++ b/src/memecoin_dev/market-making_dev/boost_volume.ts @@ -1,26 +1,20 @@ -const { connection, wallet } = require("../../helpers/config.js"); -const { - simple_executeAndConfirm, -} = require("../../Transactions/simple_tx_executor.js"); -const { - jito_executeAndConfirm, -} = require("../../Transactions/jito_tips_tx_executor.js"); -const { program } = require("commander"); -const { - loadOrCreateKeypair_wallet, - checkTx, -} = require("../../helpers/util.js"); -const { +import { connection, wallet } from "../../helpers/config"; +import { simple_executeAndConfirm } from "../../transactions/simple_tx_executor"; +import { jito_executeAndConfirm } from "../../transactions/jito_tips_tx_executor"; +import { program } from "commander"; +import { loadOrCreateKeypair_wallet, checkTx } from "../../helpers/util"; +import { ComputeBudgetProgram, TransactionMessage, VersionedTransaction, -} = require("@solana/web3.js"); -const { swapForVolume } = require("../../raydium/Pool/swap.js"); +} from "@solana/web3.js"; +import { swapForVolume } from "../../raydium/Pool/swap"; +import { logger } from "../../helpers"; let slippage = null, - tokenAddress = null, - payer = null, + tokenAddress: any = null, + payer: any = null, cluster = null, - solPerOrder = null; + solPerOrder: any = null; program .option("--token_address ", "Specify the token address") @@ -31,10 +25,10 @@ program "Specify the number of SOL per order" ) .option("-h, --help", "display help for command") - .action((options) => { + .action((options: any) => { if (options.help) { - console.log( - "node boost_volume --token_address --payer --cluster --sol_per_order " + logger.info( + "ts-node boost_volume --token_address --payer --cluster --sol_per_order " ); process.exit(0); } @@ -61,11 +55,8 @@ async function boost_volume() { `Boosting volume..., buying and selling ${tokenAddress} in one transaction...` ); try { - const { confirmed, signature } = await swapForVolume( - tokenAddress, - solPerOrder - ); - await error_handling(signature, confirmed); + const res: any = await swapForVolume(tokenAddress, solPerOrder); + await error_handling(res.signature, res.confirmed); } catch (e) { console.log(e); console.log("trying to send the transaction again..."); @@ -81,7 +72,7 @@ async function boost_volume() { * @param {boolean} confirmed - Indicates if the transaction is confirmed. * @returns {Promise} - A promise that resolves when the error handling is complete. */ -async function error_handling(signature, confirmed) { +async function error_handling(signature: any, confirmed: any) { if (confirmed) { console.log(`https://solscan.io/tx/${signature}?cluster=mainnet`); return; diff --git a/src/meteora/Pool/fetch-pool.ts b/src/meteora/Pool/fetch-pool.ts new file mode 100644 index 0000000..7cd364b --- /dev/null +++ b/src/meteora/Pool/fetch-pool.ts @@ -0,0 +1,36 @@ +import { PublicKey, Keypair } from "@solana/web3.js"; +import DLMM from "@meteora-ag/dlmm"; +import { connection, wallet } from "../../helpers/config"; + +export async function fetchDLMMPoolId(tokenAddress: string) { + const url = `https://dlmm-api.meteora.ag/pair/all_by_groups?sort_key=tvl&order_by=desc&search_term=${tokenAddress}&include_unknown=false`; + const response = await (await fetch(url)).json(); + // check if the string start with "SOL" or end with "SOL" + + const listOfGroups = response.groups; + for (const group of listOfGroups) { + const name = group.name; + if (name.startsWith("SOL") || name.endsWith("SOL")) { + return group.pairs[0].address; + } + } + console.log( + "No DLMM Pool ID found for the given token address: ", + tokenAddress + ); + return ""; // return empty string if no DLMMPool ID is found +} +export async function fetchDLMMPool(tokenAddress: string) { + const poolId = await fetchDLMMPoolId(tokenAddress); + console.log("Pool ID: ", poolId); + const dlmmPool = await DLMM.create(connection, new PublicKey(poolId)); + return dlmmPool; +} +async function main() { + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + // const poolId = await fetchDLMMPoolId(tokenAddress); + // console.log(poolId); + await fetchDLMMPool(tokenAddress); +} + +// main(); diff --git a/src/meteora/Pool/index.ts b/src/meteora/Pool/index.ts new file mode 100644 index 0000000..62ea691 --- /dev/null +++ b/src/meteora/Pool/index.ts @@ -0,0 +1,2 @@ +export * from "./fetch-pool"; +export * from "./swap"; \ No newline at end of file diff --git a/src/meteora/Pool/swap.ts b/src/meteora/Pool/swap.ts new file mode 100644 index 0000000..f1e784f --- /dev/null +++ b/src/meteora/Pool/swap.ts @@ -0,0 +1,142 @@ +import "rpc-websockets/dist/lib/client"; +import { + PublicKey, + Keypair, + LAMPORTS_PER_SOL, + sendAndConfirmRawTransaction, + sendAndConfirmTransaction, +} from "@solana/web3.js"; +import DLMM from "@meteora-ag/dlmm"; +//const BN =require("bn.js"); +import { connection, wallet } from "../../helpers/config"; +import { getSPLTokenBalance } from "../../helpers/check_balance"; +import { PROGRAM_ID, wsol } from "../constants"; +import { fetchDLMMPoolId, fetchDLMMPool } from "./fetch-pool"; +import { + TransactionMessage, + ComputeBudgetProgram, + VersionedTransaction, +} from "@solana/web3.js"; +import { jito_executeAndConfirm } from "../../transactions/jito_tips_tx_executor"; +import { jito_fee } from "../../helpers/config"; +import { C } from "@raydium-io/raydium-sdk-v2/lib/raydium-276d396e"; +const BN = require("bn.js"); + +/** + * Performs a swap operation in a DLMM pool. + * @param side The side of the swap operation, either "buy" or "sell". Default is "buy". + * @param tokenAddress The address of the token to be swapped. + * @param buyAmountInSOL The amount of SOL to be used for buying the token. Default is 0.1. + * @param sellPercentage The percentage of the token to be sold. Default is 100%. + * @returns A Promise that resolves to the transaction hash if the swap is successful, otherwise an error object. + */ +export async function swap( + side: string = "buy", + tokenAddress: string, + buyAmountInSOL: number = 0.1, + sellPercentage: number = 100 +) { + let swapYtoX = true, + decimalY: number, + decimalX: number, + inToken: PublicKey, + outToken: PublicKey, + swapAmount: any; + const dlmmPool = await fetchDLMMPool(tokenAddress); // fetch the DLMM pool object for swapping + decimalY = dlmmPool.tokenY.decimal; + decimalX = dlmmPool.tokenX.decimal; + if (side === "buy") { + // inToken = wsol + if (dlmmPool.tokenY.publicKey.toBase58() === wsol) { + inToken = dlmmPool.tokenY.publicKey; + outToken = dlmmPool.tokenX.publicKey; + } else { + inToken = dlmmPool.tokenX.publicKey; + outToken = dlmmPool.tokenY.publicKey; + } + swapAmount = new BN(buyAmountInSOL * 10 ** 9); // convert to lamports + } else { + if (dlmmPool.tokenY.publicKey.toBase58() === wsol) { + inToken = dlmmPool.tokenX.publicKey; + outToken = dlmmPool.tokenY.publicKey; + const balance = await getSPLTokenBalance( + connection, + inToken, + wallet.publicKey + ); + const amount = balance * (sellPercentage / 100); + swapAmount = new BN(amount * 10 ** decimalX); // convert to lamports + } else { + inToken = dlmmPool.tokenY.publicKey; + outToken = dlmmPool.tokenX.publicKey; + const balance = await getSPLTokenBalance( + connection, + inToken, + wallet.publicKey + ); + const amount = balance * (sellPercentage / 100); + swapAmount = new BN(amount * 10 ** decimalY); // convert to lamports + } + } + + const binArrays = await dlmmPool.getBinArrayForSwap(swapYtoX); // list of pools + const swapQuote = await dlmmPool.swapQuote( + // get the swap quote + swapAmount, + swapYtoX, + new BN(10), + binArrays + ); + const swapTx: any = await dlmmPool.swap({ + inToken: inToken, + binArraysPubkey: swapQuote.binArraysPubkey, + inAmount: swapAmount, + lbPair: dlmmPool.pubkey, + user: wallet.publicKey, + minOutAmount: swapQuote.minOutAmount, + outToken: outToken, + }); + console.log(swapTx); + // try { + // const swapTxHash = await sendAndConfirmTransaction(connection, swapTx, [ + // wallet, + // ]); + // console.log(`πŸš€ https://solscan.io/tx/${swapTxHash}`); + // } catch (error) { + // console.log("πŸš€ ~ error:", JSON.parse(JSON.stringify(error))); + // } + try { + const recentBlockhash = await connection.getLatestBlockhash(); + const messageV0 = new TransactionMessage({ + payerKey: wallet.publicKey, + recentBlockhash: recentBlockhash.blockhash, + instructions: [...swapTx.instructions], + }).compileToV0Message(); + + const transaction = new VersionedTransaction(messageV0); + transaction.sign([wallet]); + const res = await jito_executeAndConfirm( + transaction, + wallet, + recentBlockhash, + jito_fee + ); + const signature = res.signature; + const confirmed = res.confirmed; + + if (confirmed) { + console.log(`πŸš€ https://solscan.io/tx/${signature}`); + } else { + console.log( + "jito fee transaction failed when swapping token in a DLMM pool" + ); + } + } catch (error: any) { + console.log("πŸš€ ~ error:", JSON.parse(JSON.stringify(error))); + } +} +async function main() { + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + await swap("sell", tokenAddress, -1, 100); +} +//main(); diff --git a/src/meteora/README.md b/src/meteora/README.md new file mode 100644 index 0000000..e6729de --- /dev/null +++ b/src/meteora/README.md @@ -0,0 +1,64 @@ +# Meteora DEX Usage Examples + +### Buy token through cli +` +ts-node src/meteora/buy.ts --token --sol +` + +### Sell token through cli +` +ts-node src/meteora/sell.ts --token --percentage +` +### buy/sell token on Meteora +```typescript +import {buy, sell} from "../meteora"; +import {wallet} from "../helpers/config"; +async function main() { + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const sol = 1; // buy 1 SOL worth of token using WSOL + const sellPercentage = 50; // sell 50% of the token + await buy(tokenAddress, sol) // buy 1 SOL worth of token + await sell(tokenAddress, sellPercentage); // sell 50% of the token +} +``` + +### Fetch the price from Meteora DLMM pool +```typescript +import {getCurrentPriceInUSD, getCurrentPriceInSOL} from "../meteora"; + +const currentPopcatPriceInSOL = await getCurrentPriceInSOL("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); +const currentPopcatPriceInUSD = await getCurrentPriceInUSD("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); + +console.log(currentPopcatPriceInSOL); +console.log(currentPopcatPriceInUSD); +``` + +### Fetch the pool address for the target token +```typescript +import {fetchWhirlPoolId} from "../meteora"; + +async function main(){ + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const poolId = await fetchDLMMPoolId(tokenAddress); // output Address: POPCAT/WSOL or WSOL/ + console.log(poolId); +} +``` + +### Fetch the metrics of the pool +```typescript +import {getCurrentMarketCap, getCurrentSolInPool, getLastNDayVolume, getDayVolume, getWeekVolume, getMonthVolume} from "../meteora"; + +async function main(){ + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const currentMarketCap = await getCurrentMarketCap(tokenAddress); // to get the current market cap of the token + const currentSolInPool = await getCurrentSolInPool(tokenAddress); // to get the current number of SOL in the pool + const n = 14; // last 14 days + const lastNDayVolume = await getLastNDayVolume(tokenAddress, n); // to get the volume of last n days + const dayVolume = await getDayVolume(tokenAddress); // to get the volume of last 24 hours + const weekVolume = await getWeekVolume(tokenAddress); // to get the volume of last 7 days + const monthVolume = await getMonthVolume(tokenAddress); // to get the volume of last 30 days + +} +``` + + diff --git a/src/meteora/buy.ts b/src/meteora/buy.ts new file mode 100644 index 0000000..e6663f4 --- /dev/null +++ b/src/meteora/buy.ts @@ -0,0 +1,38 @@ +import { logger } from "../helpers/logger"; +import {swap} from "./Pool" +import { program } from "commander"; + +let token:string="", + sol:number=0; +program + .option("--token ", "Specify the token address") + .option("--sol ", "Specify the number of SOL") + .option("-h, --help", "display help for command") + .action((options) => { + if (options.help) { + logger.info( + "ts-node buy --token --sol " + ); + process.exit(0); + } + if (!options.token || !options.sol) { + console.error("❌ Missing required options"); + process.exit(1); + } + token = options.token; + sol = options.sol; + }); +program.parse(); + +/** + * Buy function to perform a swap on the Meteora DEX. + * + * @param {string} side - The side of the trade (buy/sell). + * @param {string} token_address - The address of the token to trade. + * @param {number} no_of_sol - The amount of SOL to trade. + * @returns {Promise} - A promise that resolves when the swap is completed. + */ +async function buy(side:string, token_address:string, no_of_sol:number) { + await swap(side, token_address, no_of_sol, -1); +} +buy("buy", token, sol); diff --git a/src/meteora/buy_helper.ts b/src/meteora/buy_helper.ts new file mode 100644 index 0000000..abdc4c4 --- /dev/null +++ b/src/meteora/buy_helper.ts @@ -0,0 +1,11 @@ +import {swap} from "./Pool"; + +/** + * Buys a specified amount of tokens using SOL. + * + * @param token_address The address of the token to buy. + * @param buyAmountInSOL The amount of SOL to use for the purchase. + */ +export async function buy(token_address:string, buyAmountInSOL:number) { + await swap("buy", token_address, buyAmountInSOL, -1); +} \ No newline at end of file diff --git a/src/meteora/constants.ts b/src/meteora/constants.ts new file mode 100644 index 0000000..98e4e7b --- /dev/null +++ b/src/meteora/constants.ts @@ -0,0 +1,5 @@ +export const PROGRAM_ID = "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"; +export const wsol = "So11111111111111111111111111111111111111112"; +export const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; +export const usdt = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"; // USDT + diff --git a/src/meteora/fetch-price.ts b/src/meteora/fetch-price.ts new file mode 100644 index 0000000..3e01216 --- /dev/null +++ b/src/meteora/fetch-price.ts @@ -0,0 +1,35 @@ +import { fetchDLMMPoolId, fetchDLMMPool } from "./Pool"; +import {usdc} from "./constants"; + +// on-chain rpc method to get the current price of the token +export async function getCurrentPriceInSOL(tokenAddress:string):Promise { + const dlmmPool = await fetchDLMMPool(tokenAddress); + dlmmPool.refetchStates(); + const activeBin = await dlmmPool.getActiveBin(); + const activeBinPricePerToken = dlmmPool.fromPricePerLamport( + Number(activeBin.price) + ); + return activeBinPricePerToken; +} +export async function getCurrentSolPrice():Promise { + + const dlmmPool = await fetchDLMMPool(usdc); + dlmmPool.refetchStates(); + const activeBin = await dlmmPool.getActiveBin(); + const activeBinPricePerToken = dlmmPool.fromPricePerLamport( + Number(activeBin.price) + ); + return activeBinPricePerToken; +} +export async function getCurrentPriceInUSD(tokenAddress:string):Promise { + return (await getCurrentPriceInSOL(tokenAddress))*(await getCurrentSolPrice()); +} + + +async function main(){ + // console.log(await getCurrentPriceInSOL("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr")); + // console.log(await getCurrentPriceInUSD("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr")); + console.log(await getCurrentPriceInUSD("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr")); +} + +//main(); diff --git a/src/meteora/index.ts b/src/meteora/index.ts new file mode 100644 index 0000000..fb25ce1 --- /dev/null +++ b/src/meteora/index.ts @@ -0,0 +1,5 @@ +export * from "./buy_helper"; +export * from "./sell_helper"; +export * from "./fetch-price"; +export * from "./Pool"; +export * from "./token-filters"; \ No newline at end of file diff --git a/src/meteora/sell.ts b/src/meteora/sell.ts new file mode 100644 index 0000000..94de408 --- /dev/null +++ b/src/meteora/sell.ts @@ -0,0 +1,38 @@ +import { logger } from "../helpers/logger"; +import {swap} from "./Pool" +import { program } from "commander"; + +let token:string="", + percentage:number=0; +program + .option("--token ", "Specify the token address") + .option("--percentage ", "Specify the sell percentage") + .option("-h, --help", "display help for command") + .action((options) => { + if (options.help) { + logger.info( + "ts-node sell --token --percentage " + ); + process.exit(0); + } + if (!options.token || !options.percentage) { + console.error("❌ Missing required options"); + process.exit(1); + } + token = options.token; + percentage = options.percentage; + }); +program.parse(); + +/** + * Sell function to perform a swap on the Meteora DEX. + * + * @param {string} side - The side of the trade (buy/sell). + * @param {string} token_address - The address of the token to trade. + * @param {number} sell_percentage - The sell percentage. + * @returns {Promise} - A promise that resolves when the swap is completed. + */ +async function sell(side:string, token_address:string, sell_percentage:number) { + await swap(side, token_address, -1, sell_percentage); +} +sell("sell", token, percentage); diff --git a/src/meteora/sell_helper.ts b/src/meteora/sell_helper.ts new file mode 100644 index 0000000..68ac72c --- /dev/null +++ b/src/meteora/sell_helper.ts @@ -0,0 +1,11 @@ +import {swap} from "./Pool"; + +/** + * Sells a token with the specified token address and sell percentage. + * + * @param token_address The address of the token to be sold. + * @param sell_percentage The percentage of the token to be sold. + */ +export async function sell(token_address:string, sell_percentage:number) { + await swap("sell", token_address, -1, sell_percentage); +} \ No newline at end of file diff --git a/src/meteora/token-filters/index.ts b/src/meteora/token-filters/index.ts new file mode 100644 index 0000000..12b289b --- /dev/null +++ b/src/meteora/token-filters/index.ts @@ -0,0 +1,3 @@ +export * from "./marketcap"; +export * from "./pool-sol"; +export * from "./volume"; \ No newline at end of file diff --git a/src/meteora/token-filters/marketcap.ts b/src/meteora/token-filters/marketcap.ts new file mode 100644 index 0000000..484f9ad --- /dev/null +++ b/src/meteora/token-filters/marketcap.ts @@ -0,0 +1,17 @@ +import { wsol } from "../constants"; +import { getCurrentPriceInUSD } from "../fetch-price"; +import { connection } from "../../helpers/config"; +import { PublicKey } from "@solana/web3.js"; + +export async function getCurrentMarketCap( + tokenAddress: string +): Promise { + let priceInUSD: number = await getCurrentPriceInUSD(tokenAddress); + const tokenSupply: any = await connection.getTokenSupply( + new PublicKey(tokenAddress) + ); + const marketCap: number = priceInUSD * tokenSupply.value.uiAmount; + return marketCap; +} + +//getCurrentMarketCap("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); diff --git a/src/meteora/token-filters/pool-sol.ts b/src/meteora/token-filters/pool-sol.ts new file mode 100644 index 0000000..3f5c7a5 --- /dev/null +++ b/src/meteora/token-filters/pool-sol.ts @@ -0,0 +1,16 @@ +import {fetchDLMMPool} from "../Pool"; +import {wsol} from "../constants" +export async function getCurrentSolInPool(token_address:string):Promise { + const dlmmPool = await fetchDLMMPool(token_address); + let solReserve:number; + if(dlmmPool.tokenX.publicKey.toBase58() === wsol){ + solReserve = Number(dlmmPool.tokenX.amount)/Math.pow(10,dlmmPool.tokenX.decimal); + }else{ + solReserve = Number(dlmmPool.tokenY.amount)/Math.pow(10,dlmmPool.tokenY.decimal); + } + console.log(solReserve); + return solReserve; + +} + +//getCurrentSolInPool("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); \ No newline at end of file diff --git a/src/meteora/token-filters/volume.ts b/src/meteora/token-filters/volume.ts new file mode 100644 index 0000000..863eabe --- /dev/null +++ b/src/meteora/token-filters/volume.ts @@ -0,0 +1,58 @@ +import {fetchDLMMPoolId} from "../Pool"; +const fetch = require('node-fetch'); + + +// max 255 days of data +export async function getLastNDayVolume( + tokenAddress: string, + n: number +): Promise { + const poolId = await fetchDLMMPoolId(tokenAddress); + const url = `https://dlmm-api.meteora.ag/pair/${poolId}/analytic/pair_trade_volume?num_of_days=${n}` + const response = await (await fetch(url)).json(); + let sumOfVolume = 0; + for (const day of response) { + sumOfVolume += day.trade_volume; + } + console.log(sumOfVolume); + return sumOfVolume; +} + +export async function getDayVolume(tokenAddress:string){ + const poolId = await fetchDLMMPoolId(tokenAddress); + const url = `https://dlmm-api.meteora.ag/pair/${poolId}/analytic/pair_trade_volume?num_of_days=1` + const response = await (await fetch(url)).json(); + let sumOfVolume = 0; + for (const day of response) { + sumOfVolume += day.trade_volume; + } + console.log(sumOfVolume); + return sumOfVolume; +} + +export async function getWeekVolume(tokenAddress:string){ + const poolId = await fetchDLMMPoolId(tokenAddress); + const url = `https://dlmm-api.meteora.ag/pair/${poolId}/analytic/pair_trade_volume?num_of_days=7` + const response = await (await fetch(url)).json(); + let sumOfVolume = 0; + for (const day of response) { + sumOfVolume += day.trade_volume; + } + console.log(sumOfVolume); + return sumOfVolume; +} + +export async function getMonthVolume(tokenAddress:string){ + const poolId = await fetchDLMMPoolId(tokenAddress); + const url = `https://dlmm-api.meteora.ag/pair/${poolId}/analytic/pair_trade_volume?num_of_days=30` + const response = await (await fetch(url)).json(); + let sumOfVolume = 0; + for (const day of response) { + sumOfVolume += day.trade_volume; + } + console.log(sumOfVolume); + return sumOfVolume; +} + + +//getMonthVolume("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); \ No newline at end of file diff --git a/src/orca/Pool/fetch-pool.ts b/src/orca/Pool/fetch-pool.ts new file mode 100644 index 0000000..a53cb27 --- /dev/null +++ b/src/orca/Pool/fetch-pool.ts @@ -0,0 +1,31 @@ +import { PublicKey } from "@solana/web3.js"; +import { + ORCA_WHIRLPOOL_PROGRAM_ID, + PDAUtil, +} from "@orca-so/whirlpools-sdk"; +import { + MAINNET_WHIRLPOOLS_CONFIG, + WSOL, + tick_spacing, + client +} from "../constants"; + +export async function fetchWhirlPoolId(tokenAddress:string) { + const tokenMint = new PublicKey(tokenAddress); + const whirlpool_pubkey = PDAUtil.getWhirlpool( + ORCA_WHIRLPOOL_PROGRAM_ID, + MAINNET_WHIRLPOOLS_CONFIG, + WSOL.mint, + tokenMint, + tick_spacing + ).publicKey; + console.log("Pool Id: ", whirlpool_pubkey.toBase58()); + return whirlpool_pubkey.toBase58(); +} +export async function fetchWhirlPool(tokenAddress:string) { + const whirlPoolId = await fetchWhirlPoolId(tokenAddress); + const whirlpool = await client.getPool(new PublicKey(whirlPoolId)); + return whirlpool; +} + +//fetchWhirlPool("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); diff --git a/src/orca/Pool/index.ts b/src/orca/Pool/index.ts new file mode 100644 index 0000000..62ea691 --- /dev/null +++ b/src/orca/Pool/index.ts @@ -0,0 +1,2 @@ +export * from "./fetch-pool"; +export * from "./swap"; \ No newline at end of file diff --git a/src/orca/Pool/swap.ts b/src/orca/Pool/swap.ts new file mode 100644 index 0000000..0f929ef --- /dev/null +++ b/src/orca/Pool/swap.ts @@ -0,0 +1,125 @@ +import { DecimalUtil, Percentage } from "@orca-so/common-sdk"; +import { swapQuoteByInputToken, IGNORE_CACHE } from "@orca-so/whirlpools-sdk"; +import { + MAINNET_WHIRLPOOLS_CONFIG, + WSOL, + USDC, + tick_spacing, + ourWallet, + client, + ctx, +} from "../constants"; +import Decimal from "decimal.js"; +import { connection, wallet, jito_fee } from "../../helpers/config"; +import { getSPLTokenBalance } from "../../helpers/check_balance"; +import { jito_executeAndConfirm } from "../../transactions"; +import { + TransactionMessage, + Transaction, + TransactionInstruction, + VersionedTransaction, + PublicKey, +} from "@solana/web3.js"; +import { fetchWhirlPool } from "./fetch-pool"; +/** + * Performs a swap operation in a Whirl pool. + * @param side The side of the swap operation, either "buy" or "sell". Default is "buy". + * @param tokenAddress The address of the token to be swapped. + * @param buyAmountInSOL The amount of SOL to be used for buying the token. Default is 0.1. + * @param sellPercentage The percentage of the token to be sold. Default is 100%. + * @returns A Promise that resolves to the transaction hash if the swap is successful, otherwise an error object. + */ +export async function swap( + side: string = "buy", + tokenAddress: string, + buyAmountInSOL: number = 0.1, + sellPercentage: number = 100 +) { + const tokenMint = new PublicKey(tokenAddress); + const whirlPool: any = await fetchWhirlPool(tokenAddress); + let amountIn: Decimal, + inToken: PublicKey, + outToken: PublicKey, + tokenDecimal: number, + quote: any; + if (side === "buy") { + amountIn = new Decimal(buyAmountInSOL); + inToken = WSOL.mint; + outToken = tokenMint; + quote = await swapQuoteByInputToken( + whirlPool, + inToken, + DecimalUtil.toBN(amountIn, WSOL.decimals), + Percentage.fromFraction(10, 1000), // 10/1000 = 1% slippage + ctx.program.programId, + ctx.fetcher, + IGNORE_CACHE + ); + } else { + const balance = await getSPLTokenBalance( + connection, + tokenMint, + wallet.publicKey + ); + amountIn = new Decimal(balance * (sellPercentage / 100)); + inToken = tokenMint; + outToken = WSOL.mint; + if (whirlPool.tokenAInfo.mint.toBase58() === tokenMint.toBase58()) { + tokenDecimal = whirlPool.tokenAInfo.decimals; + } else { + tokenDecimal = whirlPool.tokenBInfo.decimals; + } + quote = await swapQuoteByInputToken( + whirlPool, + inToken, + DecimalUtil.toBN(amountIn, tokenDecimal), + Percentage.fromFraction(10, 1000), // 10/1000 = 1% slippage + ctx.program.programId, + ctx.fetcher, + IGNORE_CACHE + ); + } + // build the tx + const swapTx: any = await whirlPool.swap(quote); + let ixList = [], + signers = []; + // extract the instructions and signers + for (const ix of swapTx.instructions) { + ixList.push(...ix.instructions); + //ixList.push(...ix.cleanupInstructions); + signers.push(...ix.signers); + } + + // send the tx to jito + try { + const recentBlockhash = await connection.getLatestBlockhash(); + const messageV0 = new TransactionMessage({ + payerKey: wallet.publicKey, + recentBlockhash: recentBlockhash.blockhash, + instructions: [...ixList], + }).compileToV0Message(); + + const transaction = new VersionedTransaction(messageV0); + transaction.sign([wallet, ...signers]); + const res = await jito_executeAndConfirm( + transaction, + wallet, + recentBlockhash, + jito_fee + ); + const signature = res.signature; + const confirmed = res.confirmed; + + if (confirmed) { + console.log(`πŸš€ https://solscan.io/tx/${signature}`); + } else { + console.log( + "jito fee transaction failed when swapping token in a orca whirl pool" + ); + } + } catch (error: any) { + console.log("πŸš€ ~ error: ", JSON.parse(JSON.stringify(error))); + } +} +//swap("buy", "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr", 0.01, -1); // buy 0.01 SOL worth of the token +//swap("sell", "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr", -1, 50); // sell 50% of the token diff --git a/src/orca/README.md b/src/orca/README.md new file mode 100644 index 0000000..d2edcdb --- /dev/null +++ b/src/orca/README.md @@ -0,0 +1,59 @@ +# Orca DEX Usage Examples + +### Buy token through cli +` +ts-node src/orca/buy.ts --token --sol +` + +### Sell token through cli +` +ts-node src/orca/sell.ts --token --percentage +` +### buy/sell token on Orca +```typescript +import {buy, sell} from "../orca"; +import {wallet} from "../helpers/config"; +async function main() { + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const sol = 1; // buy 1 SOL worth of token using WSOL + const sellPercentage = 50; // sell 50% of the token + await buy(tokenAddress, sol) // buy 1 SOL worth of token + await sell(tokenAddress, sellPercentage); // sell 50% of the token +} +``` + +### Fetch the price from Orca whirpool +```typescript +import {getCurrentPriceInUSD, getCurrentPriceInSOL} from "../orca"; + +const currentPopcatPriceInSOL = await getCurrentPriceInSOL("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); +const currentPopcatPriceInUSD = await getCurrentPriceInUSD("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); + +console.log(currentPopcatPriceInSOL); +console.log(currentPopcatPriceInUSD); +``` + +### Fetch the pool address for the target token +```typescript +import {fetchWhirlPoolId} from "../orca"; + +async function main(){ + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const poolId = await fetchWhirlPoolId(tokenAddress); // output Address: POPCAT/WSOL or WSOL/ + console.log(poolId); +} +``` + +### Fetch the metrics of the pool +```typescript +import {getCurrentMarketCap, getCurrentSolInPool} from "../orca"; + +async function main(){ + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const currentMarketCap = await getCurrentMarketCap(tokenAddress); // to get the current market cap of the token + const currentSolInPool = await getCurrentSolInPool(tokenAddress); // to get the current number of SOL in the pool + +} +``` + + diff --git a/src/orca/buy.ts b/src/orca/buy.ts new file mode 100644 index 0000000..e6663f4 --- /dev/null +++ b/src/orca/buy.ts @@ -0,0 +1,38 @@ +import { logger } from "../helpers/logger"; +import {swap} from "./Pool" +import { program } from "commander"; + +let token:string="", + sol:number=0; +program + .option("--token ", "Specify the token address") + .option("--sol ", "Specify the number of SOL") + .option("-h, --help", "display help for command") + .action((options) => { + if (options.help) { + logger.info( + "ts-node buy --token --sol " + ); + process.exit(0); + } + if (!options.token || !options.sol) { + console.error("❌ Missing required options"); + process.exit(1); + } + token = options.token; + sol = options.sol; + }); +program.parse(); + +/** + * Buy function to perform a swap on the Meteora DEX. + * + * @param {string} side - The side of the trade (buy/sell). + * @param {string} token_address - The address of the token to trade. + * @param {number} no_of_sol - The amount of SOL to trade. + * @returns {Promise} - A promise that resolves when the swap is completed. + */ +async function buy(side:string, token_address:string, no_of_sol:number) { + await swap(side, token_address, no_of_sol, -1); +} +buy("buy", token, sol); diff --git a/src/orca/buy_helper.ts b/src/orca/buy_helper.ts new file mode 100644 index 0000000..7600568 --- /dev/null +++ b/src/orca/buy_helper.ts @@ -0,0 +1,11 @@ +import {swap} from "./Pool"; + +/** + * Buys a specified amount of tokens using SOL. + * + * @param token_address The address of the token to buy. + * @param buyAmountInSOL The amount of SOL to use for the purchase. + */ +export async function buy(token_address:string, buyAmountInSOL:number) { + await swap("buy", token_address, buyAmountInSOL, -1); +} \ No newline at end of file diff --git a/src/orca/constants.ts b/src/orca/constants.ts new file mode 100644 index 0000000..3aed848 --- /dev/null +++ b/src/orca/constants.ts @@ -0,0 +1,31 @@ +import { PublicKey } from "@solana/web3.js"; +import { AnchorProvider, Wallet } from "@coral-xyz/anchor"; +import { connection, wallet } from "../helpers/config"; +import { + WhirlpoolContext, + buildWhirlpoolClient, + ORCA_WHIRLPOOL_PROGRAM_ID, +} from "@orca-so/whirlpools-sdk"; +export const ourWallet = new Wallet(wallet); +export const provider = new AnchorProvider(connection, ourWallet, { + commitment: "confirmed", +}); +export const ctx = WhirlpoolContext.withProvider( + provider, + ORCA_WHIRLPOOL_PROGRAM_ID +); +export const client = buildWhirlpoolClient(ctx); +export const PROGRAM_ID = "whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"; +export const MAINNET_WHIRLPOOLS_CONFIG = new PublicKey( + "2LecshUwdy9xi7meFgHtFJQNSKk4KdTrcpvaB56dP2NQ" +); +export const DEVNET_WHIRLPOOLS_CONFIG = new PublicKey( + "FcrweFY1G9HJAHG5inkGB6pKg1HZ6x9UC2WioAfWrGkR" +); +export const wsol = "So11111111111111111111111111111111111111112"; +export const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; +export const usdt = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"; +export const USDC = { mint: new PublicKey(usdc), decimals: 6 }; +export const WSOL = { mint: new PublicKey(wsol), decimals: 9 }; +export const USDT = { mint: new PublicKey(usdt), decimals: 6 }; +export const tick_spacing = 256; diff --git a/src/orca/fetch-price.ts b/src/orca/fetch-price.ts new file mode 100644 index 0000000..25e814f --- /dev/null +++ b/src/orca/fetch-price.ts @@ -0,0 +1,24 @@ +import Decimal from "decimal.js"; +import { wsol, usdc } from "../raydium"; +import {fetchWhirlPool} from "./Pool" +import { PriceMath } from "@orca-so/whirlpools-sdk"; +// on-chain rpc method to get the current price of the token +export async function getCurrentPriceInSOL(tokenAddress:string):Promise { + const whirlPool:any = await fetchWhirlPool(tokenAddress); + const sqrt_price_x64 = whirlPool.getData().sqrtPrice; + const price = PriceMath.sqrtPriceX64ToPrice(sqrt_price_x64, whirlPool.tokenAInfo.decimals, whirlPool.tokenBInfo.decimals); + return new Decimal(1).div(price.toFixed(whirlPool.tokenBInfo.decimals)); +} +export async function getCurrentSolPrice():Promise { + const whirlPool:any = await fetchWhirlPool(usdc); + const sqrt_price_x64 = whirlPool.getData().sqrtPrice; + const price = PriceMath.sqrtPriceX64ToPrice(sqrt_price_x64, whirlPool.tokenAInfo.decimals, whirlPool.tokenBInfo.decimals); + return price; +} +export async function getCurrentPriceInUSD(tokenAddress:string):Promise { + return (await getCurrentPriceInSOL(tokenAddress))*(await getCurrentSolPrice()); +} + +//getCurrentPriceInSOL("DhFTtmQ1ymhWWabzViW1Ewf43iaqaVuriSsw5HF8pump"); +//getCurrentSolPrice(); +//getCurrentPriceInUSD("DhFTtmQ1ymhWWabzViW1Ewf43iaqaVuriSsw5HF8pump"); \ No newline at end of file diff --git a/src/orca/index.ts b/src/orca/index.ts new file mode 100644 index 0000000..fe46c0f --- /dev/null +++ b/src/orca/index.ts @@ -0,0 +1,3 @@ +export * from "./Pool"; +export * from "./sell_helper"; +export * from "./buy_helper"; \ No newline at end of file diff --git a/src/orca/sell.ts b/src/orca/sell.ts new file mode 100644 index 0000000..94de408 --- /dev/null +++ b/src/orca/sell.ts @@ -0,0 +1,38 @@ +import { logger } from "../helpers/logger"; +import {swap} from "./Pool" +import { program } from "commander"; + +let token:string="", + percentage:number=0; +program + .option("--token ", "Specify the token address") + .option("--percentage ", "Specify the sell percentage") + .option("-h, --help", "display help for command") + .action((options) => { + if (options.help) { + logger.info( + "ts-node sell --token --percentage " + ); + process.exit(0); + } + if (!options.token || !options.percentage) { + console.error("❌ Missing required options"); + process.exit(1); + } + token = options.token; + percentage = options.percentage; + }); +program.parse(); + +/** + * Sell function to perform a swap on the Meteora DEX. + * + * @param {string} side - The side of the trade (buy/sell). + * @param {string} token_address - The address of the token to trade. + * @param {number} sell_percentage - The sell percentage. + * @returns {Promise} - A promise that resolves when the swap is completed. + */ +async function sell(side:string, token_address:string, sell_percentage:number) { + await swap(side, token_address, -1, sell_percentage); +} +sell("sell", token, percentage); diff --git a/src/orca/sell_helper.ts b/src/orca/sell_helper.ts new file mode 100644 index 0000000..68ac72c --- /dev/null +++ b/src/orca/sell_helper.ts @@ -0,0 +1,11 @@ +import {swap} from "./Pool"; + +/** + * Sells a token with the specified token address and sell percentage. + * + * @param token_address The address of the token to be sold. + * @param sell_percentage The percentage of the token to be sold. + */ +export async function sell(token_address:string, sell_percentage:number) { + await swap("sell", token_address, -1, sell_percentage); +} \ No newline at end of file diff --git a/src/orca/token-filters/marketcap.ts b/src/orca/token-filters/marketcap.ts new file mode 100644 index 0000000..85ebadd --- /dev/null +++ b/src/orca/token-filters/marketcap.ts @@ -0,0 +1,14 @@ +import {fetchWhirlPool} from "../Pool"; +import {getCurrentPriceInUSD} from "../fetch-price"; +import { PublicKey } from "@solana/web3.js"; +import { connection } from "../../helpers/config"; +export async function getCurrentMarketCap(token_address:string):Promise { + const priceInUSD = await getCurrentPriceInUSD(token_address); + const tokenSupply: any = await connection.getTokenSupply( + new PublicKey(token_address) + ); + const marketCap: number = priceInUSD * tokenSupply.value.uiAmount; + return marketCap; +} + +//getCurrentMarketCap("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); \ No newline at end of file diff --git a/src/orca/token-filters/pool-sol.ts b/src/orca/token-filters/pool-sol.ts new file mode 100644 index 0000000..6b6811d --- /dev/null +++ b/src/orca/token-filters/pool-sol.ts @@ -0,0 +1,18 @@ +import {fetchWhirlPool} from "../Pool" +import { wsol } from "../constants"; + +export async function getCurrentSolInPool(token_address:string):Promise { + const whirlPool:any = await fetchWhirlPool(token_address); + let solReserve:number = 0; + console.log(whirlPool.tokenVaultAInfo) + if(whirlPool.tokenVaultAInfo.mint.toBase58() === wsol){ + solReserve = Number(whirlPool.tokenVaultAInfo.amount)/Math.pow(10,9); + }else{ + solReserve = Number(whirlPool.tokenVaultBInfo.amount)/Math.pow(10,9); + } + console.log(solReserve); + return solReserve; +} + + +// getCurrentSolInPool("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); \ No newline at end of file diff --git a/src/Trading_dev/memecoin_trading_strategies/stop-loss.js b/src/orca/token-filters/volume.ts similarity index 100% rename from src/Trading_dev/memecoin_trading_strategies/stop-loss.js rename to src/orca/token-filters/volume.ts diff --git a/src/Trading_dev/memecoin_trading_strategies/take-profit.js b/src/pumpfunsdk/README.md similarity index 100% rename from src/Trading_dev/memecoin_trading_strategies/take-profit.js rename to src/pumpfunsdk/README.md diff --git a/src/pumpfunsdk/pumpdotfun-sdk/.gitignore b/src/pumpfunsdk/pumpdotfun-sdk/.gitignore deleted file mode 100644 index b3e7071..0000000 --- a/src/pumpfunsdk/pumpdotfun-sdk/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.anchor -.DS_Store -target -**/*.rs.bk -node_modules -test-ledger -.yarn - -dist/ - -.keys*/ -.keys*/** - -.env -refs/ \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/.npmignore b/src/pumpfunsdk/pumpdotfun-sdk/.npmignore deleted file mode 100644 index 4949f09..0000000 --- a/src/pumpfunsdk/pumpdotfun-sdk/.npmignore +++ /dev/null @@ -1 +0,0 @@ -example/ \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/example/basic/999.jpg b/src/pumpfunsdk/pumpdotfun-sdk/example/basic/999.jpg deleted file mode 100644 index b7f4ea6..0000000 Binary files a/src/pumpfunsdk/pumpdotfun-sdk/example/basic/999.jpg and /dev/null differ diff --git a/src/pumpfunsdk/pumpdotfun-sdk/example/util.js b/src/pumpfunsdk/pumpdotfun-sdk/example/util.ts similarity index 60% rename from src/pumpfunsdk/pumpdotfun-sdk/example/util.js rename to src/pumpfunsdk/pumpdotfun-sdk/example/util.ts index f890825..1f19276 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/example/util.js +++ b/src/pumpfunsdk/pumpdotfun-sdk/example/util.ts @@ -1,20 +1,23 @@ -const { bs58 } =require ("@coral-xyz/anchor/dist/cjs/utils/bytes"); -const { getAssociatedTokenAddressSync } =require ("@solana/spl-token"); -const { +import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; +import { getAssociatedTokenAddressSync } from "@solana/spl-token"; +import { Keypair, PublicKey, Connection, LAMPORTS_PER_SOL, -} =require ("@solana/web3.js"); -const { sha256 } =require ("js-sha256"); +} from "@solana/web3.js"; +import { sha256 } from "js-sha256"; -const fs =require ("fs"); +import fs from "fs"; - function getOrCreateKeypair(dir, keyName) { +export function getOrCreateKeypair(dir: string, keyName: string): Keypair { if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); const authorityKey = dir + "/" + keyName + ".json"; if (fs.existsSync(authorityKey)) { - const data= JSON.parse(fs.readFileSync(authorityKey, "utf-8")); + const data: { + secretKey: string; + publicKey: string; + } = JSON.parse(fs.readFileSync(authorityKey, "utf-8")); return Keypair.fromSecretKey(bs58.decode(data.secretKey)); } else { const keypair = Keypair.generate(); @@ -30,7 +33,7 @@ const fs =require ("fs"); } } - function getKeypairByJsonPath(jsonPath) { +export function getKeypairByJsonPath(jsonPath:string) { try { const keypairJson = fs.readFileSync(jsonPath, "utf-8"); const data = JSON.parse(keypairJson); @@ -40,12 +43,11 @@ const fs =require ("fs"); console.log(e); } } - -async function printSOLBalance ( - connection, - pubKey, - info = "" -) { +export const printSOLBalance = async ( + connection: Connection, + pubKey: PublicKey, + info: string = "" +) => { const balance = await connection.getBalance(pubKey); console.log( `${info ? info + " " : ""}${pubKey.toBase58()}:`, @@ -54,12 +56,12 @@ async function printSOLBalance ( ); }; -async function getSPLBalance ( - connection, - mintAddress, - pubKey, - allowOffCurve = false -) { +export const getSPLBalance = async ( + connection: Connection, + mintAddress: PublicKey, + pubKey: PublicKey, + allowOffCurve: boolean = false +) => { try { let ata = getAssociatedTokenAddressSync(mintAddress, pubKey, allowOffCurve); const balance = await connection.getTokenAccountBalance(ata, "processed"); @@ -68,12 +70,12 @@ async function getSPLBalance ( return null; }; -async function printSPLBalance ( - connection, - mintAddress, - user, - info = "" -) { +export const printSPLBalance = async ( + connection: Connection, + mintAddress: PublicKey, + user: PublicKey, + info: string = "" +) => { const balance = await getSPLBalance(connection, mintAddress, user); if (balance === null) { console.log( @@ -85,26 +87,15 @@ async function printSPLBalance ( } }; - const baseToValue = (base, decimals) => { +export const baseToValue = (base: number, decimals: number): number => { return base * Math.pow(10, decimals); }; - const valueToBase = (value, decimal) => { +export const valueToBase = (value: number, decimals: number): number => { return value / Math.pow(10, decimals); }; //i.e. account:BondingCurve - function getDiscriminator(name) { +export function getDiscriminator(name: string) { return sha256.digest(name).slice(0, 8); -} - -module.exports = { - getOrCreateKeypair, - getKeypairByJsonPath, - printSOLBalance, - getSPLBalance, - printSPLBalance, - baseToValue, - valueToBase, - getDiscriminator, -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/images/999.jpg b/src/pumpfunsdk/pumpdotfun-sdk/images/999.jpg deleted file mode 100644 index b7f4ea6..0000000 Binary files a/src/pumpfunsdk/pumpdotfun-sdk/images/999.jpg and /dev/null differ diff --git a/src/pumpfunsdk/pumpdotfun-sdk/images/download.jpeg b/src/pumpfunsdk/pumpdotfun-sdk/images/download.jpeg deleted file mode 100644 index 516fbaf..0000000 Binary files a/src/pumpfunsdk/pumpdotfun-sdk/images/download.jpeg and /dev/null differ diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/index.js b/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/index.js deleted file mode 100644 index e368b5a..0000000 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/index.js +++ /dev/null @@ -1,4 +0,0 @@ -// pump-fun.json should be a valid JSON file -const IDL = require("./pump-fun.json"); -const { PumpFun } = require("./pump-fun"); -module.exports = { PumpFun, IDL }; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/index.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/index.ts new file mode 100644 index 0000000..fe37e18 --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/index.ts @@ -0,0 +1,3 @@ +// pump-fun.json should be a valid JSON file +export const IDL = require("./pump-fun.json"); +export * from "./pump-fun"; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/pump-fun.js b/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/pump-fun.js deleted file mode 100644 index b9537af..0000000 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/pump-fun.js +++ /dev/null @@ -1,865 +0,0 @@ -// export type PumpFun = { -// address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; -// metadata: { -// name: "pump"; -// version: "0.1.0"; -// spec: "0.1.0"; -// }; -// instructions: [ -// { -// name: "initialize"; -// discriminator: [175, 175, 109, 31, 13, 152, 155, 237]; -// docs: ["Creates the global state."]; -// accounts: [ -// { -// name: "global"; -// writable: true; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [103, 108, 111, 98, 97, 108]; -// } -// ]; -// }; -// }, -// { -// name: "user"; -// writable: true; -// signer: true; -// }, -// { -// name: "systemProgram"; -// address: "11111111111111111111111111111111"; -// } -// ]; -// args: []; -// }, -// { -// name: "setParams"; -// discriminator: [165, 31, 134, 53, 189, 180, 130, 255]; -// docs: ["Sets the global state parameters."]; -// accounts: [ -// { -// name: "global"; -// writable: true; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [103, 108, 111, 98, 97, 108]; -// } -// ]; -// }; -// }, -// { -// name: "user"; -// writable: true; -// signer: true; -// }, -// { -// name: "systemProgram"; -// address: "11111111111111111111111111111111"; -// }, -// { -// name: "eventAuthority"; -// address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; -// }, -// { -// name: "program"; -// address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; -// } -// ]; -// args: [ -// { -// name: "feeRecipient"; -// type: "pubkey"; -// }, -// { -// name: "initialVirtualTokenReserves"; -// type: "u64"; -// }, -// { -// name: "initialVirtualSolReserves"; -// type: "u64"; -// }, -// { -// name: "initialRealTokenReserves"; -// type: "u64"; -// }, -// { -// name: "tokenTotalSupply"; -// type: "u64"; -// }, -// { -// name: "feeBasisPoints"; -// type: "u64"; -// } -// ]; -// }, -// { -// name: "create"; -// discriminator: [24, 30, 200, 40, 5, 28, 7, 119]; -// docs: ["Creates a new coin and bonding curve."]; -// accounts: [ -// { -// name: "mint"; -// writable: true; -// signer: true; -// }, -// { -// name: "mint_authority"; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [ -// 109, -// 105, -// 110, -// 116, -// 45, -// 97, -// 117, -// 116, -// 104, -// 111, -// 114, -// 105, -// 116, -// 121 -// ]; -// } -// ]; -// }; -// }, -// { -// name: "bondingCurve"; -// writable: true; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [ -// 98, -// 111, -// 110, -// 100, -// 105, -// 110, -// 103, -// 45, -// 99, -// 117, -// 114, -// 118, -// 101 -// ]; -// }, -// { -// kind: "account"; -// path: "mint"; -// } -// ]; -// }; -// }, -// { -// name: "associatedBondingCurve"; -// writable: true; -// signer: false; -// }, -// { -// name: "global"; -// writable: false; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [103, 108, 111, 98, 97, 108]; -// } -// ]; -// }; -// }, -// { -// name: "mplTokenMetadata"; -// address: "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"; -// }, -// { -// name: "metadata"; -// writable: true; -// signer: false; -// }, -// { -// name: "user"; -// isMut: true; -// isSigner: true; -// }, -// { -// name: "systemProgram"; -// address: "11111111111111111111111111111111"; -// }, -// { -// name: "tokenProgram"; -// address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; -// }, -// { -// name: "associatedTokenProgram"; -// address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; -// }, -// { -// name: "rent"; -// address: "SysvarRent111111111111111111111111111111111"; -// }, -// { -// name: "eventAuthority"; -// address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; -// }, -// { -// name: "program"; -// address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; -// } -// ]; -// args: [ -// { -// name: "name"; -// type: "string"; -// }, -// { -// name: "symbol"; -// type: "string"; -// }, -// { -// name: "uri"; -// type: "string"; -// } -// ]; -// }, -// { -// name: "buy"; -// discriminator: [102, 6, 61, 18, 1, 218, 235, 234]; -// docs: ["Buys tokens from a bonding curve."]; -// accounts: [ -// { -// name: "global"; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [103, 108, 111, 98, 97, 108]; -// } -// ]; -// }; -// }, -// { -// name: "feeRecipient"; -// writable: true; -// signer: false; -// }, -// { -// name: "mint"; -// writable: false; -// signer: false; -// }, -// { -// name: "bondingCurve"; -// writable: true; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [ -// 98, -// 111, -// 110, -// 100, -// 105, -// 110, -// 103, -// 45, -// 99, -// 117, -// 114, -// 118, -// 101 -// ]; -// }, -// { -// kind: "account"; -// path: "mint"; -// } -// ]; -// }; -// }, -// { -// name: "associatedBondingCurve"; -// writable: true; -// signer: false; -// }, -// { -// name: "associatedUser"; -// writable: true; -// signer: false; -// }, -// { -// name: "user"; -// writable: true; -// signer: true; -// }, -// { -// name: "systemProgram"; -// address: "11111111111111111111111111111111"; -// }, -// { -// name: "tokenProgram"; -// address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; -// }, -// { -// name: "rent"; -// address: "SysvarRent111111111111111111111111111111111"; -// }, -// { -// name: "eventAuthority"; -// address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; -// }, -// { -// name: "program"; -// address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; -// } -// ]; -// args: [ -// { -// name: "amount"; -// type: "u64"; -// }, -// { -// name: "maxSolCost"; -// type: "u64"; -// } -// ]; -// }, -// { -// name: "sell"; -// discriminator: [51, 230, 133, 164, 1, 127, 131, 173]; -// docs: ["Sells tokens into a bonding curve."]; -// accounts: [ -// { -// name: "global"; -// writable: false; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [103, 108, 111, 98, 97, 108]; -// } -// ]; -// }; -// }, -// { -// name: "feeRecipient"; -// writable: true; -// signer: false; -// }, -// { -// name: "mint"; -// writable: false; -// signer: false; -// }, -// { -// name: "bondingCurve"; -// writable: true; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [ -// 98, -// 111, -// 110, -// 100, -// 105, -// 110, -// 103, -// 45, -// 99, -// 117, -// 114, -// 118, -// 101 -// ]; -// }, -// { -// kind: "account"; -// path: "mint"; -// } -// ]; -// }; -// }, -// { -// name: "associatedBondingCurve"; -// writable: true; -// signer: false; -// }, -// { -// name: "associatedUser"; -// writable: true; -// signer: false; -// }, -// { -// name: "user"; -// writable: true; -// signer: true; -// }, -// { -// name: "systemProgram"; -// address: "11111111111111111111111111111111"; -// }, -// { -// name: "associatedTokenProgram"; -// address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; -// }, -// { -// name: "tokenProgram"; -// address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; -// }, -// { -// name: "eventAuthority"; -// address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; -// }, -// { -// name: "program"; -// address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; -// } -// ]; -// args: [ -// { -// name: "amount"; -// type: "u64"; -// }, -// { -// name: "minSolOutput"; -// type: "u64"; -// } -// ]; -// }, -// { -// name: "withdraw"; -// discriminator: [183, 18, 70, 156, 148, 109, 161, 34]; -// docs: [ -// "Allows the admin to withdraw liquidity for a migration once the bonding curve completes" -// ]; -// accounts: [ -// { -// name: "global"; -// writable: false; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [103, 108, 111, 98, 97, 108]; -// } -// ]; -// }; -// }, -// { -// name: "lastWithdraw"; -// writable: true; -// signer: false; -// }, -// { -// name: "mint"; -// writable: false; -// signer: false; -// }, -// { -// name: "bondingCurve"; -// writable: true; -// pda: { -// seeds: [ -// { -// kind: "const"; -// value: [ -// 98, -// 111, -// 110, -// 100, -// 105, -// 110, -// 103, -// 45, -// 99, -// 117, -// 114, -// 118, -// 101 -// ]; -// }, -// { -// kind: "account"; -// path: "mint"; -// } -// ]; -// }; -// }, -// { -// name: "associatedBondingCurve"; -// writable: true; -// signer: false; -// }, -// { -// name: "associatedUser"; -// writable: true; -// signer: false; -// }, -// { -// name: "user"; -// writable: true; -// signer: true; -// }, -// { -// name: "system_program"; -// address: "11111111111111111111111111111111"; -// }, -// { -// name: "tokenProgram"; -// address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; -// }, -// { -// name: "rent"; -// address: "SysvarRent111111111111111111111111111111111"; -// }, -// { -// name: "eventAuthority"; -// address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; -// }, -// { -// name: "program"; -// address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; -// } -// ]; -// args: []; -// } -// ]; -// accounts: [ -// { -// name: "bondingCurve"; -// discriminator: [23, 183, 248, 55, 96, 216, 172, 96]; -// }, -// { -// name: "global"; -// discriminator: [167, 232, 232, 177, 200, 108, 114, 127]; -// } -// ]; -// events: [ -// { -// name: "createEvent"; -// discriminator: [27, 114, 169, 77, 222, 235, 99, 118]; -// }, -// { -// name: "tradeEvent"; -// discriminator: [189, 219, 127, 211, 78, 230, 97, 238]; -// }, -// { -// name: "completeEvent"; -// discriminator: [95, 114, 97, 156, 212, 46, 152, 8]; -// }, -// { -// name: "setParamsEvent"; -// discriminator: [223, 195, 159, 246, 62, 48, 143, 131]; -// } -// ]; -// types: [ -// { -// name: "global"; -// type: { -// kind: "struct"; -// fields: [ -// { -// name: "initialized"; -// type: "bool"; -// }, -// { -// name: "authority"; -// type: "pubkey"; -// }, -// { -// name: "feeRecipient"; -// type: "pubkey"; -// }, -// { -// name: "initialVirtualTokenReserves"; -// type: "u64"; -// }, -// { -// name: "initialVirtualSolReserves"; -// type: "u64"; -// }, -// { -// name: "initialRealTokenReserves"; -// type: "u64"; -// }, -// { -// name: "tokenTotalSupply"; -// type: "u64"; -// }, -// { -// name: "feeBasisPoints"; -// type: "u64"; -// } -// ]; -// }; -// }, -// { -// name: "lastWithdraw"; -// type: { -// kind: "struct"; -// fields: [ -// { -// name: "lastWithdrawTimestamp"; -// type: "i64"; -// } -// ]; -// }; -// }, -// { -// name: "bondingCurve"; -// type: { -// kind: "struct"; -// fields: [ -// { -// name: "virtualTokenReserves"; -// type: "u64"; -// }, -// { -// name: "virtualSolReserves"; -// type: "u64"; -// }, -// { -// name: "realTokenReserves"; -// type: "u64"; -// }, -// { -// name: "realSolReserves"; -// type: "u64"; -// }, -// { -// name: "tokenTotalSupply"; -// type: "u64"; -// }, -// { -// name: "complete"; -// type: "bool"; -// } -// ]; -// }; -// }, -// { -// name: "createEvent"; -// type: { -// kind: "struct"; -// fields: [ -// { -// name: "name"; -// type: "string"; -// index: false; -// }, -// { -// name: "symbol"; -// type: "string"; -// index: false; -// }, -// { -// name: "uri"; -// type: "string"; -// index: false; -// }, -// { -// name: "mint"; -// type: "pubkey"; -// index: false; -// }, -// { -// name: "bondingCurve"; -// type: "pubkey"; -// index: false; -// }, -// { -// name: "user"; -// type: "pubkey"; -// index: false; -// } -// ]; -// }; -// }, -// { -// name: "tradeEvent"; -// type: { -// kind: "struct"; -// fields: [ -// { -// name: "mint"; -// type: "pubkey"; -// index: false; -// }, -// { -// name: "solAmount"; -// type: "u64"; -// index: false; -// }, -// { -// name: "tokenAmount"; -// type: "u64"; -// index: false; -// }, -// { -// name: "isBuy"; -// type: "bool"; -// index: false; -// }, -// { -// name: "user"; -// type: "pubkey"; -// index: false; -// }, -// { -// name: "timestamp"; -// type: "i64"; -// index: false; -// }, -// { -// name: "virtualSolReserves"; -// type: "u64"; -// index: false; -// }, -// { -// name: "virtualTokenReserves"; -// type: "u64"; -// index: false; -// }, -// { -// name: "realSolReserves"; -// type: "u64"; -// index: false; -// }, -// { -// name: "realTokenReserves"; -// type: "u64"; -// index: false; -// } -// ]; -// }; -// }, -// { -// name: "completeEvent"; -// type: { -// kind: "struct"; -// fields: [ -// { -// name: "user"; -// type: "pubkey"; -// index: false; -// }, -// { -// name: "mint"; -// type: "pubkey"; -// index: false; -// }, -// { -// name: "bondingCurve"; -// type: "pubkey"; -// index: false; -// }, -// { -// name: "timestamp"; -// type: "i64"; -// index: false; -// } -// ]; -// }; -// }, -// { -// name: "setParamsEvent"; -// type: { -// kind: "struct"; -// fields: [ -// { -// name: "feeRecipient"; -// type: "pubkey"; -// index: false; -// }, -// { -// name: "initialVirtualTokenReserves"; -// type: "u64"; -// index: false; -// }, -// { -// name: "initialVirtualSolReserves"; -// type: "u64"; -// index: false; -// }, -// { -// name: "initialRealTokenReserves"; -// type: "u64"; -// index: false; -// }, -// { -// name: "tokenTotalSupply"; -// type: "u64"; -// index: false; -// }, -// { -// name: "feeBasisPoints"; -// type: "u64"; -// index: false; -// } -// ]; -// }; -// } -// ]; -// errors: [ -// { -// code: 6000; -// name: "NotAuthorized"; -// msg: "The given account is not authorized to execute this instruction."; -// }, -// { -// code: 6001; -// name: "AlreadyInitialized"; -// msg: "The program is already initialized."; -// }, -// { -// code: 6002; -// name: "TooMuchSolRequired"; -// msg: "slippage: Too much SOL required to buy the given amount of tokens."; -// }, -// { -// code: 6003; -// name: "TooLittleSolReceived"; -// msg: "slippage: Too little SOL received to sell the given amount of tokens."; -// }, -// { -// code: 6004; -// name: "MintDoesNotMatchBondingCurve"; -// msg: "The mint does not match the bonding curve."; -// }, -// { -// code: 6005; -// name: "BondingCurveComplete"; -// msg: "The bonding curve has completed and liquidity migrated to raydium."; -// }, -// { -// code: 6006; -// name: "BondingCurveNotComplete"; -// msg: "The bonding curve has not completed."; -// }, -// { -// code: 6007; -// name: "NotInitialized"; -// msg: "The program is not initialized."; -// }, -// { -// code: 6008; -// name: "WithdrawTooFrequent"; -// msg: "Withdraw too frequent"; -// } -// ]; -// }; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/pump-fun.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/pump-fun.ts new file mode 100644 index 0000000..99cc93e --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/IDL/pump-fun.ts @@ -0,0 +1,865 @@ +export type PumpFun = { + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + metadata: { + name: "pump"; + version: "0.1.0"; + spec: "0.1.0"; + }; + instructions: [ + { + name: "initialize"; + discriminator: [175, 175, 109, 31, 13, 152, 155, 237]; + docs: ["Creates the global state."]; + accounts: [ + { + name: "global"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + } + ]; + args: []; + }, + { + name: "setParams"; + discriminator: [165, 31, 134, 53, 189, 180, 130, 255]; + docs: ["Sets the global state parameters."]; + accounts: [ + { + name: "global"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: [ + { + name: "feeRecipient"; + type: "pubkey"; + }, + { + name: "initialVirtualTokenReserves"; + type: "u64"; + }, + { + name: "initialVirtualSolReserves"; + type: "u64"; + }, + { + name: "initialRealTokenReserves"; + type: "u64"; + }, + { + name: "tokenTotalSupply"; + type: "u64"; + }, + { + name: "feeBasisPoints"; + type: "u64"; + } + ]; + }, + { + name: "create"; + discriminator: [24, 30, 200, 40, 5, 28, 7, 119]; + docs: ["Creates a new coin and bonding curve."]; + accounts: [ + { + name: "mint"; + writable: true; + signer: true; + }, + { + name: "mint_authority"; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 109, + 105, + 110, + 116, + 45, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ]; + } + ]; + }; + }, + { + name: "bondingCurve"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ]; + }, + { + kind: "account"; + path: "mint"; + } + ]; + }; + }, + { + name: "associatedBondingCurve"; + writable: true; + signer: false; + }, + { + name: "global"; + writable: false; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "mplTokenMetadata"; + address: "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"; + }, + { + name: "metadata"; + writable: true; + signer: false; + }, + { + name: "user"; + isMut: true; + isSigner: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "associatedTokenProgram"; + address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; + }, + { + name: "rent"; + address: "SysvarRent111111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: [ + { + name: "name"; + type: "string"; + }, + { + name: "symbol"; + type: "string"; + }, + { + name: "uri"; + type: "string"; + } + ]; + }, + { + name: "buy"; + discriminator: [102, 6, 61, 18, 1, 218, 235, 234]; + docs: ["Buys tokens from a bonding curve."]; + accounts: [ + { + name: "global"; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "feeRecipient"; + writable: true; + signer: false; + }, + { + name: "mint"; + writable: false; + signer: false; + }, + { + name: "bondingCurve"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ]; + }, + { + kind: "account"; + path: "mint"; + } + ]; + }; + }, + { + name: "associatedBondingCurve"; + writable: true; + signer: false; + }, + { + name: "associatedUser"; + writable: true; + signer: false; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "rent"; + address: "SysvarRent111111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: [ + { + name: "amount"; + type: "u64"; + }, + { + name: "maxSolCost"; + type: "u64"; + } + ]; + }, + { + name: "sell"; + discriminator: [51, 230, 133, 164, 1, 127, 131, 173]; + docs: ["Sells tokens into a bonding curve."]; + accounts: [ + { + name: "global"; + writable: false; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "feeRecipient"; + writable: true; + signer: false; + }, + { + name: "mint"; + writable: false; + signer: false; + }, + { + name: "bondingCurve"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ]; + }, + { + kind: "account"; + path: "mint"; + } + ]; + }; + }, + { + name: "associatedBondingCurve"; + writable: true; + signer: false; + }, + { + name: "associatedUser"; + writable: true; + signer: false; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "systemProgram"; + address: "11111111111111111111111111111111"; + }, + { + name: "associatedTokenProgram"; + address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: [ + { + name: "amount"; + type: "u64"; + }, + { + name: "minSolOutput"; + type: "u64"; + } + ]; + }, + { + name: "withdraw"; + discriminator: [183, 18, 70, 156, 148, 109, 161, 34]; + docs: [ + "Allows the admin to withdraw liquidity for a migration once the bonding curve completes" + ]; + accounts: [ + { + name: "global"; + writable: false; + pda: { + seeds: [ + { + kind: "const"; + value: [103, 108, 111, 98, 97, 108]; + } + ]; + }; + }, + { + name: "lastWithdraw"; + writable: true; + signer: false; + }, + { + name: "mint"; + writable: false; + signer: false; + }, + { + name: "bondingCurve"; + writable: true; + pda: { + seeds: [ + { + kind: "const"; + value: [ + 98, + 111, + 110, + 100, + 105, + 110, + 103, + 45, + 99, + 117, + 114, + 118, + 101 + ]; + }, + { + kind: "account"; + path: "mint"; + } + ]; + }; + }, + { + name: "associatedBondingCurve"; + writable: true; + signer: false; + }, + { + name: "associatedUser"; + writable: true; + signer: false; + }, + { + name: "user"; + writable: true; + signer: true; + }, + { + name: "system_program"; + address: "11111111111111111111111111111111"; + }, + { + name: "tokenProgram"; + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"; + }, + { + name: "rent"; + address: "SysvarRent111111111111111111111111111111111"; + }, + { + name: "eventAuthority"; + address: "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"; + }, + { + name: "program"; + address: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; + } + ]; + args: []; + } + ]; + accounts: [ + { + name: "bondingCurve"; + discriminator: [23, 183, 248, 55, 96, 216, 172, 96]; + }, + { + name: "global"; + discriminator: [167, 232, 232, 177, 200, 108, 114, 127]; + } + ]; + events: [ + { + name: "createEvent"; + discriminator: [27, 114, 169, 77, 222, 235, 99, 118]; + }, + { + name: "tradeEvent"; + discriminator: [189, 219, 127, 211, 78, 230, 97, 238]; + }, + { + name: "completeEvent"; + discriminator: [95, 114, 97, 156, 212, 46, 152, 8]; + }, + { + name: "setParamsEvent"; + discriminator: [223, 195, 159, 246, 62, 48, 143, 131]; + } + ]; + types: [ + { + name: "global"; + type: { + kind: "struct"; + fields: [ + { + name: "initialized"; + type: "bool"; + }, + { + name: "authority"; + type: "pubkey"; + }, + { + name: "feeRecipient"; + type: "pubkey"; + }, + { + name: "initialVirtualTokenReserves"; + type: "u64"; + }, + { + name: "initialVirtualSolReserves"; + type: "u64"; + }, + { + name: "initialRealTokenReserves"; + type: "u64"; + }, + { + name: "tokenTotalSupply"; + type: "u64"; + }, + { + name: "feeBasisPoints"; + type: "u64"; + } + ]; + }; + }, + { + name: "lastWithdraw"; + type: { + kind: "struct"; + fields: [ + { + name: "lastWithdrawTimestamp"; + type: "i64"; + } + ]; + }; + }, + { + name: "bondingCurve"; + type: { + kind: "struct"; + fields: [ + { + name: "virtualTokenReserves"; + type: "u64"; + }, + { + name: "virtualSolReserves"; + type: "u64"; + }, + { + name: "realTokenReserves"; + type: "u64"; + }, + { + name: "realSolReserves"; + type: "u64"; + }, + { + name: "tokenTotalSupply"; + type: "u64"; + }, + { + name: "complete"; + type: "bool"; + } + ]; + }; + }, + { + name: "createEvent"; + type: { + kind: "struct"; + fields: [ + { + name: "name"; + type: "string"; + index: false; + }, + { + name: "symbol"; + type: "string"; + index: false; + }, + { + name: "uri"; + type: "string"; + index: false; + }, + { + name: "mint"; + type: "pubkey"; + index: false; + }, + { + name: "bondingCurve"; + type: "pubkey"; + index: false; + }, + { + name: "user"; + type: "pubkey"; + index: false; + } + ]; + }; + }, + { + name: "tradeEvent"; + type: { + kind: "struct"; + fields: [ + { + name: "mint"; + type: "pubkey"; + index: false; + }, + { + name: "solAmount"; + type: "u64"; + index: false; + }, + { + name: "tokenAmount"; + type: "u64"; + index: false; + }, + { + name: "isBuy"; + type: "bool"; + index: false; + }, + { + name: "user"; + type: "pubkey"; + index: false; + }, + { + name: "timestamp"; + type: "i64"; + index: false; + }, + { + name: "virtualSolReserves"; + type: "u64"; + index: false; + }, + { + name: "virtualTokenReserves"; + type: "u64"; + index: false; + }, + { + name: "realSolReserves"; + type: "u64"; + index: false; + }, + { + name: "realTokenReserves"; + type: "u64"; + index: false; + } + ]; + }; + }, + { + name: "completeEvent"; + type: { + kind: "struct"; + fields: [ + { + name: "user"; + type: "pubkey"; + index: false; + }, + { + name: "mint"; + type: "pubkey"; + index: false; + }, + { + name: "bondingCurve"; + type: "pubkey"; + index: false; + }, + { + name: "timestamp"; + type: "i64"; + index: false; + } + ]; + }; + }, + { + name: "setParamsEvent"; + type: { + kind: "struct"; + fields: [ + { + name: "feeRecipient"; + type: "pubkey"; + index: false; + }, + { + name: "initialVirtualTokenReserves"; + type: "u64"; + index: false; + }, + { + name: "initialVirtualSolReserves"; + type: "u64"; + index: false; + }, + { + name: "initialRealTokenReserves"; + type: "u64"; + index: false; + }, + { + name: "tokenTotalSupply"; + type: "u64"; + index: false; + }, + { + name: "feeBasisPoints"; + type: "u64"; + index: false; + } + ]; + }; + } + ]; + errors: [ + { + code: 6000; + name: "NotAuthorized"; + msg: "The given account is not authorized to execute this instruction."; + }, + { + code: 6001; + name: "AlreadyInitialized"; + msg: "The program is already initialized."; + }, + { + code: 6002; + name: "TooMuchSolRequired"; + msg: "slippage: Too much SOL required to buy the given amount of tokens."; + }, + { + code: 6003; + name: "TooLittleSolReceived"; + msg: "slippage: Too little SOL received to sell the given amount of tokens."; + }, + { + code: 6004; + name: "MintDoesNotMatchBondingCurve"; + msg: "The mint does not match the bonding curve."; + }, + { + code: 6005; + name: "BondingCurveComplete"; + msg: "The bonding curve has completed and liquidity migrated to raydium."; + }, + { + code: 6006; + name: "BondingCurveNotComplete"; + msg: "The bonding curve has not completed."; + }, + { + code: 6007; + name: "NotInitialized"; + msg: "The program is not initialized."; + }, + { + code: 6008; + name: "WithdrawTooFrequent"; + msg: "Withdraw too frequent"; + } + ]; +}; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/amm.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/amm.ts new file mode 100644 index 0000000..f48889a --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/amm.ts @@ -0,0 +1,88 @@ +import { BondingCurveAccount } from "./bondingCurveAccount"; +import { GlobalAccount } from "./globalAccount"; + +export type BuyResult = { + token_amount: bigint; + sol_amount: bigint; +}; + +export type SellResult = { + token_amount: bigint; + sol_amount: bigint; +}; + +export class AMM { + constructor( + public virtualSolReserves: bigint, + public virtualTokenReserves: bigint, + public realSolReserves: bigint, + public realTokenReserves: bigint, + public initialVirtualTokenReserves: bigint + ) {} + + static fromGlobalAccount(global: GlobalAccount): AMM { + return new AMM( + global.initialVirtualSolReserves, + global.initialVirtualTokenReserves, + 0n, + global.initialRealTokenReserves, + global.initialVirtualTokenReserves + ); + } + + static fromBondingCurveAccount(bonding_curve: BondingCurveAccount, initialVirtualTokenReserves: bigint): AMM { + return new AMM( + bonding_curve.virtualSolReserves, + bonding_curve.virtualTokenReserves, + bonding_curve.realSolReserves, + bonding_curve.realTokenReserves, + initialVirtualTokenReserves + ); + } + + getBuyPrice(tokens: bigint): bigint { + const product_of_reserves = this.virtualSolReserves * this.virtualTokenReserves; + const new_virtual_token_reserves = this.virtualTokenReserves - tokens; + const new_virtual_sol_reserves = product_of_reserves / new_virtual_token_reserves + 1n; + const amount_needed = new_virtual_sol_reserves > this.virtualSolReserves ? new_virtual_sol_reserves - this.virtualSolReserves : 0n; + return amount_needed > 0n ? amount_needed : 0n; + } + + applyBuy(token_amount: bigint): BuyResult { + const final_token_amount = token_amount > this.realTokenReserves ? this.realTokenReserves : token_amount; + const sol_amount = this.getBuyPrice(final_token_amount); + + this.virtualTokenReserves = this.virtualTokenReserves - final_token_amount; + this.realTokenReserves = this.realTokenReserves - final_token_amount; + + this.virtualSolReserves = this.virtualSolReserves + sol_amount; + this.realSolReserves = this.realSolReserves + sol_amount; + + return { + token_amount: final_token_amount, + sol_amount: sol_amount + } + } + + applySell(token_amount: bigint): SellResult { + this.virtualTokenReserves = this.virtualTokenReserves + token_amount; + this.realTokenReserves = this.realTokenReserves + token_amount; + + const sell_price = this.getSellPrice(token_amount); + + this.virtualSolReserves = this.virtualSolReserves - sell_price; + this.realSolReserves = this.realSolReserves - sell_price; + + return { + token_amount: token_amount, + sol_amount: sell_price + } + } + + getSellPrice(tokens: bigint): bigint { + const scaling_factor = this.initialVirtualTokenReserves; + const token_sell_proportion = (tokens * scaling_factor) / this.virtualTokenReserves; + const sol_received = (this.virtualSolReserves * token_sell_proportion) / scaling_factor; + return sol_received < this.realSolReserves ? sol_received : this.realSolReserves; + } +} \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/bondingCurveAccount.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/bondingCurveAccount.ts new file mode 100644 index 0000000..c4d25fd --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/bondingCurveAccount.ts @@ -0,0 +1,134 @@ +import { struct, bool, u64, Layout } from "@coral-xyz/borsh"; + +export class BondingCurveAccount { + public discriminator: bigint; + public virtualTokenReserves: bigint; + public virtualSolReserves: bigint; + public realTokenReserves: bigint; + public realSolReserves: bigint; + public tokenTotalSupply: bigint; + public complete: boolean; + + constructor( + discriminator: bigint, + virtualTokenReserves: bigint, + virtualSolReserves: bigint, + realTokenReserves: bigint, + realSolReserves: bigint, + tokenTotalSupply: bigint, + complete: boolean + ) { + this.discriminator = discriminator; + this.virtualTokenReserves = virtualTokenReserves; + this.virtualSolReserves = virtualSolReserves; + this.realTokenReserves = realTokenReserves; + this.realSolReserves = realSolReserves; + this.tokenTotalSupply = tokenTotalSupply; + this.complete = complete; + } + + getBuyPrice(amount: bigint): bigint { + if (this.complete) { + throw new Error("Curve is complete"); + } + + if (amount <= 0n) { + return 0n; + } + + // Calculate the product of virtual reserves + let n = this.virtualSolReserves * this.virtualTokenReserves; + + // Calculate the new virtual sol reserves after the purchase + let i = this.virtualSolReserves + amount; + + // Calculate the new virtual token reserves after the purchase + let r = n / i + 1n; + + // Calculate the amount of tokens to be purchased + let s = this.virtualTokenReserves - r; + + // Return the minimum of the calculated tokens and real token reserves + return s < this.realTokenReserves ? s : this.realTokenReserves; + } + + getSellPrice(amount: bigint, feeBasisPoints: bigint): bigint { + if (this.complete) { + throw new Error("Curve is complete"); + } + + if (amount <= 0n) { + return 0n; + } + + // Calculate the proportional amount of virtual sol reserves to be received + let n = + (amount * this.virtualSolReserves) / (this.virtualTokenReserves + amount); + + // Calculate the fee amount in the same units + let a = (n * feeBasisPoints) / 10000n; + + // Return the net amount after deducting the fee + return n - a; + } + + getMarketCapSOL(): bigint { + if (this.virtualTokenReserves === 0n) { + return 0n; + } + + return ( + (this.tokenTotalSupply * this.virtualSolReserves) / + this.virtualTokenReserves + ); + } + + getFinalMarketCapSOL(feeBasisPoints: bigint): bigint { + let totalSellValue = this.getBuyOutPrice( + this.realTokenReserves, + feeBasisPoints + ); + let totalVirtualValue = this.virtualSolReserves + totalSellValue; + let totalVirtualTokens = this.virtualTokenReserves - this.realTokenReserves; + + if (totalVirtualTokens === 0n) { + return 0n; + } + + return (this.tokenTotalSupply * totalVirtualValue) / totalVirtualTokens; + } + + getBuyOutPrice(amount: bigint, feeBasisPoints: bigint): bigint { + let solTokens = + amount < this.realSolReserves ? this.realSolReserves : amount; + let totalSellValue = + (solTokens * this.virtualSolReserves) / + (this.virtualTokenReserves - solTokens) + + 1n; + let fee = (totalSellValue * feeBasisPoints) / 10000n; + return totalSellValue + fee; + } + + public static fromBuffer(buffer: Buffer): BondingCurveAccount { + const structure: Layout = struct([ + u64("discriminator"), + u64("virtualTokenReserves"), + u64("virtualSolReserves"), + u64("realTokenReserves"), + u64("realSolReserves"), + u64("tokenTotalSupply"), + bool("complete"), + ]); + + let value = structure.decode(buffer); + return new BondingCurveAccount( + BigInt(value.discriminator), + BigInt(value.virtualTokenReserves), + BigInt(value.virtualSolReserves), + BigInt(value.realTokenReserves), + BigInt(value.realSolReserves), + BigInt(value.tokenTotalSupply), + value.complete + ); + } +} \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/buy.js b/src/pumpfunsdk/pumpdotfun-sdk/src/buy.ts similarity index 64% rename from src/pumpfunsdk/pumpdotfun-sdk/src/buy.js rename to src/pumpfunsdk/pumpdotfun-sdk/src/buy.ts index b563eaf..b21c9d2 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/buy.js +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/buy.ts @@ -1,15 +1,16 @@ -const { PublicKey } = require("@solana/web3.js"); -const {buy} = require("./tools"); -const { program } = require("commander"); -let token_address = null, sol = null; +import { PublicKey } from "@solana/web3.js"; +import {buy} from "./tools"; +import { program } from "commander"; +import { logger } from "../../../helpers/logger"; +let token_address:any = null, sol = null; program .option("--token_address ", "Specify the token address") .option("--sol ", "Specify the number of SOL") .option("-h, --help", "display help for command") .action((options) => { if (options.help) { - console.log( - "node buy --token_address --sol " + logger.info( + "ts-node buy --token_address --sol " ); process.exit(0); } diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/createAndBuy.js b/src/pumpfunsdk/pumpdotfun-sdk/src/createAndBuy.ts similarity index 73% rename from src/pumpfunsdk/pumpdotfun-sdk/src/createAndBuy.js rename to src/pumpfunsdk/pumpdotfun-sdk/src/createAndBuy.ts index 2086fbd..ac7e797 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/createAndBuy.js +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/createAndBuy.ts @@ -1,9 +1,11 @@ -const {createAndBuy} = require("./tools"); +import {createAndBuy} from "./tools"; // command line tool -const {program} = require("commander"); -const fs = require("fs"); +import {program} from "commander"; +import fs from "fs"; +import { logger } from "../../../helpers/logger"; -let sol = null, mintKeypair = null, name = null, symbol = null, description = null, telegram = null, twitter = null, website = null, file = null; +let sol:any = null, mintKeypair:any = null, name:any = null, symbol:any = null, +description:any = null, telegram:any = null, twitter:any = null, website:any = null, file:any = null; program.option("--pathToMintKeypair ", "Specify the path to your own mint keypair") .option("--sol ", "Specify the number of SOL you want to buy") .option("--name ", "Specify the token name") @@ -16,8 +18,8 @@ program.option("--pathToMintKeypair ", "Specify the path t .option("-h, --help", "display help for command") .action((options) => { if (options.help) { - console.log( - "node createAndBuy --pathToMintKeypair --sol --name --symbol --description --telegram --twitter --website --file " + logger.info( + "ts-node createAndBuy --pathToMintKeypair --sol --name --symbol --description --telegram --twitter --website --file " ); process.exit(0); } diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/events.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/events.ts new file mode 100644 index 0000000..b2c34c3 --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/events.ts @@ -0,0 +1,53 @@ +import { PublicKey } from "@solana/web3.js"; +import { + CompleteEvent, + CreateEvent, + SetParamsEvent, + TradeEvent, +} from "./types"; + +export function toCreateEvent(event: CreateEvent): CreateEvent { + return { + name: event.name, + symbol: event.symbol, + uri: event.uri, + mint: new PublicKey(event.mint), + bondingCurve: new PublicKey(event.bondingCurve), + user: new PublicKey(event.user), + }; +} + +export function toCompleteEvent(event: CompleteEvent): CompleteEvent { + return { + user: new PublicKey(event.user), + mint: new PublicKey(event.mint), + bondingCurve: new PublicKey(event.bondingCurve), + timestamp: event.timestamp, + }; +} + +export function toTradeEvent(event: TradeEvent): TradeEvent { + return { + mint: new PublicKey(event.mint), + solAmount: BigInt(event.solAmount), + tokenAmount: BigInt(event.tokenAmount), + isBuy: event.isBuy, + user: new PublicKey(event.user), + timestamp: Number(event.timestamp), + virtualSolReserves: BigInt(event.virtualSolReserves), + virtualTokenReserves: BigInt(event.virtualTokenReserves), + realSolReserves: BigInt(event.realSolReserves), + realTokenReserves: BigInt(event.realTokenReserves), + }; +} + +export function toSetParamsEvent(event: SetParamsEvent): SetParamsEvent { + return { + feeRecipient: new PublicKey(event.feeRecipient), + initialVirtualTokenReserves: BigInt(event.initialVirtualTokenReserves), + initialVirtualSolReserves: BigInt(event.initialVirtualSolReserves), + initialRealTokenReserves: BigInt(event.initialRealTokenReserves), + tokenTotalSupply: BigInt(event.tokenTotalSupply), + feeBasisPoints: BigInt(event.feeBasisPoints), + }; +} \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/globalAccount.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/globalAccount.ts new file mode 100644 index 0000000..5335fe7 --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/globalAccount.ts @@ -0,0 +1,77 @@ +import { PublicKey } from "@solana/web3.js"; +import { struct, bool, u64, publicKey, Layout } from "@coral-xyz/borsh"; + +export class GlobalAccount { + public discriminator: bigint; + public initialized: boolean = false; + public authority: PublicKey; + public feeRecipient: PublicKey; + public initialVirtualTokenReserves: bigint; + public initialVirtualSolReserves: bigint; + public initialRealTokenReserves: bigint; + public tokenTotalSupply: bigint; + public feeBasisPoints: bigint; + + constructor( + discriminator: bigint, + initialized: boolean, + authority: PublicKey, + feeRecipient: PublicKey, + initialVirtualTokenReserves: bigint, + initialVirtualSolReserves: bigint, + initialRealTokenReserves: bigint, + tokenTotalSupply: bigint, + feeBasisPoints: bigint + ) { + this.discriminator = discriminator; + this.initialized = initialized; + this.authority = authority; + this.feeRecipient = feeRecipient; + this.initialVirtualTokenReserves = initialVirtualTokenReserves; + this.initialVirtualSolReserves = initialVirtualSolReserves; + this.initialRealTokenReserves = initialRealTokenReserves; + this.tokenTotalSupply = tokenTotalSupply; + this.feeBasisPoints = feeBasisPoints; + } + + getInitialBuyPrice(amount: bigint): bigint { + if (amount <= 0n) { + return 0n; + } + + let n = this.initialVirtualSolReserves * this.initialVirtualTokenReserves; + let i = this.initialVirtualSolReserves + amount; + let r = n / i + 1n; + let s = this.initialVirtualTokenReserves - r; + return s < this.initialRealTokenReserves + ? s + : this.initialRealTokenReserves; + } + + public static fromBuffer(buffer: Buffer): GlobalAccount { + const structure: Layout = struct([ + u64("discriminator"), + bool("initialized"), + publicKey("authority"), + publicKey("feeRecipient"), + u64("initialVirtualTokenReserves"), + u64("initialVirtualSolReserves"), + u64("initialRealTokenReserves"), + u64("tokenTotalSupply"), + u64("feeBasisPoints"), + ]); + + let value = structure.decode(buffer); + return new GlobalAccount( + BigInt(value.discriminator), + value.initialized, + value.authority, + value.feeRecipient, + BigInt(value.initialVirtualTokenReserves), + BigInt(value.initialVirtualSolReserves), + BigInt(value.initialRealTokenReserves), + BigInt(value.tokenTotalSupply), + BigInt(value.feeBasisPoints) + ); + } +} \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/index.js b/src/pumpfunsdk/pumpdotfun-sdk/src/index.js deleted file mode 100644 index bbab489..0000000 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/index.js +++ /dev/null @@ -1,8 +0,0 @@ -// export * from './pumpfun' -// export * from './util' -// export * from './types' -// export * from './events' -// export * from './globalAccount' -// export * from './bondingCurveAccount' -// export * from './amm' - diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/index.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/index.ts new file mode 100644 index 0000000..385e336 --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/index.ts @@ -0,0 +1,8 @@ +export * from './pumpfun' +export * from './util' +export * from './types' +export * from './events' +export * from './globalAccount' +export * from './bondingCurveAccount' +export * from './amm' + diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/pump-events-listener/listeners.js b/src/pumpfunsdk/pumpdotfun-sdk/src/pump-events-listener/listeners.ts similarity index 67% rename from src/pumpfunsdk/pumpdotfun-sdk/src/pump-events-listener/listeners.js rename to src/pumpfunsdk/pumpdotfun-sdk/src/pump-events-listener/listeners.ts index 0c14462..0f86629 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/pump-events-listener/listeners.js +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/pump-events-listener/listeners.ts @@ -1,30 +1,30 @@ -const {connection} = require("../../../../helpers/config"); -const { Keypair, Connection } = require("@solana/web3.js"); -const {PumpFunSDK} =require ("pumpdotfun-sdk"); -const { AnchorProvider } = require ("@coral-xyz/anchor"); +import {connection} from "../../../../helpers/config"; +import { Keypair, Connection } from "@solana/web3.js"; +import {PumpFunSDK} from "pumpdotfun-sdk"; +import { AnchorProvider } from "@coral-xyz/anchor"; -function getProvider(){ - const wallet = Keypair.generate(); +export function getProvider(){ + const wallet:any = Keypair.generate(); const provider = new AnchorProvider(connection, wallet, { commitment: "finalized", }); return provider; } -async function subscribeToCompleteBondingCurveEvent(sdk){ +export async function subscribeToCompleteBondingCurveEvent(sdk: PumpFunSDK){ const completeEventId = sdk.addEventListener("completeEvent", (event, slot, signature) => { console.log("completeEvent", event, slot, signature); }); console.log("Subscribed to completeEvent with ID:", completeEventId); } -async function subscribeToCreatePumpTokenEvent(sdk){ +export async function subscribeToCreatePumpTokenEvent(sdk: PumpFunSDK){ const createEventId = sdk.addEventListener("createEvent", (event, slot, signature) => { console.log("createEvent", event, slot, signature); console.log("mint pubkey", event.mint.toBase58()) }); console.log("Subscribed to createEvent with ID:", createEventId); } -async function subscribeToTradeEvent(sdk){ +export async function subscribeToTradeEvent(sdk: PumpFunSDK){ const tradeEventId = sdk.addEventListener("tradeEvent", (event, slot, signature) => { console.log("tradeEvent", event, slot, signature); }); @@ -42,5 +42,3 @@ async function main(){ } } main(); - -module.exports = {subscribeToCompleteBondingCurveEvent, subscribeToCreatePumpTokenEvent, subscribeToTradeEvent, getProvider}; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/pumpfun.js b/src/pumpfunsdk/pumpdotfun-sdk/src/pumpfun.ts similarity index 68% rename from src/pumpfunsdk/pumpdotfun-sdk/src/pumpfun.js rename to src/pumpfunsdk/pumpdotfun-sdk/src/pumpfun.ts index b4e7e07..47a80e9 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/pumpfun.js +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/pumpfun.ts @@ -1,121 +1,122 @@ -const { +import { Commitment, Connection, Finality, Keypair, PublicKey, Transaction, -} =require ("@solana/web3.js"); -const { Program, Provider } =require ("@coral-xyz/anchor"); -const { GlobalAccount } =require ("./globalAccount.js"); -const { +} from "@solana/web3.js"; +import { Program, Provider } from "@coral-xyz/anchor"; +import { GlobalAccount } from "./globalAccount"; +import { toCompleteEvent, toCreateEvent, toSetParamsEvent, toTradeEvent, -} =require ("./events.js"); -const { +} from "./events"; +import { createAssociatedTokenAccountInstruction, getAccount, getAssociatedTokenAddress, getOrCreateAssociatedTokenAccount, -} =require ("@solana/spl-token"); -const { BondingCurveAccount } =require ("./bondingCurveAccount.js"); -const { BN } =require ("bn.js"); -const { +} from "@solana/spl-token"; +import { BondingCurveAccount } from "./bondingCurveAccount"; +const {BN} = require("bn.js"); +import { DEFAULT_COMMITMENT, DEFAULT_FINALITY, calculateWithSlippageBuy, calculateWithSlippageSell, sendTx, sendTxToJito, -} =require ("./util.js"); -const { PumpFun, IDL } =require ("./IDL/index.js"); -const {wallet} = require("../../../helpers/config.js") -const PROGRAM_ID = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; -const MPL_TOKEN_METADATA_PROGRAM_ID = +} from "./util"; +import { PumpFun, IDL } from "./IDL/index"; +import { wallet } from "../../../helpers/config"; +export const PROGRAM_ID = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; +export const MPL_TOKEN_METADATA_PROGRAM_ID = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"; - const GLOBAL_ACCOUNT_SEED = "global"; - const MINT_AUTHORITY_SEED = "mint-authority"; - const BONDING_CURVE_SEED = "bonding-curve"; - const METADATA_SEED = "metadata"; +export const GLOBAL_ACCOUNT_SEED = "global"; +export const MINT_AUTHORITY_SEED = "mint-authority"; +export const BONDING_CURVE_SEED = "bonding-curve"; +export const METADATA_SEED = "metadata"; - const DEFAULT_DECIMALS = 6; +export const DEFAULT_DECIMALS = 6; - class PumpFunSDK { - - constructor(provider) { - this.program = new Program(IDL, provider); +export class PumpFunSDK { + public program: Program; + public connection: Connection; + constructor(provider?: Provider) { + this.program = new Program(IDL as PumpFun, provider); this.connection = this.program.provider.connection; } - async bundleBuys( creator, - mint, - createTokenMetadata, - buyAmountSol, - buyersWallets, + async bundleBuys( + creator: any, + mint: any, + createTokenMetadata: any, + buyAmountSol: any, + buyersWallets: any, slippageBasisPoints = 500n, - priorityFees, + priorityFees: any, commitment = DEFAULT_COMMITMENT, - finality = DEFAULT_FINALITY, - ){ - let tokenMetadata = await this.createTokenMetadata(createTokenMetadata); - let createTx = await this.getCreateInstructions( + finality = DEFAULT_FINALITY + ) { + let tokenMetadata = await this.createTokenMetadata(createTokenMetadata); + let createTx = await this.getCreateInstructions( + creator.publicKey, + createTokenMetadata.name, + createTokenMetadata.symbol, + tokenMetadata.metadataUri, + mint + ); + let final_tx = new Transaction().add(createTx); + const globalAccount = await this.getGlobalAccount(commitment); + const buyAmount = globalAccount.getInitialBuyPrice(buyAmountSol); + const buyAmountWithSlippage = calculateWithSlippageBuy( + buyAmountSol, + slippageBasisPoints + ); + final_tx.add( + await this.getBuyInstructions( creator.publicKey, - createTokenMetadata.name, - createTokenMetadata.symbol, - tokenMetadata.metadataUri, - mint - ); - let final_tx = new Transaction().add(createTx); - const globalAccount = await this.getGlobalAccount(commitment); - const buyAmount = globalAccount.getInitialBuyPrice(buyAmountSol); - const buyAmountWithSlippage = calculateWithSlippageBuy( - buyAmountSol, - slippageBasisPoints - ); - final_tx.add( - await this.getBuyInstructions( - creator.publicKey, - mint.publicKey, - globalAccount.feeRecipient, - buyAmount, - buyAmountWithSlippage - ) - ); + mint.publicKey, + globalAccount.feeRecipient, + buyAmount, + buyAmountWithSlippage + ) + ); - for(let i=0; i { @@ -501,36 +490,20 @@ const MPL_TOKEN_METADATA_PROGRAM_ID = switch (eventType) { case "createEvent": processedEvent = toCreateEvent(event); - callback( - processedEvent, - slot, - signature - ); + callback(processedEvent, slot, signature); break; case "tradeEvent": processedEvent = toTradeEvent(event); - callback( - processedEvent, - slot, - signature - ); + callback(processedEvent, slot, signature); break; case "completeEvent": processedEvent = toCompleteEvent(event); - callback( - processedEvent , - slot, - signature - ); + callback(processedEvent, slot, signature); console.log("completeEvent", event, slot, signature); break; case "setParamsEvent": - processedEvent = toSetParamsEvent(event ); - callback( - processedEvent, - slot, - signature - ); + processedEvent = toSetParamsEvent(event); + callback(processedEvent, slot, signature); break; default: console.error("Unhandled event type:", eventType); @@ -539,9 +512,8 @@ const MPL_TOKEN_METADATA_PROGRAM_ID = ); } - removeEventListener(eventId) { + removeEventListener(eventId:any) { this.program.removeEventListener(eventId); } } -module.exports = { PumpFunSDK, PROGRAM_ID, GLOBAL_ACCOUNT_SEED, MINT_AUTHORITY_SEED, BONDING_CURVE_SEED, METADATA_SEED, DEFAULT_DECIMALS }; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/sell.js b/src/pumpfunsdk/pumpdotfun-sdk/src/sell.ts similarity index 62% rename from src/pumpfunsdk/pumpdotfun-sdk/src/sell.js rename to src/pumpfunsdk/pumpdotfun-sdk/src/sell.ts index 5fbe1cc..8c0e468 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/sell.js +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/sell.ts @@ -1,15 +1,16 @@ -const {sell} = require('./tools'); -const { PublicKey } = require("@solana/web3.js"); -const { program } = require("commander"); -let token_address = null, sellPercentage = null; +import {sell} from './tools'; +import { PublicKey } from "@solana/web3.js"; +import { program } from "commander"; +import { logger } from '../../../helpers/logger'; +let token_address:any = null, sellPercentage:any = null; program .option("--token_address ", "Specify the token address") .option("--percentage ", "Specify the percentage of token to sell") .option("-h, --help", "display help for command") - .action((options) => { + .action((options:any) => { if (options.help) { - console.log( - "node sell --token_address --percentage " + logger.info( + "ts-node sell --token_address --percentage " ); process.exit(0); } diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/tools.js b/src/pumpfunsdk/pumpdotfun-sdk/src/tools.ts similarity index 79% rename from src/pumpfunsdk/pumpdotfun-sdk/src/tools.js rename to src/pumpfunsdk/pumpdotfun-sdk/src/tools.ts index dbb4e41..168b0f5 100644 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/tools.js +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/tools.ts @@ -1,44 +1,28 @@ -const { AnchorProvider } = require("@coral-xyz/anchor"); -const { PumpFunSDK, DEFAULT_DECIMALS } = require("./pumpfun.js"); -const { - sendTxToJito, - DEFAULT_COMMITMENT, - generateWalletsAndDropSOL, - solCollector, -} = require("./util.js"); -const { wallet, connection } = require("../../../helpers/config.js"); -const { +import { AnchorProvider } from "@coral-xyz/anchor"; +import { PumpFunSDK, DEFAULT_DECIMALS } from "./pumpfun"; +import { wallet, connection } from "../../../helpers/config"; +import { getOrCreateKeypair, getSPLBalance, printSOLBalance, printSPLBalance, - getKeypairByJsonPath, -} = require("../example/util.js"); -const fs = require("fs"); -const { promises } = require("dns"); -const { + getKeypairByJsonPath +} from "../example/util"; +import fs from "fs"; +import { promises } from "dns"; +import { Keypair, PublicKey, SystemProgram, Transaction, LAMPORTS_PER_SOL, -} = require("@solana/web3.js"); -const { bs58 } = require("@coral-xyz/anchor/dist/cjs/utils/bytes"); -const { - calculateWithSlippageBuy, - sendTx, - getOurWallet, - getOtherTradersWallet, - readCSVFile, - extractPrivateKeyAndSolana, -} = require("./util.js"); -const { - jito_executeAndConfirm, -} = require("./transactions/jito-tx-executor.js"); -const path = require("path"); -const { get } = require("http"); +} from "@solana/web3.js"; +import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; +import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet"; +import path from "path"; const SLIPPAGE_BASIS_POINTS = 100n; +const Wallet = new NodeWallet(wallet); /** * Creates and buys a token using the provided parameters. * @param {string} pathToMintKeypair - The path to the mint keypair JSON file. @@ -46,13 +30,14 @@ const SLIPPAGE_BASIS_POINTS = 100n; * @param {number} initialBuySolAmount - The initial amount of SOL to buy the token with. * @returns {Promise} - A promise that resolves when the token creation and purchase is complete. */ -async function createAndBuy(pathToMintKeypair, tokenMetadata, initialBuySolAmount) { - const provider = new AnchorProvider(connection, wallet, { +export async function createAndBuy(pathToMintKeypair:any, tokenMetadata:any, initialBuySolAmount:any) { + const Wallet = new NodeWallet(wallet); + const provider = new AnchorProvider(connection, Wallet, { commitment: "finalized", }); const sdk = new PumpFunSDK(provider); - const mintKeypair = getKeypairByJsonPath(pathToMintKeypair); + const mintKeypair:any = getKeypairByJsonPath(pathToMintKeypair); console.log(mintKeypair.publicKey); await printSOLBalance(connection, wallet.publicKey, "Master wallet keypair"); let globalAccount = await sdk.getGlobalAccount(); @@ -100,8 +85,8 @@ async function createAndBuy(pathToMintKeypair, tokenMetadata, initialBuySolAmoun * @param {number} sellPercentage - The percentage of tokens to sell. * @returns {Promise} - A promise that resolves when the sell operation is complete. */ -async function sell(mintPubKey, sellPercentage) { - const provider = new AnchorProvider(connection, wallet, { +export async function sell(mintPubKey:any, sellPercentage:any) { + const provider = new AnchorProvider(connection, Wallet, { commitment: "finalized", }); @@ -143,8 +128,8 @@ async function sell(mintPubKey, sellPercentage) { * @param {number} solPerOrder - The amount of SOL to spend per order. * @returns {Promise} - A promise that resolves when the buy operation is complete. */ -async function buy(mintPubKey, solPerOrder) { - const provider = new AnchorProvider(connection, wallet, { +export async function buy(mintPubKey:any, solPerOrder:any) { + const provider = new AnchorProvider(connection, Wallet, { commitment: "finalized", }); @@ -211,5 +196,3 @@ async function run() { } //run(); - -module.exports = {buy, sell, createAndBuy} \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/transactions/jito-tx-executor.js b/src/pumpfunsdk/pumpdotfun-sdk/src/transactions/jito-tx-executor.js deleted file mode 100644 index e8a762f..0000000 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/transactions/jito-tx-executor.js +++ /dev/null @@ -1,126 +0,0 @@ -const { - BlockhashWithExpiryBlockHeight, - Keypair, - PublicKey, - SystemProgram, - Connection, - TransactionMessage, - VersionedTransaction, - } = require("@solana/web3.js"); -const axios = require("axios"); -const bs58 = require("bs58"); -const { Currency, CurrencyAmount } = require("@raydium-io/raydium-sdk"); -const { connection } = require("../../../../helpers/config"); - const jito_Validators = [ - "DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh", - "ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt", - "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT", - "HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe", - "ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49", - "Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY", - "DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL", - "96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5", - ]; - const endpoints = [ // TODO: Choose a jito endpoint which is closest to your location, and uncomment others - //"https://mainnet.block-engine.jito.wtf/api/v1/bundles", - //"https://amsterdam.mainnet.block-engine.jito.wtf/api/v1/bundles", - //"https://frankfurt.mainnet.block-engine.jito.wtf/api/v1/bundles", - //"https://ny.mainnet.block-engine.jito.wtf/api/v1/bundles", - "https://tokyo.mainnet.block-engine.jito.wtf/api/v1/bundles", - ]; -async function getRandomValidator() { - const res = - jito_Validators[Math.floor(Math.random() * jito_Validators.length)]; - return new PublicKey(res); - } - /** - * Executes and confirms a Jito transaction. - * @param {Transaction} transaction - The transaction to be executed and confirmed. - * @param {Account} payer - The payer account for the transaction. - * @param {Blockhash} lastestBlockhash - The latest blockhash. - * @param {number} jitofee - The fee for the Jito transaction. - * @returns {Promise<{ confirmed: boolean, signature: string | null }>} - A promise that resolves to an object containing the confirmation status and the transaction signature. - */ -async function jito_executeAndConfirm( - transaction, - payer, - lastestBlockhash, - jitofee - ){ - const jito_validator_wallet = await getRandomValidator(); - console.log("Executing transaction (jito)..."); - console.log("Selected Jito Validator: ", jito_validator_wallet.toBase58()); - try { - const fee = new CurrencyAmount(Currency.SOL, jitofee, false).raw.toNumber(); - console.log(`Jito Fee: ${fee / 10 ** 9} sol`); - const jitoFee_message = new TransactionMessage({ - payerKey: payer.publicKey, - recentBlockhash: lastestBlockhash.blockhash, - instructions: [ - SystemProgram.transfer({ - fromPubkey: payer.publicKey, - toPubkey: jito_validator_wallet, - lamports: fee, - }), - ], - }).compileToV0Message(); - const jitoFee_transaction = new VersionedTransaction(jitoFee_message); - jitoFee_transaction.sign([payer]); - const jitoTxSignature = bs58.encode(jitoFee_transaction.signatures[0]); - const serializedJitoFeeTransaction = bs58.encode( - jitoFee_transaction.serialize() - ); - const serializedTransaction = bs58.encode(transaction.serialize()); - const final_transaction = [ - serializedJitoFeeTransaction, - serializedTransaction, - ]; - const requests = endpoints.map((url) => - axios.post(url, { - jsonrpc: "2.0", - id: 1, - method: "sendBundle", - params: [final_transaction], - }) - ); - console.log("Sending tx to Jito validators..."); - const res = await Promise.all(requests.map((p) => p.catch((e) => e))); - const success_res = res.filter((r) => !(r instanceof Error)); - if (success_res.length > 0) { - console.log("Jito validator accepted the tx"); - return await jito_confirm(jitoTxSignature, lastestBlockhash); - } else { - console.log("No Jito validators accepted the tx"); - return { confirmed: false, signature: jitoTxSignature }; - } - } catch (e) { - if (e instanceof axios.AxiosError) { - console.log("Failed to execute the jito transaction"); - } else { - console.log("Error during jito transaction execution: ", e); - } - return { confirmed: false, signature: null }; - } - } - - /** - * Confirms a transaction on the Solana blockchain. - * @param {string} signature - The signature of the transaction. - * @param {object} latestBlockhash - The latest blockhash information. - * @returns {object} - An object containing the confirmation status and the transaction signature. - */ -async function jito_confirm(signature, latestBlockhash) { - console.log("Confirming the jito transaction..."); - const confirmation = await connection.confirmTransaction( - { - signature, - lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, - blockhash: latestBlockhash.blockhash, - }, - "confirmed" - ); - return { confirmed: !confirmation.value.err, signature: signature }; - } - - -module.exports = { jito_executeAndConfirm, jito_confirm }; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/types.js b/src/pumpfunsdk/pumpdotfun-sdk/src/types.js deleted file mode 100644 index 4b9bf2c..0000000 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/types.js +++ /dev/null @@ -1,80 +0,0 @@ -const { PublicKey, VersionedTransactionResponse } = require("@solana/web3.js"); - -// export type CreateTokenMetadata = { -// name: string; -// symbol: string; -// description: string; -// file: Blob; -// twitter?: string; -// telegram?: string; -// website?: string; -// }; - -// export type TokenMetadata = { -// name: string; -// symbol: string; -// description: string; -// image: string; -// showName: boolean; -// createdOn: string; -// twitter: string; -// }; - -// export type CreateEvent = { -// name: string; -// symbol: string; -// uri: string; -// mint: PublicKey; -// bondingCurve: PublicKey; -// user: PublicKey; -// }; - -// export type TradeEvent = { -// mint: PublicKey; -// solAmount: bigint; -// tokenAmount: bigint; -// isBuy: boolean; -// user: PublicKey; -// timestamp: number; -// virtualSolReserves: bigint; -// virtualTokenReserves: bigint; -// realSolReserves: bigint; -// realTokenReserves: bigint; -// }; - -// export type CompleteEvent = { -// user: PublicKey; -// mint: PublicKey; -// bondingCurve: PublicKey; -// timestamp: number; -// }; - -// export type SetParamsEvent = { -// feeRecipient: PublicKey; -// initialVirtualTokenReserves: bigint; -// initialVirtualSolReserves: bigint; -// initialRealTokenReserves: bigint; -// tokenTotalSupply: bigint; -// feeBasisPoints: bigint; -// }; - -// export interface PumpFunEventHandlers { -// createEvent: CreateEvent; -// tradeEvent: TradeEvent; -// completeEvent: CompleteEvent; -// setParamsEvent: SetParamsEvent; -// } - -// export type PumpFunEventType = keyof PumpFunEventHandlers; - -// export type PriorityFee = { -// unitLimit: number; -// unitPrice: number; -// }; - -// export type TransactionResult = { -// signature?: string; -// error?: unknown; -// results?: VersionedTransactionResponse; -// success: boolean; -// }; diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/types.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/types.ts new file mode 100644 index 0000000..60af5ec --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/types.ts @@ -0,0 +1,80 @@ +import { PublicKey, VersionedTransactionResponse } from "@solana/web3.js"; + +export type CreateTokenMetadata = { + name: string; + symbol: string; + description: string; + file: Blob; + twitter?: string; + telegram?: string; + website?: string; +}; + +export type TokenMetadata = { + name: string; + symbol: string; + description: string; + image: string; + showName: boolean; + createdOn: string; + twitter: string; +}; + +export type CreateEvent = { + name: string; + symbol: string; + uri: string; + mint: PublicKey; + bondingCurve: PublicKey; + user: PublicKey; +}; + +export type TradeEvent = { + mint: PublicKey; + solAmount: bigint; + tokenAmount: bigint; + isBuy: boolean; + user: PublicKey; + timestamp: number; + virtualSolReserves: bigint; + virtualTokenReserves: bigint; + realSolReserves: bigint; + realTokenReserves: bigint; +}; + +export type CompleteEvent = { + user: PublicKey; + mint: PublicKey; + bondingCurve: PublicKey; + timestamp: number; +}; + +export type SetParamsEvent = { + feeRecipient: PublicKey; + initialVirtualTokenReserves: bigint; + initialVirtualSolReserves: bigint; + initialRealTokenReserves: bigint; + tokenTotalSupply: bigint; + feeBasisPoints: bigint; +}; + +export interface PumpFunEventHandlers { + createEvent: CreateEvent; + tradeEvent: TradeEvent; + completeEvent: CompleteEvent; + setParamsEvent: SetParamsEvent; +} + +export type PumpFunEventType = keyof PumpFunEventHandlers; + +export type PriorityFee = { + unitLimit: number; + unitPrice: number; +}; + +export type TransactionResult = { + signature?: string; + error?: unknown; + results?: VersionedTransactionResponse; + success: boolean; +}; \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/util.js b/src/pumpfunsdk/pumpdotfun-sdk/src/util.js deleted file mode 100644 index 9b6c6f6..0000000 --- a/src/pumpfunsdk/pumpdotfun-sdk/src/util.js +++ /dev/null @@ -1,568 +0,0 @@ -const{ - Commitment, - ComputeBudgetProgram, - Connection, - Finality, - Keypair, - PublicKey, - SendTransactionError, - Transaction, - TransactionMessage, - VersionedTransaction, - VersionedTransactionResponse, - sendAndConfirmTransaction, - LAMPORTS_PER_SOL, - SystemProgram -} =require ("@solana/web3.js"); -const{ AnchorProvider } =require ("@coral-xyz/anchor"); -const {PumpFunSDK, DEFAULT_DECIMALS} = require("./pumpfun.js") -const{ PriorityFee, TransactionResult } =require ("./types.js"); -const{ jito_executeAndConfirm } =require ("./transactions/jito-tx-executor.js"); -const fs =require ("fs"); -const{ bs58 } =require ("@coral-xyz/anchor/dist/cjs/utils/bytes"); -const { - getOrCreateKeypair, - getSPLBalance, - printSOLBalance, - printSPLBalance, - getKeypairByJsonPath, -} = require("../example/util.js"); -const DEFAULT_COMMITMENT = "finalized"; -const DEFAULT_FINALITY = "finalized"; - -const calculateWithSlippageBuy = ( - amount, - basisPoints -) => { - return amount + (amount * basisPoints) / 10000n; -}; - -const calculateWithSlippageSell = ( - amount, - basisPoints -) => { - return amount - (amount * basisPoints) / 10000n; -}; - -function readCSVFile(filePath) { - try { - const data = fs.readFileSync(filePath, "utf8"); - return data; - } catch (err) { - console.error("Error reading the CSV file:", err); - return null; - } -} - -async function sendTxToJito( - connection, - tx, - payer, - signers, - jitofee -){ - const blockhash = (await connection.getLatestBlockhash()); - let final_tx = new Transaction(); - final_tx.add(tx); - let versionedTx = await buildVersionedTx(connection, payer.publicKey, final_tx, connection.commitment); - versionedTx.sign(signers); - try{ - const {confirmed, signature} = await jito_executeAndConfirm(versionedTx, payer, blockhash, jitofee); - // let txResult = await getTxDetails(connection, signature, connection.commitment, DEFAULT_FINALITY); - if (!confirmed) { - return { - success: false, - error: "Transaction failed", - }; - } - return { - success: true, - signature: signature, - }; - - }catch(e){ - if(e instanceof SendTransactionError){ - let ste = e; - console.log(await ste.getLogs(connection)); - }else{ - console.error(e); - } - return { - error: e, - success: false, - }; - } - - -} - -async function sendTx( - connection, - tx, - payer, - signers, - priorityFees, - commitment = DEFAULT_COMMITMENT, - finality = DEFAULT_FINALITY -){ - let newTx = new Transaction(); - - if (priorityFees) { - const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({ - units: priorityFees.unitLimit, - }); - - const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({ - microLamports: priorityFees.unitPrice, - }); - newTx.add(modifyComputeUnits); - newTx.add(addPriorityFee); - } - - newTx.add(tx); - let versionedTx = await buildVersionedTx(connection, payer, newTx, commitment); - versionedTx.sign(signers); - - try { - const sig = await connection.sendTransaction(versionedTx, { - skipPreflight: true, - }); - - console.log("sig:", `https://solscan.io/tx/${sig}`); - - let txResult = await getTxDetails(connection, sig, commitment, finality); - if (!txResult) { - return { - success: false, - error: "Transaction failed", - }; - } - return { - success: true, - }; - } catch (e) { - if (e instanceof SendTransactionError) { - let ste = e; - console.log(await ste.getLogs(connection)); - } else { - console.error(e); - } - return { - error: e, - success: false, - }; - } -} - -async function buildVersionedTx ( - connection, - payer, - tx, - commitment = DEFAULT_COMMITMENT -){ - const blockHash = (await connection.getLatestBlockhash(commitment)) - .blockhash; - - let messageV0 = new TransactionMessage({ - payerKey: payer, - recentBlockhash: blockHash, - instructions: tx.instructions, - }).compileToV0Message(); - - return new VersionedTransaction(messageV0); -}; - -async function getTxDetails ( - connection, - sig, - commitment = DEFAULT_COMMITMENT, - finality= DEFAULT_FINALITY -){ - const latestBlockHash = await connection.getLatestBlockhash(); - await connection.confirmTransaction( - { - blockhash: latestBlockHash.blockhash, - lastValidBlockHeight: latestBlockHash.lastValidBlockHeight, - signature: sig, - }, - commitment - ); - - return connection.getTransaction(sig, { - maxSupportedTransactionVersion: 0, - commitment: finality, - }); -}; - -function generateKeysAndAllocateSol(targetNumberOfKeys, targetTotalSol) { - // Generate private keys - const keys = []; - let sum = 0; - for (let i = 0; i < targetNumberOfKeys; i++) { - const keypair = Keypair.generate(); - keys.push(bs58.encode(keypair.secretKey)); - } - - // Allocate SOL with randomness - const averageAllocation = targetTotalSol / targetNumberOfKeys; - const maxDeviation = averageAllocation * 0.2; // 10% deviation - - const allocations = []; - let totalAllocated = 0; - - for (let i = 0; i < targetNumberOfKeys - 1; i++) { - const randomDeviation = (Math.random() * 2 - 1) * maxDeviation; - const allocation = parseFloat( - (averageAllocation + randomDeviation).toFixed(10) - ); - allocations.push({ privateKey: keys[i], sol: allocation }); - sum += allocation + 0.004; - totalAllocated += allocation; - } - - // Adjust the last allocation to match the target total precisely - const lastAllocation = parseFloat( - (targetTotalSol - totalAllocated).toFixed(10) - ); - - allocations.push({ - privateKey: keys[targetNumberOfKeys - 1], - sol: lastAllocation, - }); - console.log("sum", sum); - return allocations; -} - -// Function to write the allocations to a CSV file -async function writeAllocationsToCSV(filePath, allocations) { - const csvContent = allocations - .map(({ privateKey, sol }) => `${privateKey},${sol}`) - .join("\n"); - fs.writeFileSync(filePath, csvContent, "utf8"); -} - async function dropWalletBySOL(connection, walletListWithSOL, fundingWallet) { - console.log(fundingWallet.publicKey.toBase58()); - for (let i = 0; i < walletListWithSOL.length; i++) { - // we bundle 5 wallet to drop sol - if (i % 5 == 0) { - let final_tx = new Transaction(); - let fiveSigners = []; - for (let j = i; j < i + 5; j++) { - let secretKey = new Uint8Array( - bs58.decode(walletListWithSOL[j].privateKey) - ); - let sniperWallets = Keypair.fromSecretKey(secretKey); - console.log("Existing wallet: ", sniperWallets.publicKey.toBase58()); - console.log( - "it needs to drop: ", - walletListWithSOL[j].SOL * LAMPORTS_PER_SOL - ); - final_tx.add( - SystemProgram.transfer({ - fromPubkey: fundingWallet.publicKey, - toPubkey: sniperWallets.publicKey, - lamports: Math.round(walletListWithSOL[j].SOL * LAMPORTS_PER_SOL), - }) - ); - fiveSigners.push(sniperWallets); - } - - // Send the transaction - await sendTx( - connection, - final_tx, - fundingWallet.publicKey, - [fundingWallet], - { - unitLimit: 250000, - unitPrice: 0.005 * LAMPORTS_PER_SOL, - } - ); - } - } -} - -async function extractPrivateKeyAndSolana(data, numberOfSnipers) { - // Split the input string by newlines to handle multiple lines of input - const lines = data.split("\n"); - const pathToBoughtSnipers = - "/Users/chiwangso/Desktop/beta-memecoin-cli/src/memecoin-launch/pumpdotfun-sdk/src/WalletKeypairs/already3.json"; - let boughtSnipers = []; - try { - const fileContents = await fs.promises.readFile( - pathToBoughtSnipers, - "utf8" - ); - boughtSnipers = JSON.parse(fileContents); - } catch (error) { - // If the file doesn't exist, it's okay, we'll just create a new one - } - // Initialize an array to hold the results - const results= []; - let cnt = 0; - - // Iterate over each line - lines.forEach((line) => { - // Split the line by the comma to separate the private key and the number - const parts = line.split(","); - - // Check if the line has both a private key and a number - if (parts.length >= 2) { - const privateKey = parts[0].trim(); - const SOL = parseFloat(parts[1].trim()); - const keypair = Keypair.fromSecretKey( - new Uint8Array(bs58.decode(privateKey)) - ); - - // Push the result as an object if the status is not "done" and the count is less than the number of snipers - if ( - cnt < numberOfSnipers && - !boughtSnipers.includes(keypair.publicKey.toBase58()) - ) { - results.push({ - privateKey, - SOL, - }); - cnt++; - } - } - }); - - return results; -} - - async function getKeypairFromCsv(pathToCsv, numberOfSnipers) { - const data = await readCSVFile(pathToCsv); - const extractedData = await extractPrivateKeyAndSolana(data, numberOfSnipers); - let keypairList = []; - for (let i = 0; i < extractedData.length; i++) { - let secretKey = new Uint8Array(bs58.decode(extractedData[i].privateKey)); - let keypair = Keypair.fromSecretKey(secretKey); - keypairList.push(keypair); - } - return keypairList; -} - - - -async function getOtherTradersWallet(mintPubKey) { - let page = 1; - let allOwners = new Set(); - - while (true) { - const response = await fetch( - "https://mainnet.helius-rpc.com/?api-key=448fa184-4e3c-419b-a456-e9fd6889b659", - { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - jsonrpc: "2.0", - method: "getTokenAccounts", - id: "helius-test", - params: { - page: page, - limit: 1000, - displayOptions: {}, - mint: mintPubKey.toBase58(), - }, - }), - } - ); - const data = await response.json(); - - if (!data.result || data.result.token_accounts.length === 0) { - break; - } - data.result.token_accounts.forEach((account) => - allOwners.add(account.owner) - ); - page++; - } - - return Array.from(allOwners) ; - // return a list of outsider wallet address - // [ - // "owner": amount - // "owner2": amount - //] -} - - -async function getOurWallet() { - // return a list of our wallet address - const pathToSave = - "/Users/chiwangso/Desktop/beta-memecoin-cli/src/memecoin-launch/pumpdotfun-sdk/src/WalletKeypairs/already3.json"; - let listOfOurWallets= []; - const fileContents = await fs.promises.readFile(pathToSave, "utf8"); - listOfOurWallets = JSON.parse(fileContents); - return listOfOurWallets ; -} - -async function solCollector(connection, wallet, numberOfSnipers, pathToSnipersPrivateKey) { - - let sniperKeypairs = []; - const privateKeysArr = await fs.promises.readFile(pathToSnipersPrivateKey, "utf8"); - existingWallets = JSON.parse(privateKeysArr); - - for (let i = 0; i < existingWallets.length; i++) { - const sniperWallet = Keypair.fromSecretKey(bs58.decode(existingWallets[i])); - sniperKeypairs.push(sniperWallet); - } - console.log("Sol Collector is start"); - let final_tx = new Transaction(); - for (let i = 0; i < numberOfSnipers; i++) { - const solbalance = await connection.getBalance(sniperKeypairs[i].publicKey); - console.log( - `Sniper ${sniperKeypairs[i].publicKey.toBase58()} SOL balance: `, - solbalance - ); - final_tx.add( - SystemProgram.transfer({ - fromPubkey: sniperKeypairs[i].publicKey, - toPubkey: wallet.publicKey, - lamports: solbalance, - }) - ); - } - //send the transaction - - await sendTx( - connection, - final_tx, - wallet.publicKey, - [wallet, ...sniperKeypairs], - { - unitLimit: 250000, - unitPrice: 750000, - } - ); -} - -async function dropSOLToWallet(connection, masterWallet, walletPublicAddress, SOLToDrop) { - let final_tx = new Transaction(); - final_tx.add( - SystemProgram.transfer({ - fromPubkey: masterWallet.publicKey, - toPubkey: walletPublicAddress, - lamports: Math.round(SOLToDrop * LAMPORTS_PER_SOL), - }) - ); - const blockhash = await connection.getLatestBlockhash("confirmed"); - final_tx.feePayer = masterWallet.publicKey; - final_tx.recentBlockhash = blockhash.blockhash; - await sendTxToJito( - connection, - final_tx, - masterWallet, - [masterWallet], - 0.0001 - ); -} -async function getNumberOfKeypairsArrayFromPath( - path, - numberOfKeypairs -){ - let existingWallets = []; - let resWalletKeypairs = []; - try { - const fileContents = await fs.promises.readFile(path, "utf8"); - existingWallets = JSON.parse(fileContents); - for (let i = 0; i < numberOfKeypairs; i++) { - const secretKey = new Uint8Array(bs58.decode(existingWallets[i])); - const wallet = Keypair.fromSecretKey(secretKey); - console.log(wallet.publicKey.toBase58()); - resWalletKeypairs.push(wallet); - } - return resWalletKeypairs; - } catch (error) { - // If the file doesn't exist, it's okay, we'll just create a new one - } - return resWalletKeypairs; -} - - async function generateWalletsAndDropSOL( - connection, - masterWallet, - amountOfSol, - numberOfNewWallet, - pathToSave -){ - // Check if the file already exists - let existingWallets= []; - try { - const fileContents = await fs.promises.readFile(pathToSave, "utf8"); - existingWallets = JSON.parse(fileContents); - } catch (error) { - // If the file doesn't exist, it's okay, we'll just create a new one - } - let final_tx = new Transaction(); - for (let i = 0; i < existingWallets.length; i++) { - const wallet = Keypair.fromSecretKey(bs58.decode(existingWallets[i])); - console.log("Existing wallet: ", wallet.publicKey.toBase58()); - final_tx.add( - SystemProgram.transfer({ - fromPubkey: masterWallet.publicKey, - toPubkey: wallet.publicKey, - lamports: amountOfSol * LAMPORTS_PER_SOL, - }) - ); - } - // Generate new wallets and append to the existing array - for (let i = 0; i < numberOfNewWallet; i++) { - let newWallet = Keypair.generate(); - - console.log("New wallet created: ", newWallet.publicKey.toBase58()); - const privateKey = bs58.encode(newWallet.secretKey); - existingWallets.push(privateKey); - // Transfer SOL to the new wallet - final_tx.add( - SystemProgram.transfer({ - fromPubkey: masterWallet.publicKey, - toPubkey: newWallet.publicKey, - lamports: amountOfSol * LAMPORTS_PER_SOL, - }) - ); - } - - // Send the transaction - const blockhash = await connection.getLatestBlockhash("confirmed"); - final_tx.feePayer = masterWallet.publicKey; - final_tx.recentBlockhash = blockhash.blockhash; - await sendTxToJito( - connection, - final_tx, - masterWallet, - [masterWallet], - 0.0001 - ); - - // Save the updated array to the file - try { - await fs.promises.writeFile( - pathToSave, - JSON.stringify(existingWallets, null, 2) - ); - console.log(`Wallets saved to ${pathToSave}`); - } catch (error) { - console.error(`Error saving wallets to ${pathToSave}:`, error); - } - - return existingWallets; -} - - async function checkIfBondingCurveComplete(connection, wallet, mintKeypair) { - const provider = new AnchorProvider(connection, wallet, { - commitment: "finalized", - }); - - const sdk = new PumpFunSDK(provider); - const bondingCurveAccount = await sdk.getBondingCurveAccount( - mintKeypair.publicKey - ); - console.log("bondingCurveAccount: ", bondingCurveAccount); - return bondingCurveAccount?.complete; -} - -module.exports = {generateWalletsAndDropSOL, getNumberOfKeypairsArrayFromPath, dropSOLToWallet, solCollector, getOurWallet, getOtherTradersWallet, getKeypairFromCsv, extractPrivateKeyAndSolana, sendTx, sendTxToJito, readCSVFile, calculateWithSlippageSell, calculateWithSlippageBuy, DEFAULT_COMMITMENT, DEFAULT_FINALITY, sendTxToJito, buildVersionedTx, getTxDetails, generateKeysAndAllocateSol, writeAllocationsToCSV, dropWalletBySOL, getKeypairFromCsv, extractPrivateKeyAndSolana, getOtherTradersWallet, getOurWallet, solCollector, dropSOLToWallet, getNumberOfKeypairsArrayFromPath, generateWalletsAndDropSOL, checkIfBondingCurveComplete} \ No newline at end of file diff --git a/src/pumpfunsdk/pumpdotfun-sdk/src/util.ts b/src/pumpfunsdk/pumpdotfun-sdk/src/util.ts new file mode 100644 index 0000000..f3e924e --- /dev/null +++ b/src/pumpfunsdk/pumpdotfun-sdk/src/util.ts @@ -0,0 +1,328 @@ +import { + Commitment, + ComputeBudgetProgram, + Connection, + Finality, + Keypair, + PublicKey, + SendTransactionError, + Transaction, + TransactionMessage, + VersionedTransaction, + VersionedTransactionResponse, + sendAndConfirmTransaction, + LAMPORTS_PER_SOL, + SystemProgram, +} from "@solana/web3.js"; +import { AnchorProvider } from "@coral-xyz/anchor"; +import { PumpFunSDK, DEFAULT_DECIMALS } from "./pumpfun"; +import { PriorityFee, TransactionResult } from "./types"; +import { jito_executeAndConfirm } from "../../../transactions/jito_tips_tx_executor"; +import fs from "fs"; +import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; +export const DEFAULT_COMMITMENT = "finalized"; +export const DEFAULT_FINALITY = "finalized"; + +export const calculateWithSlippageBuy = ( + amount: bigint, + basisPoints: bigint +) => { + return amount + (amount * basisPoints) / 10000n; +}; + +export const calculateWithSlippageSell = ( + amount: bigint, + basisPoints: bigint +) => { + return amount - (amount * basisPoints) / 10000n; +}; + +function readCSVFile(filePath: string) { + try { + const data = fs.readFileSync(filePath, "utf8"); + return data; + } catch (err) { + console.error("Error reading the CSV file:", err); + return null; + } +} + +export async function sendTxToJito( + connection: Connection, + tx: any, + payer: Keypair, + signers: Keypair[], + jitofee: any +) { + const blockhash = await connection.getLatestBlockhash(); + let final_tx = new Transaction(); + final_tx.add(tx); + let versionedTx = await buildVersionedTx( + connection, + payer.publicKey, + final_tx, + connection.commitment + ); + versionedTx.sign(signers); + try { + const { confirmed, signature } = await jito_executeAndConfirm( + versionedTx, + payer, + blockhash, + jitofee + ); + // let txResult = await getTxDetails(connection, signature, connection.commitment, DEFAULT_FINALITY); + if (!confirmed) { + return { + success: false, + error: "Transaction failed", + }; + } + return { + success: true, + signature: signature, + }; + } catch (e) { + if (e instanceof SendTransactionError) { + let ste = e; + } else { + console.error(e); + } + return { + error: e, + success: false, + }; + } +} + +export async function sendTx( + connection: Connection, + tx: Transaction, + payer: PublicKey, + signers: Keypair[], + priorityFees?: PriorityFee, + commitment: any = DEFAULT_COMMITMENT, + finality: any = DEFAULT_FINALITY +): Promise { + let newTx = new Transaction(); + + if (priorityFees) { + const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({ + units: priorityFees.unitLimit, + }); + + const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: priorityFees.unitPrice, + }); + newTx.add(modifyComputeUnits); + newTx.add(addPriorityFee); + } + + newTx.add(tx); + + let versionedTx = await buildVersionedTx( + connection, + payer, + newTx, + commitment + ); + versionedTx.sign(signers); + + try { + const sig = await connection.sendTransaction(versionedTx, { + skipPreflight: false, + }); + console.log("sig:", `https://solscan.io/tx/${sig}`); + + let txResult = await getTxDetails(connection, sig, commitment, finality); + if (!txResult) { + return { + success: false, + error: "Transaction failed", + }; + } + return { + success: true, + signature: sig, + results: txResult, + }; + } catch (e) { + if (e instanceof SendTransactionError) { + let ste = e as SendTransactionError; + } else { + console.error(e); + } + return { + error: e, + success: false, + }; + } +} + +export const buildVersionedTx = async ( + connection: Connection, + payer: PublicKey, + tx: Transaction, + commitment: Commitment = DEFAULT_COMMITMENT +): Promise => { + const blockHash = (await connection.getLatestBlockhash(commitment)).blockhash; + + let messageV0 = new TransactionMessage({ + payerKey: payer, + recentBlockhash: blockHash, + instructions: tx.instructions, + }).compileToV0Message(); + + return new VersionedTransaction(messageV0); +}; + +export const getTxDetails = async ( + connection: Connection, + sig: string, + commitment: Commitment = DEFAULT_COMMITMENT, + finality: Finality = DEFAULT_FINALITY +): Promise => { + const latestBlockHash = await connection.getLatestBlockhash(); + await connection.confirmTransaction( + { + blockhash: latestBlockHash.blockhash, + lastValidBlockHeight: latestBlockHash.lastValidBlockHeight, + signature: sig, + }, + commitment + ); + + return connection.getTransaction(sig, { + maxSupportedTransactionVersion: 0, + commitment: finality, + }); +}; + +export function generateKeysAndAllocateSol( + targetNumberOfKeys: number, + targetTotalSol: number +) { + // Generate private keys + const keys = []; + let sum = 0; + for (let i = 0; i < targetNumberOfKeys; i++) { + const keypair = Keypair.generate(); + keys.push(bs58.encode(keypair.secretKey)); + } + + // Allocate SOL with randomness + const averageAllocation = targetTotalSol / targetNumberOfKeys; + const maxDeviation = averageAllocation * 0.2; // 10% deviation + + const allocations = []; + let totalAllocated = 0; + + for (let i = 0; i < targetNumberOfKeys - 1; i++) { + const randomDeviation = (Math.random() * 2 - 1) * maxDeviation; + const allocation = parseFloat( + (averageAllocation + randomDeviation).toFixed(10) + ); + allocations.push({ privateKey: keys[i], sol: allocation }); + sum += allocation + 0.004; + totalAllocated += allocation; + } + + // Adjust the last allocation to match the target total precisely + const lastAllocation = parseFloat( + (targetTotalSol - totalAllocated).toFixed(10) + ); + + allocations.push({ + privateKey: keys[targetNumberOfKeys - 1], + sol: lastAllocation, + }); + console.log("sum", sum); + return allocations; +} + +export async function generateWalletsAndDropSOL( + connection: Connection, + masterWallet: Keypair, + amountOfSol: number, + numberOfNewWallet: number, + pathToSave: string +) { + // Check if the file already exists + let existingWallets = []; + try { + const fileContents = await fs.promises.readFile(pathToSave, "utf8"); + existingWallets = JSON.parse(fileContents); + } catch (error) { + // If the file doesn't exist, it's okay, we'll just create a new one + } + let final_tx = new Transaction(); + for (let i = 0; i < existingWallets.length; i++) { + const wallet = Keypair.fromSecretKey(bs58.decode(existingWallets[i])); + console.log("Existing wallet: ", wallet.publicKey.toBase58()); + final_tx.add( + SystemProgram.transfer({ + fromPubkey: masterWallet.publicKey, + toPubkey: wallet.publicKey, + lamports: amountOfSol * LAMPORTS_PER_SOL, + }) + ); + } + // Generate new wallets and append to the existing array + for (let i = 0; i < numberOfNewWallet; i++) { + let newWallet = Keypair.generate(); + + console.log("New wallet created: ", newWallet.publicKey.toBase58()); + const privateKey = bs58.encode(newWallet.secretKey); + existingWallets.push(privateKey); + // Transfer SOL to the new wallet + final_tx.add( + SystemProgram.transfer({ + fromPubkey: masterWallet.publicKey, + toPubkey: newWallet.publicKey, + lamports: amountOfSol * LAMPORTS_PER_SOL, + }) + ); + } + + // Send the transaction + const blockhash = await connection.getLatestBlockhash("confirmed"); + final_tx.feePayer = masterWallet.publicKey; + final_tx.recentBlockhash = blockhash.blockhash; + await sendTxToJito( + connection, + final_tx, + masterWallet, + [masterWallet], + 0.0001 + ); + + // Save the updated array to the file + try { + await fs.promises.writeFile( + pathToSave, + JSON.stringify(existingWallets, null, 2) + ); + console.log(`Wallets saved to ${pathToSave}`); + } catch (error) { + console.error(`Error saving wallets to ${pathToSave}:`, error); + } + + return existingWallets; +} + +export async function checkIfBondingCurveComplete( + connection: Connection, + wallet: any, + mintKeypair: any +) { + const provider = new AnchorProvider(connection, wallet, { + commitment: "finalized", + }); + + const sdk = new PumpFunSDK(provider); + const bondingCurveAccount = await sdk.getBondingCurveAccount( + mintKeypair.publicKey + ); + console.log("bondingCurveAccount: ", bondingCurveAccount); + return bondingCurveAccount?.complete; +} diff --git a/src/raydium/Pool/add_pool.js b/src/raydium/Pool/add_pool.ts similarity index 82% rename from src/raydium/Pool/add_pool.js rename to src/raydium/Pool/add_pool.ts index 0074501..8807cad 100644 --- a/src/raydium/Pool/add_pool.js +++ b/src/raydium/Pool/add_pool.ts @@ -1,40 +1,40 @@ -const assert = require("assert"); -const { +import assert from "assert"; +import { jsonInfo2PoolKeys, Liquidity, Token, TOKEN_PROGRAM_ID, TokenAmount, Percent, -} = require("@raydium-io/raydium-sdk"); -const { PublicKey, Keypair } = require("@solana/web3.js"); -//const { getPoolId, getPoolIdByPair } = require("./query_pool.js"); -const {fetchAMMPoolId} = require("./fetch_pool.js") -const Decimal = require("decimal.js"); +} from "@raydium-io/raydium-sdk"; +import { PublicKey, Keypair } from "@solana/web3.js"; +//import { getPoolId, getPoolIdByPair } from("./query_pool.js"); +import {fetchAMMPoolId} from "./fetch_pool"; +import Decimal from "decimal.js"; -const { +import { connection, DEFAULT_TOKEN, makeTxVersion, dev_connection, wallet, -} = require("../helpers/config.js"); -const { formatAmmKeysById_pool } = require("./formatAmmKeysById.js"); -const { +} from "../../helpers/config"; +import { formatAmmKeysById_pool } from "./formatAmmKeysById"; +import { buildAndSendTx, getWalletTokenAccount, loadOrCreateKeypair_wallet, getDecimals, getTokenMetadata, checkTx, -} = require("../helpers/util.js"); +} from "../../helpers/util"; const BN = require("bn.js"); -const { program } = require("commander"); +import { program } from "commander"; -let payer_keypair = null, - token_address = null, - pool_id = null, - sol = null, +let payer_keypair:any = null, + token_address:any = null, + pool_id:any = null, + sol:any = null, cluster = null, priority_fee = null, connection_sol = connection; @@ -84,14 +84,14 @@ program.parse(); * @param {string} input.walletTokenAccounts - The token accounts of the wallet. * @returns {Object} - The transaction IDs and the amount of another currency. */ -async function ammAddLiquidity(input) { +export async function ammAddLiquidity(input:any) { try { const targetPoolInfo = await formatAmmKeysById_pool(input.targetPool); assert(targetPoolInfo, "cannot find the target pool"); // -------- step 1: compute another amount -------- - const poolKeys = jsonInfo2PoolKeys(targetPoolInfo); + const poolKeys:any = jsonInfo2PoolKeys(targetPoolInfo); const extraPoolInfo = await Liquidity.fetchInfo({ connection, poolKeys, @@ -113,7 +113,7 @@ async function ammAddLiquidity(input) { }); // -------- step 2: make instructions -------- - const addLiquidityInstructionResponse = + const addLiquidityInstructionResponse:any = await Liquidity.makeAddLiquidityInstructionSimple({ connection, poolKeys, @@ -134,18 +134,13 @@ async function ammAddLiquidity(input) { return { txids: await buildAndSendTx( - addLiquidityInstructionResponse.innerTransactions + addLiquidityInstructionResponse.innerTransactions, + null ), anotherAmount, }; } catch (e) { console.log(e); - return { - txids: await buildAndSendTx( - addLiquidityInstructionResponse.innerTransactions - ), - anotherAmount, - }; } } /** @@ -153,12 +148,12 @@ async function ammAddLiquidity(input) { * @param {Object} input - The input parameters for adding liquidity. * @returns {Promise} - A promise that resolves when the liquidity is added. */ -async function ammAddLiquidityHelper(input) { - const { txids, amount } = await ammAddLiquidity(input); - console.log("txids:", txids); - const response = await checkTx(txids[0]); +export async function ammAddLiquidityHelper(input:any) { + const res:any = await ammAddLiquidity(input); + console.log("txids:", res?.txids); + const response = await checkTx(res?.txids[0]); if (response) { - console.log(`https://explorer.solana.com/tx/${txids}?cluster=mainnet`); + console.log(`https://explorer.solana.com/tx/${res?.txids}?cluster=mainnet`); } else { console.log("Transaction failed"); console.log("trying to send the transaction again"); diff --git a/src/raydium/Pool/create_pool.js b/src/raydium/Pool/create_pool.js deleted file mode 100644 index 8b13789..0000000 --- a/src/raydium/Pool/create_pool.js +++ /dev/null @@ -1 +0,0 @@ - diff --git a/data/payer_keypair/mainnet/test1_wallet.json b/src/raydium/Pool/create_pool.ts similarity index 100% rename from data/payer_keypair/mainnet/test1_wallet.json rename to src/raydium/Pool/create_pool.ts diff --git a/src/raydium/Pool/fetch_pool.js b/src/raydium/Pool/fetch_pool.ts similarity index 71% rename from src/raydium/Pool/fetch_pool.js rename to src/raydium/Pool/fetch_pool.ts index 36018ad..678fee6 100644 --- a/src/raydium/Pool/fetch_pool.js +++ b/src/raydium/Pool/fetch_pool.ts @@ -1,8 +1,18 @@ -const { initSdk } = require("../raydium_config.js"); -const { wsol } = require("../constants.js"); +import { initSdk } from "../raydium_config"; +import { wsol } from "../constants"; +import {getInfoFromDexscreener} from "../../dexscreener"; let sdkCache = { sdk: null, expiry: 0 }; -async function fetchAMMPoolId(tokenAddress) { - let raydium = null; +export async function fetchAMMPoolId(tokenAddress:string) { + try{ + const info = await getInfoFromDexscreener(tokenAddress); + const poolId = info.poolId; + console.log(`AMM Pool ID: ${poolId}`); + if(poolId !== "") return poolId; + }catch(e){ + console.log("Error getting AMM pool ID using dexscreener api: ", e); + console.log("Trying to get AMM pool ID using raydium api"); + } + let raydium:any = null; if (sdkCache.sdk) { raydium = sdkCache.sdk; } else { @@ -25,8 +35,8 @@ async function fetchAMMPoolId(tokenAddress) { return ""; // return empty string if no AMM pool ID is found } -async function fetchAMMPoolIdByMintPair(mint1, mint2) { - let raydium = null; +export async function fetchAMMPoolIdByMintPair(mint1:string, mint2:string) { + let raydium:any = null; if (sdkCache.sdk) { raydium = sdkCache.sdk; } else { @@ -48,7 +58,7 @@ async function fetchAMMPoolIdByMintPair(mint1, mint2) { console.log("No AMM pool ID found for the given mint pair"); return ""; // return empty string if no AMM pool ID is found } -async function fetchLPToken(tokenAddress) { +export async function fetchLPToken(tokenAddress:string) { try { const poolId = await fetchAMMPoolId(tokenAddress); let response = await ( @@ -73,4 +83,4 @@ async function fetchLPToken(tokenAddress) { } //fetchLPToken("3XTp12PmKMHxB6YkejaGPUjMGBLKRGgzHWgJuVTsBCoP"); -module.exports = { fetchAMMPoolId, fetchAMMPoolIdByMintPair, fetchLPToken }; +//fetchAMMPoolId("ukHH6c7mMyiWCf1b9pnWe25TSpkDDt3H5pQZgZ74J82") \ No newline at end of file diff --git a/src/raydium/Pool/formatAmmKeysById.js b/src/raydium/Pool/formatAmmKeysById.ts similarity index 57% rename from src/raydium/Pool/formatAmmKeysById.js rename to src/raydium/Pool/formatAmmKeysById.ts index da16b12..ff7d6ae 100644 --- a/src/raydium/Pool/formatAmmKeysById.js +++ b/src/raydium/Pool/formatAmmKeysById.ts @@ -1,4 +1,4 @@ -const { +import { LIQUIDITY_STATE_LAYOUT_V4, MARKET_STATE_LAYOUT_V3, SPL_MINT_LAYOUT, @@ -8,15 +8,16 @@ const { LiquidityStateV4, publicKey, struct, -} = require("@raydium-io/raydium-sdk"); -const { PublicKey } = require("@solana/web3.js"); +} from "@raydium-io/raydium-sdk"; +import { PublicKey } from "@solana/web3.js"; const MINIMAL_MARKET_STATE_LAYOUT_V3 = struct([ publicKey("eventQueue"), publicKey("bids"), publicKey("asks"), ]); -const { connection } = require("../../helpers/config"); - +import { connection } from "../../helpers/config"; +import {initSdk} from "../raydium_config" +let sdkCache = { sdk: null, expiry: 0 }; // Promise /** * Formats AMM keys by ID. @@ -24,7 +25,7 @@ const { connection } = require("../../helpers/config"); * @returns {Object} - The formatted AMM keys. * @throws {Error} - If there is an error retrieving the account information. */ -async function formatAmmKeysById_swap(id) { +export async function formatAmmKeysById_swap(id:PublicKey) { const account = await connection.getAccountInfo(id); if (account === null) throw Error(" get id info error "); const info = LIQUIDITY_STATE_LAYOUT_V4.decode(account.data); @@ -84,7 +85,7 @@ async function formatAmmKeysById_swap(id) { }; } -async function formatAmmKeysById_pool(id) { +export async function formatAmmKeysById_pool(id:PublicKey) { const account = await connection.getAccountInfo(id); if (account === null) throw Error(" get id info error "); const info = LIQUIDITY_STATE_LAYOUT_V4.decode(account.data); @@ -134,4 +135,82 @@ async function formatAmmKeysById_pool(id) { }; } -module.exports = { formatAmmKeysById_swap, formatAmmKeysById_pool }; + + + +// usage of below two method: (it's the same as above but faster and more efficient in my vps) +// const poolKeys: any = await formatAmmKeysById_swap_1( +// new PublicKey(input.targetPool) +// ); + +// const poolInfo = await fetchPoolInfo(poolKeys, new PublicKey(input.targetPool)); + + +export async function formatAmmKeysById_swap_1(id: PublicKey):Promise { + let raydium:any = null + if(sdkCache.sdk){ + raydium = sdkCache.sdk; + } + else { + raydium = await initSdk(); + sdkCache.sdk = raydium; + } + + let poolKeys2 = await raydium.liquidity.getAmmPoolKeys(id.toBase58()); + while(poolKeys2 === null || poolKeys2===undefined){poolKeys2 = await raydium.liquidity.getAmmPoolKeys(id.toBase58());} + if(poolKeys2.programId !== '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8') return null; + return { + id: new PublicKey(poolKeys2.id), + baseMint: new PublicKey(poolKeys2.mintA.address), + quoteMint: new PublicKey(poolKeys2.mintB.address), + lpMint: new PublicKey(poolKeys2.mintLp.address), + baseDecimals: poolKeys2.mintA.decimals, + quoteDecimals: poolKeys2.mintB.decimals, + lpDecimals: poolKeys2.mintLp.decimals, + version: 4, + programId: new PublicKey(poolKeys2.programId), + authority: new PublicKey(poolKeys2.authority), + openOrders: new PublicKey(poolKeys2.openOrders), + targetOrders: new PublicKey(poolKeys2.targetOrders), + baseVault: new PublicKey(poolKeys2.vault.A), + quoteVault: new PublicKey(poolKeys2.vault.B), + marketVersion: 3, + marketProgramId: new PublicKey(poolKeys2.marketProgramId), + marketId: new PublicKey(poolKeys2.marketId), + marketAuthority: new PublicKey(poolKeys2.marketAuthority), + marketBaseVault: new PublicKey(poolKeys2.marketBaseVault), + marketQuoteVault: new PublicKey(poolKeys2.marketQuoteVault), + marketBids: new PublicKey(poolKeys2.marketBids), + marketAsks: new PublicKey(poolKeys2.marketAsks), + marketEventQueue: new PublicKey(poolKeys2.marketEventQueue), + withdrawQueue: new PublicKey("11111111111111111111111111111111"), + lpVault: new PublicKey("11111111111111111111111111111111"), + lookupTableAccount: new PublicKey("11111111111111111111111111111111") + } +} + +export async function fetchPoolInfo(poolKeys: any, poolId: PublicKey){ + if(poolKeys===null)return null; + let raydium:any = null + if(sdkCache.sdk){ + raydium = sdkCache.sdk; + } + else { + raydium = await initSdk(); + sdkCache.sdk = raydium; + } + + let rpcData = await raydium.liquidity.getRpcPoolInfo(poolId.toBase58()); + while(rpcData === null || rpcData===undefined) {rpcData = await raydium.liquidity.getRpcPoolInfo(poolId.toBase58());} + return { + status: rpcData.status, + baseDecimals: rpcData.baseDecimal.toNumber(), + quoteDecimals: rpcData.quoteDecimal.toNumber(), + lpDecimals: poolKeys.lpDecimals, + baseReserve: rpcData.baseReserve, + quoteReserve: rpcData.quoteReserve, + lpSupply: rpcData.lpReserve, + startTime: rpcData.poolOpenTime + } +} + diff --git a/src/raydium/Pool/index.ts b/src/raydium/Pool/index.ts new file mode 100644 index 0000000..cada997 --- /dev/null +++ b/src/raydium/Pool/index.ts @@ -0,0 +1,4 @@ +export * from "./add_pool"; +export * from "./remove_pool"; +export * from "./formatAmmKeysById"; +export * from "./swap"; \ No newline at end of file diff --git a/src/raydium/Pool/query_pool.js b/src/raydium/Pool/query_pool.js deleted file mode 100644 index 281e64b..0000000 --- a/src/raydium/Pool/query_pool.js +++ /dev/null @@ -1,377 +0,0 @@ -const { Connection, PublicKey } = require("@solana/web3.js"); -const { OpenOrders } = require("@project-serum/serum"); -const { gql, GraphQLClient } = require("graphql-request"); -const { shyft_api_key } = require("../../helpers/config"); -const {Liquidity} = require("@raydium-io/raydium-sdk"); -const { token } = require("@metaplex-foundation/js"); -const {getDecimals} = require( - "../../helpers/util" -) -const graphQLEndpoint = `https://programs.shyft.to/v0/graphql/?api_key=${shyft_api_key}`; -const rpcEndpoint = `https://rpc.shyft.to/?api_key=${shyft_api_key}`; - - - -async function generateV4PoolInfo(tokenAddress) { - // RAY-USDC - const poolInfo = Liquidity.getAssociatedPoolKeys({ - version: 4, - marketVersion: 3, - baseMint: new PublicKey('So11111111111111111111111111111111111111112'), - quoteMint: new PublicKey(tokenAddress), - baseDecimals: await getDecimals(new PublicKey(tokenAddress)), - quoteDecimals: 9, - programId: new PublicKey('675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8'), - - marketId: new PublicKey('DZjbn4XC8qoHKikZqzmhemykVzmossoayV9ffbsUqxVj'), - marketProgramId: new PublicKey('srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX'), - }) - console.log(poolInfo) - return { poolInfo } -} - -async function howToUse() { - generateV4PoolInfo().then(({ poolInfo }) => { - console.log('poolInfo: ', poolInfo) - }) -} -const graphQLClient = new GraphQLClient(graphQLEndpoint, { - method: `POST`, - jsonSerializer: { - parse: JSON.parse, - stringify: JSON.stringify, - }, -}); -// Get Pools By Token Address -/** - * Queries the liquidity pool by token. - * @param {string} token - The token to query the liquidity pool for. - * @returns {Promise} - The response object containing the liquidity pool information. - */ -async function queryLpByToken(token) { - // Get all proposalsV2 accounts - const query = gql` - query MyQuery( - $where: Raydium_LiquidityPoolv4_bool_exp - $order_by: [Raydium_LiquidityPoolv4_order_by!] - ) { - Raydium_LiquidityPoolv4(where: $where, order_by: $order_by) { - _updatedAt - amountWaveRatio - baseDecimal - baseLotSize - baseMint - baseNeedTakePnl - baseTotalPnl - baseVault - depth - lpMint - lpReserve - lpVault - marketId - marketProgramId - maxOrder - maxPriceMultiplier - minPriceMultiplier - minSeparateDenominator - minSeparateNumerator - minSize - nonce - openOrders - orderbookToInitTime - owner - pnlDenominator - pnlNumerator - poolOpenTime - punishCoinAmount - punishPcAmount - quoteDecimal - quoteLotSize - quoteMint - quoteNeedTakePnl - quoteTotalPnl - quoteVault - resetFlag - state - status - swapBase2QuoteFee - swapBaseInAmount - swapBaseOutAmount - swapFeeDenominator - swapFeeNumerator - swapQuote2BaseFee - swapQuoteInAmount - swapQuoteOutAmount - systemDecimalValue - targetOrders - tradeFeeDenominator - tradeFeeNumerator - volMaxCutRatio - withdrawQueue - pubkey - } - } - `; - - const variables = { - where: { - baseMint: { - _eq: token, - }, - }, - order_by: [ - { - lpReserve: "desc", - }, - ], - }; - - const response = await graphQLClient.request(query, variables); - return response; -} -// Get Token Supply Percentage In Pool -/** - * Queries a liquidity pool by address. - * @param {string} address - The address of the liquidity pool. - * @returns {Promise} - The result of the GraphQL query. - */ -async function queryLpByAddress(address) { - // We only fetch fields necessary for us - const query = gql` - query MyQuery($where: Raydium_LiquidityPoolv4_bool_exp) { - Raydium_LiquidityPoolv4( - where: {pubkey: {_eq: ${JSON.stringify(address)}}} - ) { - baseDecimal - baseMint - baseNeedTakePnl - baseVault - marketId - marketProgramId - openOrders - quoteDecimal - quoteMint - quoteNeedTakePnl - quoteVault - } -}`; - - return await graphQLClient.request(query); -} - -//We have to check how much tokens are present in openbook market as well -/** - * Parses the pool information and calculates various metrics related to the pool. - * @param {Object} poolInfo - The pool information object. - * @returns {Promise} - A promise that resolves once the pool information is parsed. - */ -async function parsePoolInfo(poolInfo) { - const OPENBOOK_PROGRAM_ID = new PublicKey( - "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX" - ); - - //to load openOorders from openbook - const connection = new Connection(rpcEndpoint, "confirmed"); - - const openOrders = await OpenOrders.load( - connection, - new PublicKey(poolInfo.openOrders), - OPENBOOK_PROGRAM_ID - ); - - const baseDecimal = 10 ** poolInfo.baseDecimal; // e.g. 10 ^ 6 - const quoteDecimal = 10 ** poolInfo.quoteDecimal; - console.log("baseToken: ", poolInfo.baseMint); - console.log("quoteToken: ", poolInfo.quoteMint); - - const baseTokenAmount = await connection.getTokenAccountBalance( - new PublicKey(poolInfo.baseVault) - ); - const quoteTokenAmount = await connection.getTokenAccountBalance( - new PublicKey(poolInfo.quoteVault) - ); - - const basePnl = poolInfo.baseNeedTakePnl / baseDecimal; - const quotePnl = poolInfo.quoteNeedTakePnl / quoteDecimal; - - const openOrdersBaseTokenTotal = openOrders.baseTokenTotal / baseDecimal; - const openOrdersQuoteTokenTotal = openOrders.quoteTokenTotal / quoteDecimal; - - const base = - (baseTokenAmount.value?.uiAmount || 0) + openOrdersBaseTokenTotal - basePnl; - //You can do the same for quote tokens also. This doesnt work for SOL. - const quote = - (quoteTokenAmount.value?.uiAmount || 0) + - openOrdersQuoteTokenTotal - - quotePnl; - - //We get the current token supply through RPC and find the percentage - const baseSupply = await connection.getTokenSupply( - new PublicKey(poolInfo.baseMint) - ); - console.log(`Total Base tokens: ${baseSupply.value.uiAmount}`); - console.log(`Base tokens in Pool: ${base}`); - console.log( - `Pecentage of total base tokens in Pool: ${ - (base / baseSupply?.value?.uiAmount) * 100 - } %` - ); -} - -// Sort Liquidity Pools -/** - * Queries the liquidity pool for a given pair of tokens. - * @param {string} tokenOne - The first token of the pair. - * @param {string} tokenTwo - The second token of the pair. - * @returns {Promise} - The response object containing the liquidity pool data. - */ -async function queryLpPair(tokenOne, tokenTwo) { - const query = gql` - query MyQuery( - $where: Raydium_LiquidityPoolv4_bool_exp - $order_by: [Raydium_LiquidityPoolv4_order_by!] - ) { - Raydium_LiquidityPoolv4(where: $where, order_by: $order_by) { - amountWaveRatio - baseDecimal - baseLotSize - baseMint - baseNeedTakePnl - baseTotalPnl - baseVault - depth - lpMint - lpReserve - lpVault - marketId - marketProgramId - maxOrder - maxPriceMultiplier - minPriceMultiplier - minSeparateDenominator - minSeparateNumerator - minSize - nonce - openOrders - orderbookToInitTime - owner - pnlDenominator - pnlNumerator - poolOpenTime - punishCoinAmount - punishPcAmount - quoteDecimal - quoteLotSize - quoteMint - quoteNeedTakePnl - quoteTotalPnl - quoteVault - resetFlag - state - status - swapBase2QuoteFee - swapBaseInAmount - swapBaseOutAmount - swapFeeDenominator - swapFeeNumerator - swapQuote2BaseFee - swapQuoteInAmount - swapQuoteOutAmount - systemDecimalValue - targetOrders - tradeFeeDenominator - tradeFeeNumerator - volMaxCutRatio - withdrawQueue - pubkey - } - } - `; - - const variables = { - where: { - baseMint: { - _eq: tokenOne, - }, - quoteMint: { - _eq: tokenTwo, - }, - }, - order_by: [ - { - lpReserve: "desc", - }, - ], - }; - - const response = await graphQLClient.request(query, variables); - return response; -} -/** - * Retrieves the pool ID associated with the given token. - * @param {string} token - The token to query the pool ID for. - * @returns {Promise} The pool ID if found, or null if no pool is found. - */ -async function getPoolId(token) { - const poolId = await queryLpByToken(token); - if (poolId.Raydium_LiquidityPoolv4.length === 0) { - console.log(`Cannot find any liquidity pool related to ${token}`); - return null; - } - - return poolId.Raydium_LiquidityPoolv4[0].pubkey; -} - -/** - * Retrieves the pool ID for a given base token. - * @param {string} baseToken - The base token. - * @returns {string|null} - The pool ID if found, otherwise null. - */ -async function getPoolIdByPair(baseToken) { - // token/SOL pair - const quoteToken = "So11111111111111111111111111111111111111112"; - const poolId = await queryLpPair(baseToken, quoteToken); - if (poolId.Raydium_LiquidityPoolv4.length === 0) { - console.log( - `Cannot find any liquidity pool related to ${baseToken}/${quoteToken}` - ); - console.log(`It may be a token launched on pump.fun, we try to find ${quoteToken}/${baseToken}`) - const poolIdByPair = await queryLpPair(quoteToken, baseToken); - if (poolIdByPair.Raydium_LiquidityPoolv4.length === 0) { - console.log( - `Cannot find any liquidity pool related to ${quoteToken}/${baseToken}` - ); - throw new Error(`Cannot find any liquidity pool related to ${quoteToken}`); - return null; - }else{ - return poolIdByPair.Raydium_LiquidityPoolv4[0].pubkey; - } - return null; - } - return poolId.Raydium_LiquidityPoolv4[0].pubkey; -} -async function main() { - // getting the pool address for npch - //const poolId = await getPoolIdByPair("token_address") - //console.log(poolId) - // get token supply by token address - // const poolInfo: any = await queryLpByAddress('TOKEN_ADDRESS'); - // await parsePoolInfo(poolInfo.Raydium_LiquidityPoolv4[0]); - // get the pair of liquidity pool of two tokens - // like sol/slerf - // const poolIdByPair = await getPoolIdByPair( - // 'TOKEN_ADDRESS', - // 'So11111111111111111111111111111111111111112', - // ); - // console.log(poolIdByPair); - -} -//main().catch(console.error); -module.exports = { - getPoolIdByPair, - queryLpByToken, - queryLpByAddress, - parsePoolInfo, - queryLpPair, - getPoolId, -}; diff --git a/src/raydium/Pool/remove_pool.js b/src/raydium/Pool/remove_pool.ts similarity index 77% rename from src/raydium/Pool/remove_pool.js rename to src/raydium/Pool/remove_pool.ts index 11077e2..10285e5 100644 --- a/src/raydium/Pool/remove_pool.js +++ b/src/raydium/Pool/remove_pool.ts @@ -1,49 +1,49 @@ -const assert = require("assert"); +import assert from "assert"; -const { +import { jsonInfo2PoolKeys, Liquidity, LiquidityPoolKeys, TokenAmount, Token, TOKEN_PROGRAM_ID, -} = require("@raydium-io/raydium-sdk"); +} from "@raydium-io/raydium-sdk"; -const { Keypair, PublicKey } = require("@solana/web3.js"); -const { Decimal } = require("decimal.js"); -const { +import { Keypair, PublicKey } from "@solana/web3.js"; +import { Decimal } from "decimal.js"; +import { connection, DEFAULT_TOKEN, makeTxVersion, wallet, dev_connection, -} = require("../../helpers/config.js"); -const { +} from "../../helpers/config"; +import { formatAmmKeysById_pool, formatAmmKeysById_swap, -} = require("./formatAmmKeysById.js"); -const { +} from "./formatAmmKeysById"; +import { buildAndSendTx, getWalletTokenAccount, loadOrCreateKeypair_wallet, checkTx, -} = require("../../helpers/util.js"); -// const { +} from "../../helpers/util"; +// import { // getPoolId, // getPoolIdByPair, // queryLpByToken, // queryLpPair, -// } = require("./query_pool.js"); -const { fetchAMMPoolId, fetchLPToken} = require("./fetch_pool.js") -const { getSPLTokenBalance } = require("../helpers/check_balance.js"); -const { getDecimals, getTokenMetadata } = require("../helpers/util.js"); -const { BN } = require("@project-serum/anchor"); -const { program } = require("commander"); +// } from("./query_pool.js"); +import { fetchAMMPoolId, fetchLPToken} from "./fetch_pool"; +import { getSPLTokenBalance } from "../../helpers/check_balance"; +import { getDecimals, getTokenMetadata } from "../../helpers/util"; +import { BN } from "@project-serum/anchor"; +import { program } from "commander"; -let payer_keypair = null, - tokenAddress = null, - percentage = null, - cluster = null; +let payer_keypair:any = null, + tokenAddress:any = null, + percentage:any = null, + cluster:any = null; program .option("--payer ", "Specify the path to the secret key") .option("--token_address ", "Specify the token address") @@ -83,14 +83,14 @@ program.parse(); * @param {number} makeTxVersion - The transaction version. * @returns {Object} - The transaction IDs. */ -async function ammRemoveLiquidity(input) { +export async function ammRemoveLiquidity(input:any) { try { // -------- pre-action: fetch basic info -------- const targetPoolInfo = await formatAmmKeysById_pool(input.targetPool); assert(targetPoolInfo, "cannot find the target pool"); // -------- step 1: make instructions -------- - const poolKeys = jsonInfo2PoolKeys(targetPoolInfo); + const poolKeys:any = jsonInfo2PoolKeys(targetPoolInfo); const removeLiquidityInstructionResponse = await Liquidity.makeRemoveLiquidityInstructionSimple({ connection, @@ -114,14 +114,6 @@ async function ammRemoveLiquidity(input) { }; } catch (err) { console.log(err); - return { - txids: await buildAndSendTx( - removeLiquidityInstructionResponse.innerTransactions, - { - preflightCommitment: "confirmed", - } - ), - }; } } @@ -130,11 +122,10 @@ async function ammRemoveLiquidity(input) { * @param {string} tokenAddress - The token address. * @returns {string} - The LP token address. */ -async function findLPTokenAddress(tokenAddress) { - const response = await fetchLPToken(tokenAddress); +export async function findLPTokenAddress(tokenAddress:string) { + const response:any = await fetchLPToken(tokenAddress); console.log(response); - console.log(response.Raydium_LiquidityPoolv4[0].lpMint); - return response.Raydium_LiquidityPoolv4[0].lpMint; + return response; } /** @@ -142,12 +133,12 @@ async function findLPTokenAddress(tokenAddress) { * @param {Object} input - The input parameters for removing liquidity. * @returns {Promise} - A promise that resolves when the liquidity is removed. */ -async function ammRemoveLiquidityHelper(input) { - const { txids } = await ammRemoveLiquidity(input); - console.log("txids:", txids); - const response = await checkTx(txids[0]); +export async function ammRemoveLiquidityHelper(input:any) { + const res:any = await ammRemoveLiquidity(input); + console.log("txids:", res?.txids); + const response = await checkTx(res?.txids[0]); if (response) { - console.log(`https://explorer.solana.com/tx/${txids}?cluster=mainnet`); + console.log(`https://explorer.solana.com/tx/${res.txids}?cluster=mainnet`); } else { console.log("Transaction failed"); console.log("trying to send the transaction again"); diff --git a/src/raydium/Pool/swap.js b/src/raydium/Pool/swap.ts similarity index 79% rename from src/raydium/Pool/swap.js rename to src/raydium/Pool/swap.ts index 8d91e75..65e2906 100644 --- a/src/raydium/Pool/swap.js +++ b/src/raydium/Pool/swap.ts @@ -1,24 +1,24 @@ -const assert = require("assert"); +import assert from "assert"; -const { +import { Liquidity, Percent, Token, TOKEN_PROGRAM_ID, TokenAmount, -} = require("@raydium-io/raydium-sdk"); -const { +} from "@raydium-io/raydium-sdk"; +import { PublicKey, TransactionMessage, ComputeBudgetProgram, VersionedTransaction, LAMPORTS_PER_SOL, Transaction, -} = require("@solana/web3.js"); -const { Decimal } = require("decimal.js"); -const { BN } = require("@project-serum/anchor"); -const { getSPLTokenBalance } = require("../../helpers/check_balance.js"); -const { +} from "@solana/web3.js"; +import { Decimal } from "decimal.js"; +import { BN } from "@project-serum/anchor"; +import { getSPLTokenBalance } from "../../helpers/check_balance"; +import { connection, DEFAULT_TOKEN, makeTxVersion, @@ -26,31 +26,23 @@ const { _ENDPOINT, wallet, jito_fee, -} = require("../../helpers/config.js"); -const { - getDecimals, - getTokenMetadata, - checkTx, -} = require("../../helpers/util.js"); -//const { getPoolId, getPoolIdByPair } = require("./query_pool.js"); -const { fetchAMMPoolId } = require("./fetch_pool.js"); -const { +} from "../../helpers/config"; +import { getTokenMetadata, checkTx, getDecimals } from "../../helpers/util"; +import { fetchAMMPoolId } from "./fetch_pool"; +import { getAssociatedTokenAddress, getAssociatedTokenAddressSync, createAssociatedTokenAccountIdempotentInstruction, createCloseAccountInstruction, -} = require("@solana/spl-token"); -const { mint } = require("@metaplex-foundation/mpl-candy-machine"); -const { formatAmmKeysById_swap } = require("./formatAmmKeysById.js"); -const { - simple_executeAndConfirm, -} = require("../../Transactions/simple_tx_executor.js"); -const { - jito_executeAndConfirm, -} = require("../../Transactions/jito_tips_tx_executor.js"); -const {bloXroute_executeAndConfirm} = require("../../Transactions/bloXroute_tips_tx_executor.js") -let tokenToPoolIdMap = {}; - +} from "@solana/spl-token"; +import { formatAmmKeysById_swap } from "./formatAmmKeysById"; +import { simple_executeAndConfirm } from "../../transactions/simple_tx_executor"; +import { jito_executeAndConfirm } from "../../transactions/jito_tips_tx_executor"; +import { bloXroute_executeAndConfirm } from "../../transactions/bloXroute_tips_tx_executor"; +import { Keypair } from "@solana/web3.js"; +import { initSdk } from "../raydium_config"; +let tokenToPoolIdMap: any = {}; +let sdkCache = { sdk: null, expiry: 0 }; /** * Performs a swap transaction using an Automated Market Maker (AMM) pool. * @param {Object} input - The input parameters for the swap transaction. @@ -64,17 +56,24 @@ let tokenToPoolIdMap = {}; * @param {string} input.side - The side of the swap transaction (e.g., "buy"). * @returns {Object} - The transaction ID if successful, otherwise null. */ -async function swapOnlyAmm(input) { +async function swapOnlyAmm(input: any) { // -------- pre-action: get pool info --------\ - - const poolKeys = await formatAmmKeysById_swap( + let raydium: any = null; + if (sdkCache.sdk) { + raydium = sdkCache.sdk; + } else { + raydium = await initSdk(); + sdkCache.sdk = raydium; + } + const poolKeys: any = await formatAmmKeysById_swap( new PublicKey(input.targetPool) ); assert(poolKeys, "cannot find the target pool"); - const poolInfo = await Liquidity.fetchInfo({ - connection: connection, - poolKeys: poolKeys, - }); + // const poolInfo = await Liquidity.fetchInfo({ + // connection: connection, + // poolKeys: poolKeys, + // }); + const poolInfo = await raydium.liquidity.getRpcPoolInfo(input.targetPool); // -------- step 1: coumpute amount out -------- const { amountOut, minAmountOut } = Liquidity.computeAmountOut({ poolKeys: poolKeys, @@ -83,6 +82,7 @@ async function swapOnlyAmm(input) { currencyOut: input.outputToken, slippage: input.slippage, }); + // -------- step 2: create instructions by SDK function -------- const { innerTransaction } = await Liquidity.makeSwapFixedInInstruction( { @@ -104,11 +104,8 @@ async function swapOnlyAmm(input) { recentBlockhash: latestBlockhash.blockhash, instructions: [ ...[ - ComputeBudgetProgram.setComputeUnitPrice({ - microLamports: 305290, - }), ComputeBudgetProgram.setComputeUnitLimit({ - units: 312750, + units: 70000, }), ], ...(input.side === "buy" @@ -148,7 +145,7 @@ async function swapOnlyAmm(input) { console.log("jito fee transaction failed"); console.log(`Retry attempt ${attempts}`); } - } catch (e) { + } catch (e: any) { console.log(e); if (e.signature) { return { txid: e.signature }; @@ -160,8 +157,8 @@ async function swapOnlyAmm(input) { console.log("Transaction failed after maximum retry attempts"); return { txid: null }; } -async function swapOnlyAmmUsingBloXRoute(input) { - const poolKeys = await formatAmmKeysById_swap( +async function swapOnlyAmmUsingBloXRoute(input: any) { + const poolKeys: any = await formatAmmKeysById_swap( new PublicKey(input.targetPool) ); assert(poolKeys, "cannot find the target pool"); @@ -194,25 +191,22 @@ async function swapOnlyAmmUsingBloXRoute(input) { if (input.usage == "volume") return innerTransaction; const latestBlockhash = await connection.getLatestBlockhash(); let tx = new Transaction(); - tx.add( - ComputeBudgetProgram.setComputeUnitPrice({ - microLamports: 305290, - }), + tx.add( ComputeBudgetProgram.setComputeUnitLimit({ - units: 312750, + units: 70000, }), ...(input.side === "buy" - ? [ - createAssociatedTokenAccountIdempotentInstruction( - wallet.publicKey, - input.ataOut, - wallet.publicKey, - input.outputToken.mint - ), - ] - : []), - ...innerTransaction.instructions, - ) + ? [ + createAssociatedTokenAccountIdempotentInstruction( + wallet.publicKey, + input.ataOut, + wallet.publicKey, + input.outputToken.mint + ), + ] + : []), + ...innerTransaction.instructions + ); await bloXroute_executeAndConfirm(tx, [wallet]); } /** @@ -221,8 +215,8 @@ async function swapOnlyAmmUsingBloXRoute(input) { * @param {number} sol_per_order - The price of SOL per order. * @returns {Promise<{ confirmed: boolean, txid: string }>} The confirmation status and transaction ID. */ -async function swapForVolume(tokenAddr, sol_per_order) { - const buy_instruction = await swap( +export async function swapForVolume(tokenAddr: string, sol_per_order: number) { + const buy_instruction: any = await swap( "buy", tokenAddr, sol_per_order, @@ -230,7 +224,7 @@ async function swapForVolume(tokenAddr, sol_per_order) { wallet, "volume" ); - const sell_instruction = await swap( + const sell_instruction: any = await swap( "sell", tokenAddr, -1, @@ -247,9 +241,6 @@ async function swapForVolume(tokenAddr, sol_per_order) { ComputeBudgetProgram.setComputeUnitLimit({ units: 70000, }), - ComputeBudgetProgram.setComputeUnitPrice({ - microLamports: 90000, - }), ], ...sell_instruction.instructions, ...buy_instruction.instructions, @@ -265,10 +256,14 @@ async function swapForVolume(tokenAddr, sol_per_order) { let signature = null, confirmed = null; try { - const res = simple_executeAndConfirm(transaction, wallet, latestBlockhash); + const res: any = simple_executeAndConfirm( + transaction, + wallet, + latestBlockhash + ); signature = res.signature; confirmed = res.confirmed; - } catch (e) { + } catch (e: any) { console.log(e); return { confirmed: confirmed, txid: e.signature }; } @@ -280,10 +275,10 @@ async function swapForVolume(tokenAddr, sol_per_order) { * @param {Object} input - The input object containing the necessary parameters for the swap. * @returns {Promise} - A promise that resolves when the swap is completed. */ -async function swapOnlyAmmHelper(input) { - const { txid } = await swapOnlyAmm(input); - console.log("txids:", txid); - const response = await checkTx(txid); +async function swapOnlyAmmHelper(input: any) { + const res: any = await swapOnlyAmm(input); + console.log("txids:", res.txid); + const response = await checkTx(res.txid); if (response) { if (input.side === "buy") { console.log( @@ -294,7 +289,7 @@ async function swapOnlyAmmHelper(input) { `https://dexscreener.com/solana/${input.targetPool}?maker=${wallet.publicKey}` ); } - console.log(`https://solscan.io/tx/${txid}?cluster=mainnet`); + console.log(`https://solscan.io/tx/${res.txid}?cluster=mainnet`); } else { console.log("Transaction failed"); } @@ -309,13 +304,13 @@ async function swapOnlyAmmHelper(input) { * @param {object} payer_wallet - The payer's wallet object. * @returns {Promise} - A promise that resolves when the swap operation is completed. */ -async function swap( - side, - tokenAddr, - buy_AmountOfSol, - sell_PercentageOfToken, - payer_wallet, - usage +export async function swap( + side: string, + tokenAddr: string, + buy_AmountOfSol: number, + sell_PercentageOfToken: number, + payer_wallet: Keypair, + usage: string ) { const tokenAddress = tokenAddr; const tokenAccount = new PublicKey(tokenAddress); @@ -338,11 +333,12 @@ async function swap( ); const inputToken = DEFAULT_TOKEN.WSOL; // SOL let targetPool = null; + console.log("Fetching pool id..."); if (!(tokenAddress in tokenToPoolIdMap)) { targetPool = await fetchAMMPoolId(tokenAddress); tokenToPoolIdMap[tokenAddress] = targetPool; } else targetPool = tokenToPoolIdMap[tokenAddress]; - + console.log("Pool id fetched."); if (targetPool === null) { console.log( "Pool not found or raydium is not supported for this token. Exiting..." @@ -382,11 +378,12 @@ async function swap( ); const outputToken = DEFAULT_TOKEN.WSOL; // SOL let targetPool = null; + console.log("Fetching pool id..."); if (!(tokenAddress in tokenToPoolIdMap)) { targetPool = await fetchAMMPoolId(tokenAddress); tokenToPoolIdMap[tokenAddress] = targetPool; } else targetPool = tokenToPoolIdMap[tokenAddress]; - + console.log("Pool id fetched."); if (targetPool === null) { console.log( "Pool not found or raydium is not supported for this token. Exiting..." @@ -422,9 +419,7 @@ async function swap( if (usage == "volume") { return await swapOnlyAmm(input); } - swapOnlyAmmHelper(input); // using Jito + swapOnlyAmmHelper(input); // using Jito //swapOnlyAmmUsingBloXRoute(input); // using bloXroute } } - -module.exports = { swap, swapForVolume }; diff --git a/src/raydium/README.md b/src/raydium/README.md new file mode 100644 index 0000000..e6bb27d --- /dev/null +++ b/src/raydium/README.md @@ -0,0 +1,65 @@ +# Raydium DEX Usage Examples + +### Buy token through cli +` +ts-node src/raydium/buy.ts --token --sol +` + +### Sell token through cli +` +ts-node src/raydium/sell.ts --token --percentage +` +### buy/sell token on Raydium +```typescript +import {buy, sell} from "../raydium"; +import {wallet} from "../helpers/config"; +async function main() { + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const sol = 1; // buy 1 SOL worth of token using WSOL + const sellPercentage = 50; // sell 50% of the token + await buy("buy", tokenAddress, sol, wallet); // buy 1 SOL worth of POPCAT + await sell("sell", tokenAddress, sellPercentage, wallet); // sell 50% of the POPCAT +} +``` + +### Fetch the price from Raydium pool +```typescript +import {getCurrentPriceInUSD, getCurrentPriceInSOL} from "../raydium"; + +const currentPopcatPriceInSOL = await getCurrentPriceInSOL("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); +const currentPopcatPriceInUSD = await getCurrentPriceInUSD("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); + +console.log(currentPopcatPriceInSOL); +console.log(currentPopcatPriceInUSD); +``` + +### Fetch the pool address for the target token +```typescript +import {fetchAMMPoolId, fetchAMMPoolIdByMintPair} from "../raydium"; + +async function main(){ + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const poolId = await fetchAMMPoolId(tokenAddress); // output Address: POPCAT/WSOL or WSOL/POPCAT + const poolIdByMintPair = await fetchAMMPoolIdByMintPair(tokenAddress, "YOUR_MINT_ADDRESS"); // output Address: POPCAT/YOUR_MINT_ADDRESS or YOUR_MINT_ADDRESS/POPCAT + console.log(poolId); + console.log(poolIdByMintPair); +} +``` + +### Fetch the metrics of the pool +```typescript +import {getLPBurnPercentage, getCurrentMarketCap, getCurrentSolInPool, getDayVolume, getWeekVolume, getMonthVolume} from "../raydium"; + +async function main(){ + const tokenAddress = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; + const LPBurnPercentage = await getLPBurnPercentage(tokenAddress); // to get the percentage of LP tokens burned + const currentMarketCap = await getCurrentMarketCap(tokenAddress); // to get the current market cap of the token + const currentSolInPool = await getCurrentSolInPool(tokenAddress); // to get the current number of SOL in the pool + const dayVolume = await getDayVolume(tokenAddress); // to get the volume of the pool in the last 24 hours + const weekVolume = await getWeekVolume(tokenAddress); // to get the volume of the pool in the last week + const monthVolume = await getMonthVolume(tokenAddress); // to get the volume of the pool in the last month + // output ... +} +``` + + diff --git a/src/raydium/buy.js b/src/raydium/buy.ts similarity index 65% rename from src/raydium/buy.js rename to src/raydium/buy.ts index a9811a2..2c328b1 100644 --- a/src/raydium/buy.js +++ b/src/raydium/buy.ts @@ -1,33 +1,35 @@ -const { swap } = require("./Pool/swap.js"); -const { program } = require("commander"); -const { loadOrCreateKeypair_wallet } = require("../helpers/util.js"); -const { wallet } = require("../helpers/config.js"); +import { swap } from "./Pool/swap"; +import { program } from "commander"; +import { loadOrCreateKeypair_wallet } from "../helpers/util"; +import { wallet } from "../helpers/config"; +import { Keypair } from "@solana/web3.js"; +import { logger } from "../helpers/logger"; -let payer_keypair = null, - token_address = null, - sol = null, - cluster = null; +let payer_keypair:any = null, + token_address:any = null, + sol:any = null, + cluster:any = null; program .option("--payer ", "Specify the path to the secret key") - .option("--token_address ", "Specify the token address") + .option("--token ", "Specify the token address") .option("--sol ", "Specify the number of SOL") .option("--cluster ", "Specify the cluster") .option("-h, --help", "display help for command") .action((options) => { if (options.help) { - console.log( - "node buy --payer --token_address --sol --cluster " + logger.info( + "ts-node buy --token --sol " ); process.exit(0); } - if (!options.token_address || !options.sol || !options.cluster) { + if (!options.token || !options.sol) { console.error("❌ Missing required options"); process.exit(1); } if (options.payer) { payer_keypair = options.payer; } - token_address = options.token_address; + token_address = options.token; sol = options.sol; cluster = options.cluster; }); @@ -42,7 +44,7 @@ program.parse(); * @param {string} payer - The payer's keypair for the transaction. * @returns {Promise} - A promise that resolves when the swap is completed. */ -async function buy(side, address, no_of_sol, payer) { +async function buy(side:string, address:string, no_of_sol:number, payer:Keypair) { let payer_wallet = null; if (payer_keypair !== null) { payer_wallet = await loadOrCreateKeypair_wallet(payer_keypair); diff --git a/src/raydium/buy_helper.js b/src/raydium/buy_helper.ts similarity index 67% rename from src/raydium/buy_helper.js rename to src/raydium/buy_helper.ts index 82c5f2f..854ba9a 100644 --- a/src/raydium/buy_helper.js +++ b/src/raydium/buy_helper.ts @@ -1,5 +1,5 @@ -const { Keypair } = require("@solana/web3.js"); -const { swap } = require("./Pool/swap"); +import { Keypair } from "@solana/web3.js"; +import { swap } from "./Pool/swap"; /** * Buys a specified amount of a token using a amount of sol. * @@ -9,15 +9,15 @@ const { swap } = require("./Pool/swap"); * @param {Keypair} payer - The payer of the transaction. * @returns {Promise} - A promise that resolves when the trade is completed. */ -async function buy(side, address, no_of_sol, payer) { +export async function buy(side:string, address:string, no_of_sol:number, payer:Keypair) { await swap(side, address, no_of_sol, -1, payer, "trade"); } -async function get_buy_transaction( - side, - tokenAddr, - buy_AmountOfSol, - payer_wallet +export async function get_buy_transaction( + side:string, + tokenAddr:string, + buy_AmountOfSol:number, + payer_wallet:Keypair ) { const innerTransaction = await swap( side, @@ -29,5 +29,3 @@ async function get_buy_transaction( ); return innerTransaction; } - -module.exports = { buy, get_buy_transaction }; diff --git a/src/raydium/constants.js b/src/raydium/constants.js deleted file mode 100644 index 9ace8e5..0000000 --- a/src/raydium/constants.js +++ /dev/null @@ -1,5 +0,0 @@ -const wsol = "So11111111111111111111111111111111111111112"; -const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; -const usdt = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"; // USDT - -module.exports = {wsol, usdc, usdt} \ No newline at end of file diff --git a/src/raydium/constants.ts b/src/raydium/constants.ts new file mode 100644 index 0000000..bbd67fc --- /dev/null +++ b/src/raydium/constants.ts @@ -0,0 +1,3 @@ +export const wsol = "So11111111111111111111111111111111111111112"; +export const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; +export const usdt = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"; // USDT diff --git a/src/raydium/fetch-price.js b/src/raydium/fetch-price.ts similarity index 80% rename from src/raydium/fetch-price.js rename to src/raydium/fetch-price.ts index fdfe368..842e697 100644 --- a/src/raydium/fetch-price.js +++ b/src/raydium/fetch-price.ts @@ -1,14 +1,15 @@ -const { initSdk } = require("./raydium_config"); -const {fetchAMMPoolId} = require("./Pool/fetch_pool"); -const Decimal = require("decimal.js"); -const {wsol} = require("./constants"); +import { initSdk } from "./raydium_config"; +import {fetchAMMPoolId} from "./Pool/fetch_pool"; +import Decimal from "decimal.js"; +import {wsol} from "./constants"; +import { sol } from "@metaplex-foundation/js"; let sdkCache = { sdk: null, expiry: 0 }; -async function getCurrentPriceInSOL( - tokenAddress +export async function getCurrentPriceInSOL( + tokenAddress:string ) { try { // Check if poolId is already set - let raydium = null; + let raydium:any = null; if (sdkCache.sdk) { raydium = sdkCache.sdk; } else { @@ -56,9 +57,9 @@ async function getCurrentPriceInSOL( console.log(`Error when getting current price of ${tokenAddress} `, e); } } -async function getCurrentSolPrice(){ +export async function getCurrentSolPrice(){ try{ - let raydium = null + let raydium:any = null if(sdkCache.sdk){ raydium = sdkCache.sdk; } @@ -80,7 +81,7 @@ async function getCurrentSolPrice(){ } -async function getCurrentPriceInUSD(tokenAddress){ +export async function getCurrentPriceInUSD(tokenAddress:string){ const priceInSOL = await getCurrentPriceInSOL(tokenAddress); const solPrice = await getCurrentSolPrice(); return priceInSOL * solPrice; @@ -90,8 +91,7 @@ async function getCurrentPriceInUSD(tokenAddress){ async function main(){ // console.log(await getCurrentPriceInSOL("3XTp12PmKMHxB6YkejaGPUjMGBLKRGgzHWgJuVTsBCoP")); // console.log(await getCurrentSolPrice()); - console.log(await getCurrentPriceInUSD("4MBEqrtgabZ9G5EmKm7XTrcknZ1nWg3TrvFHZMrENgrd")); + //console.log(await getCurrentPriceInUSD("4MBEqrtgabZ9G5EmKm7XTrcknZ1nWg3TrvFHZMrENgrd")); + //console.log(await getCurrentPriceInSOL("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr")); } -main(); - -module.exports = {getCurrentPriceInSOL, getCurrentSolPrice, getCurrentPriceInUSD}; \ No newline at end of file +//main(); diff --git a/src/raydium/index.ts b/src/raydium/index.ts new file mode 100644 index 0000000..9a5e521 --- /dev/null +++ b/src/raydium/index.ts @@ -0,0 +1,7 @@ +export * from "./sell_helper"; +export * from "./buy_helper"; +export * from "./raydium_config"; +export * from "./constants"; +export * from "./fetch-price"; +export * from "./Pool"; +export * from "./token-filters"; \ No newline at end of file diff --git a/src/raydium/raydium_config.js b/src/raydium/raydium_config.js deleted file mode 100644 index 13e0e55..0000000 --- a/src/raydium/raydium_config.js +++ /dev/null @@ -1,33 +0,0 @@ -const { - Raydium, - TxVersion, - parseTokenAccountResp, -} = require("@raydium-io/raydium-sdk-v2"); -const { TOKEN_PROGRAM_ID } = require("@solana/spl-token"); -const { - wallet, - connection, - second_connection, - third_connection, -} = require("../helpers/config"); - -const txVersion = TxVersion.V0; -const cluster = "mainnet"; -let raydium = Raydium | null; - -const initSdk = async (params) => { - if (raydium) return raydium; - - raydium = await Raydium.load({ - wallet, - connection, - cluster, - disableFeatureCheck: true, - disableLoadToken: !params?.loadToken, - blockhashCommitment: "finalized", - }); - - return raydium; -}; - -module.exports = { initSdk }; diff --git a/src/raydium/raydium_config.ts b/src/raydium/raydium_config.ts new file mode 100644 index 0000000..fff4f39 --- /dev/null +++ b/src/raydium/raydium_config.ts @@ -0,0 +1,22 @@ +import { + Raydium, + TxVersion, + parseTokenAccountResp, +} from "@raydium-io/raydium-sdk-v2"; +import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; +import { wallet, connection } from "../helpers/config"; + +const txVersion = TxVersion.V0; +const cluster = "mainnet"; +export const initSdk = async () => { + + const raydium = await Raydium.load({ + owner: wallet, + connection: connection, + cluster: cluster, + disableFeatureCheck: true, + disableLoadToken: true, + blockhashCommitment: "confirmed", + }); + return raydium; +}; diff --git a/src/raydium/sell.js b/src/raydium/sell.ts similarity index 65% rename from src/raydium/sell.js rename to src/raydium/sell.ts index 30b5c9e..a4190d0 100644 --- a/src/raydium/sell.js +++ b/src/raydium/sell.ts @@ -1,33 +1,35 @@ -const { swap } = require("./Pool/swap.js"); -const { program } = require("commander"); -const { loadOrCreateKeypair_wallet } = require("../helpers/util.js"); -const { wallet } = require("../helpers/config.js"); +import { swap } from "./Pool/swap"; +import { program } from "commander"; +import { loadOrCreateKeypair_wallet } from "../helpers/util"; +import { wallet } from "../helpers/config"; +import { Keypair } from "@solana/web3.js"; +import { logger } from "../helpers/logger"; -let payer_keypair = null, - token_address = null, - percentage = null, +let payer_keypair:any = null, + token_address:any = null, + percentage:any = null, cluster = null; program .option("--payer ", "Specify the path to the secret key") - .option("--token_address ", "Specify the token address") + .option("--token ", "Specify the token address") .option("--percentage ", "Specify the percentage") .option("--cluster ", "Specify the cluster") .option("-h, --help", "display help for command") - .action((options) => { + .action((options:any) => { if (options.help) { - console.log( - "node sell --payer --token_address --percentage --cluster " + logger.info( + "ts-node sell --token --percentage " ); process.exit(0); } - if (!options.token_address || !options.percentage || !options.cluster) { + if (!options.token || !options.percentage) { console.error("❌ Missing required options"); process.exit(1); } if (options.payer) { payer_keypair = options.payer; } - token_address = options.token_address; + token_address = options.token; percentage = options.percentage; cluster = options.cluster; }); @@ -42,10 +44,10 @@ program.parse(); * @param {string} payer - The payer address for the transaction. * @returns {Promise} - A promise that resolves when the swap transaction is completed. */ -async function sell(side, address, sell_percentage, payer) { +export async function sell(side:string, address:string, sell_percentage:number, payer:Keypair) { await swap(side, address, -1, sell_percentage, payer, "trade"); } -async function main() { +export async function main() { let payer_wallet = null; if (payer_keypair !== null) { payer_wallet = await loadOrCreateKeypair_wallet(payer_keypair); // specified wallet by user in command diff --git a/src/raydium/sell_helper.js b/src/raydium/sell_helper.ts similarity index 68% rename from src/raydium/sell_helper.js rename to src/raydium/sell_helper.ts index 4d54967..59b8306 100644 --- a/src/raydium/sell_helper.js +++ b/src/raydium/sell_helper.ts @@ -1,4 +1,5 @@ -const { swap } = require("./Pool/swap"); +import { Keypair } from "@solana/web3.js"; +import { swap } from "./Pool/swap"; /** * Sells a specified percentage of a token. @@ -8,10 +9,10 @@ const { swap } = require("./Pool/swap"); * @param {string} payer - The payer of the transaction. * @returns {Promise} - A promise that resolves when the sell operation is complete. */ -async function sell(side, address, sell_percentage, payer) { +export async function sell(side:string, address:string, sell_percentage:number, payer:Keypair) { await swap(side, address, -1, sell_percentage, payer, "trade"); } -async function get_sell_transaction(side, tokenAddr, payer_wallet) { +export async function get_sell_transaction(side:string, tokenAddr:string, payer_wallet:Keypair) { const innerTransaction = await swap( side, tokenAddr, @@ -22,4 +23,3 @@ async function get_sell_transaction(side, tokenAddr, payer_wallet) { ); return innerTransaction; } -module.exports = { sell, get_sell_transaction }; diff --git a/src/raydium/token-filters/index.ts b/src/raydium/token-filters/index.ts new file mode 100644 index 0000000..c26d446 --- /dev/null +++ b/src/raydium/token-filters/index.ts @@ -0,0 +1,4 @@ +export * from "./lp-burn"; +export * from "./marketcap"; +export * from "./pool-sol"; +export * from "./volume"; \ No newline at end of file diff --git a/src/raydium/token-filters/lp-burn.js b/src/raydium/token-filters/lp-burn.ts similarity index 53% rename from src/raydium/token-filters/lp-burn.js rename to src/raydium/token-filters/lp-burn.ts index 5e91971..dd51b92 100644 --- a/src/raydium/token-filters/lp-burn.js +++ b/src/raydium/token-filters/lp-burn.ts @@ -1,14 +1,13 @@ -const { initSdk } = require("../raydium_config"); -const Decimal = require("decimal.js"); -const { wsol } = require("../constants"); -const { connection } = require("../../helpers/config"); -const { PublicKey } = require("@solana/web3.js"); -const { fetchAMMPoolId } = require("../Pool/fetch_pool"); -const { getDecimals } = require("../../helpers/util"); +import { initSdk } from "../raydium_config"; +import Decimal from "decimal.js"; +import { connection } from "../../helpers/config"; +import { PublicKey } from "@solana/web3.js"; +import { fetchAMMPoolId } from "../Pool/fetch_pool"; +import { getDecimals } from "../../helpers/util"; let sdkCache = { sdk: null, expiry: 0 }; -async function getLPBurnPercentage(tokenAddress) { +export async function getLPBurnPercentage(tokenAddress:string) { try { - let raydium = null; + let raydium:any = null; if (sdkCache.sdk) { raydium = sdkCache.sdk; } else { @@ -20,10 +19,10 @@ async function getLPBurnPercentage(tokenAddress) { const poolInfo = res[poolId]; const lpDecimals = await getDecimals(poolInfo.lpMint); const lpMint = poolInfo.lpMint.toString(); - const lpReserve = new Decimal(poolInfo.lpReserve.toString()).div( + const lpReserve:any = new Decimal(poolInfo.lpReserve.toString()).div( new Decimal(10).pow(lpDecimals) ); - const lpCurrentSupply = await connection.getTokenSupply( + const lpCurrentSupply:any = await connection.getTokenSupply( new PublicKey(lpMint) ); @@ -35,6 +34,5 @@ async function getLPBurnPercentage(tokenAddress) { console.log("Error getting current SOL in pool: ", e); } } -getLPBurnPercentage("3XTp12PmKMHxB6YkejaGPUjMGBLKRGgzHWgJuVTsBCoP"); +//getLPBurnPercentage("3XTp12PmKMHxB6YkejaGPUjMGBLKRGgzHWgJuVTsBCoP"); -module.exports = { getLPBurnPercentage }; diff --git a/src/jupiter/dca.js b/src/raydium/token-filters/maker-count.ts similarity index 100% rename from src/jupiter/dca.js rename to src/raydium/token-filters/maker-count.ts diff --git a/src/raydium/token-filters/marketcap.js b/src/raydium/token-filters/marketcap.ts similarity index 60% rename from src/raydium/token-filters/marketcap.js rename to src/raydium/token-filters/marketcap.ts index 96dd639..98e715b 100644 --- a/src/raydium/token-filters/marketcap.js +++ b/src/raydium/token-filters/marketcap.ts @@ -1,30 +1,14 @@ -const { initSdk } = require("../raydium_config"); -const Decimal = require("decimal.js"); -const { fetchAMMPoolId } = require("../Pool/fetch_pool"); -const { wsol } = require("../constants"); -const { connection } = require("../../helpers/config"); -const { PublicKey } = require("@solana/web3.js"); +import { initSdk } from "../raydium_config"; +import Decimal from "decimal.js"; +import { fetchAMMPoolId } from "../Pool/fetch_pool"; +import { wsol } from "../constants"; +import { connection } from "../../helpers/config"; +import { PublicKey } from "@solana/web3.js"; +import { getCurrentSolPrice } from "../fetch-price"; let sdkCache = { sdk: null, expiry: 0 }; -async function getCurrentSolPrice() { +export async function getCurrentMarketCap(tokenAddress:string) { try { - let raydium = null; - if (sdkCache.sdk) { - raydium = sdkCache.sdk; - } else { - raydium = await initSdk(); - sdkCache.sdk = raydium; - } - const sol_usdc = "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2"; - const res = await raydium.liquidity.getRpcPoolInfos([sol_usdc]); - const poolInfo = res[sol_usdc]; - return poolInfo.poolPrice; - } catch (e) { - console.log("Error getting current SOL price: ", e); - } -} -async function getCurrentMarketCap(tokenAddress) { - try { - let raydium = null; + let raydium:any = null; if (sdkCache.sdk) { raydium = sdkCache.sdk; } else { @@ -63,16 +47,16 @@ async function getCurrentMarketCap(tokenAddress) { priceInSOL = poolInfo.poolPrice; } const priceInUSD = priceInSOL * (await getCurrentSolPrice()); + const supply:any = await connection.getTokenSupply(new PublicKey(tokenAddress)); const mc = priceInUSD * - (await connection.getTokenSupply(new PublicKey(tokenAddress))).value - .uiAmount; + supply.value.uiAmount; + console.log(`Current market cap of ${tokenAddress} is: ${mc}`); return mc; } catch (e) { console.log(`Error when getting current market cap of ${tokenAddress} `, e); } } -//getCurrentMarketCap("3XTp12PmKMHxB6YkejaGPUjMGBLKRGgzHWgJuVTsBCoP"); +//getCurrentMarketCap("7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"); -module.exports = { getCurrentMarketCap, getCurrentSolPrice }; diff --git a/src/raydium/token-filters/pool-sol.js b/src/raydium/token-filters/pool-sol.ts similarity index 82% rename from src/raydium/token-filters/pool-sol.js rename to src/raydium/token-filters/pool-sol.ts index 8da004a..5661f40 100644 --- a/src/raydium/token-filters/pool-sol.js +++ b/src/raydium/token-filters/pool-sol.ts @@ -1,12 +1,12 @@ -const { initSdk } = require("../raydium_config"); -const Decimal = require("decimal.js"); -const { fetchAMMPoolId } = require("../Pool/fetch_pool"); -const { wsol } = require("../constants"); +import { initSdk } from "../raydium_config"; +import Decimal from "decimal.js"; +import { fetchAMMPoolId } from "../Pool/fetch_pool"; +import { wsol } from "../constants"; let sdkCache = { sdk: null, expiry: 0 }; -async function getCurrentSolInPool(tokenAddress) { +export async function getCurrentSolInPool(tokenAddress:string) { try { - let raydium = null; + let raydium:any = null; if (sdkCache.sdk) { raydium = sdkCache.sdk; } else { @@ -48,5 +48,4 @@ async function getCurrentSolInPool(tokenAddress) { } } -//getCurrentSolInPool("3XTp12PmKMHxB6YkejaGPUjMGBLKRGgzHWgJuVTsBCoP") -module.exports = { getCurrentSolInPool }; +//getCurrentSolInPool("3XTp12PmKMHxB6YkejaGPUjMGBLKRGgzHWgJuVTsBCoP"); diff --git a/src/jupiter/limit_order.js b/src/raydium/token-filters/tx-count.ts similarity index 100% rename from src/jupiter/limit_order.js rename to src/raydium/token-filters/tx-count.ts diff --git a/src/raydium/token-filters/volume.js b/src/raydium/token-filters/volume.ts similarity index 85% rename from src/raydium/token-filters/volume.js rename to src/raydium/token-filters/volume.ts index 56533b0..66b91dc 100644 --- a/src/raydium/token-filters/volume.js +++ b/src/raydium/token-filters/volume.ts @@ -1,6 +1,6 @@ const fetch = require('node-fetch'); -const {fetchAMMPoolId} = require("../Pool/fetch_pool") -async function getDayVolume(tokenAddress){ +import {fetchAMMPoolId} from "../Pool/fetch_pool"; +export async function getDayVolume(tokenAddress:string){ try{ const poolId = await fetchAMMPoolId(tokenAddress); let response = await( await fetch(`https://api-v3.raydium.io/pools/info/ids?ids=${poolId}`)).json(); @@ -11,6 +11,7 @@ async function getDayVolume(tokenAddress){ response = await( await fetch(`https://api-v3.raydium.io/pools/info/ids?ids=${poolId}`)).json(); if(response.success) dayVolume = response.data[0].day.volume } + console.log(dayVolume) if(dayVolume !== 0) return dayVolume; else{ dayVolume = response.data[0].day.volume @@ -20,7 +21,7 @@ async function getDayVolume(tokenAddress){ console.log("Error getting 24h volume: ", e) } } -async function getWeekVolume(tokenAddress){ +export async function getWeekVolume(tokenAddress:string){ try{ const poolId = await fetchAMMPoolId(tokenAddress); let response = await( await fetch(`https://api-v3.raydium.io/pools/info/ids?ids=${poolId}`)).json(); @@ -30,6 +31,7 @@ async function getWeekVolume(tokenAddress){ response = await( await fetch(`https://api-v3.raydium.io/pools/info/ids?ids=${poolId}`)).json(); if(response.success) weekVolume = response.data[0].week.volume } + console.log(weekVolume); if(weekVolume !== 0) return weekVolume; else{ weekVolume = response.data[0].week.volume @@ -41,7 +43,7 @@ async function getWeekVolume(tokenAddress){ } } -async function getMonthVolume(tokenAddress){ +export async function getMonthVolume(tokenAddress:string){ try{ const poolId = await fetchAMMPoolId(tokenAddress); let response = await( await fetch(`https://api-v3.raydium.io/pools/info/ids?ids=${poolId}`)).json(); @@ -51,6 +53,7 @@ async function getMonthVolume(tokenAddress){ response = await( await fetch(`https://api-v3.raydium.io/pools/info/ids?ids=${poolId}`)).json(); if(response.success) monthVolume = response.data[0].month.volume } + console.log(monthVolume); if(monthVolume !== 0) return monthVolume; else{ monthVolume = response.data[0].month.volume @@ -61,6 +64,4 @@ async function getMonthVolume(tokenAddress){ } } -//getDayVolume("3XTp12PmKMHxB6YkejaGPUjMGBLKRGgzHWgJuVTsBCoP") - -module.exports = {getDayVolume, getMonthVolume, getWeekVolume} \ No newline at end of file +//getMonthVolume("GiMsMKgMq3cX3PJwPZCxh6CsrsVTc5P975eeAMPLpump"); \ No newline at end of file diff --git a/src/raydium/token-filters/maker-count.js b/src/token/README.md similarity index 100% rename from src/raydium/token-filters/maker-count.js rename to src/token/README.md diff --git a/src/Token/burn.js b/src/token/burn.ts similarity index 82% rename from src/Token/burn.js rename to src/token/burn.ts index 69d2f4e..72ae39a 100644 --- a/src/Token/burn.js +++ b/src/token/burn.ts @@ -1,28 +1,29 @@ -const fs = require("fs"); -const { +import fs from "fs"; +import { Connection, PublicKey, Keypair, TransactionMessage, VersionedTransaction, -} = require("@solana/web3.js"); -const { program } = require("commander"); -const { +} from "@solana/web3.js"; +import { program } from "commander"; +import { getAccount, getMint, getAssociatedTokenAddress, createBurnCheckedInstruction, -} = require("@solana/spl-token"); -const { connection, dev_connection } = require("../helpers/config"); -const { wallet } = require("../helpers/config"); +} from "@solana/spl-token"; +import { connection, dev_connection } from "../helpers/config"; +import { wallet } from "../helpers/config"; +import { logger } from "../helpers/logger"; let payer_keypair_path = null, - token_address = null, - percentage = null, + token_address:any = null, + percentage:any = null, decimals = null, cluster = null, payerKeypair = null, - newConnection = null; + newConnection:any = null; program .option("--payer ", "Specify the path to the secret key") .option("--token_address ", "Specify the token address") @@ -31,8 +32,8 @@ program .option("-h, --help", "display help for command") .action((options) => { if (options.help) { - console.log( - "node burn --payer --token_address --percentage --cluster " + logger.info( + "ts-node burn --payer --token_address --percentage --cluster " ); process.exit(0); } @@ -58,7 +59,7 @@ if (cluster === "devnet") { * @param {string} filepath - The path to the keypair file. * @returns {Uint8Array} - The loaded or created keypair. */ -function loadOrCreateKeypair(filepath) { +export function loadOrCreateKeypair(filepath:string) { try { const keypairStringArr = fs.readFileSync(filepath, { encoding: "utf8", @@ -73,10 +74,10 @@ function loadOrCreateKeypair(filepath) { } /** * Retrieves the token balance for a given token account. - * @param {string} tokenAccount - The token account address. + * @param {PublicKey} tokenAccount - The token account address. * @returns {number} The token balance. */ -async function getTokenBalance(tokenAccount) { +export async function getTokenBalance(tokenAccount:PublicKey) { const info = await getAccount(newConnection, tokenAccount); // token account right here const amount = Number(info.amount); const mint = await getMint(newConnection, info.mint); @@ -87,21 +88,21 @@ async function getTokenBalance(tokenAccount) { /** * Retrieves the decimal value of a token. - * @param {string} tokenAddress - The address of the token. + * @param {PublicKey} tokenAddress - The address of the token. * @returns {Promise} The decimal value of the token. */ -async function getTokenDecimal(tokenAddress) { +export async function getTokenDecimal(tokenAddress:PublicKey) { const mint = await getMint(newConnection, tokenAddress); return mint.decimals; } /** * Burns a specified percentage of tokens from a given token address. - * @param {string} tokenAddress - The address of the token to burn. + * @param {PublicKey} tokenAddress - The address of the token to burn. * @param {object} payer - The payer's public key and associated token address. * @param {number} percentage - The percentage of tokens to burn. * @returns {Promise} - A promise that resolves when the burning process is complete. */ -async function burnToken(tokenAddress, payer, percentage) { +export async function burnToken(tokenAddress:PublicKey, payer:Keypair, percentage:number) { try { decimals = await getTokenDecimal(tokenAddress); console.log("Decimals: ", decimals); diff --git a/src/Token/create.js b/src/token/create.ts similarity index 85% rename from src/Token/create.js rename to src/token/create.ts index a777006..0ebcaf1 100644 --- a/src/Token/create.js +++ b/src/token/create.ts @@ -1,50 +1,51 @@ -const { +import { percentAmount, generateSigner, signerIdentity, createSignerFromKeypair, Umi, generatedSignerPayer, -} = require("@metaplex-foundation/umi"); -const { +} from "@metaplex-foundation/umi"; +import { TokenStandard, createAndMint, -} = require("@metaplex-foundation/mpl-token-metadata"); -const { +} from "@metaplex-foundation/mpl-token-metadata"; +import { Metaplex, keypairIdentity, toMetaplexFile, irysStorage, -} = require("@metaplex-foundation/js"); -const { createUmi } = require("@metaplex-foundation/umi-bundle-defaults"); -const { mplCandyMachine } = require("@metaplex-foundation/mpl-candy-machine"); -const { AuthorityType, setAuthority } = require("@solana/spl-token"); -const bs58 = require("bs58"); -const fs = require("fs"); -const { PublicKey, Keypair } = require("@solana/web3.js"); -const { program } = require("commander"); -const { +} from "@metaplex-foundation/js"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { mplCandyMachine } from "@metaplex-foundation/mpl-candy-machine"; +import { AuthorityType, setAuthority } from "@solana/spl-token"; +import bs58 from "bs58"; +import fs from "fs"; +import { PublicKey, Keypair } from "@solana/web3.js"; +import { program } from "commander"; +import { main_endpoint, dev_connection, dev_endpoint, connection, wallet, -} = require("../helpers/config"); +} from "../helpers/config"; +import { logger } from "../helpers/logger"; // info -let payer_keypair_path = null, - symbol = null, - token_name = null, - mintkeypair_path = null, - supply = null, - decimals = null, - metadata_path = null, - image_path = null, - cluster = null, - priority_fee = null, - file_type = null, - newConnection = null, - endpoint = null; +let payer_keypair_path: any = null, + symbol: any = null, + token_name: any = null, + mintkeypair_path:any = null, + supply:any = null, + decimals:any = null, + metadata_path:any = null, + image_path:any = null, + cluster:any = null, + priority_fee:any = null, + file_type:any = null, + newConnection:any = null, + endpoint:any = null; // handle the input value from the user's command line here program @@ -68,8 +69,8 @@ program .option("-h, --help", "display help for command") .action((options) => { if (options.help) { - console.log( - "node create --payer --symbol --token_name --mint --supply --decimals --metadata --image --cluster --priority-fee --file_type " + logger.info( + "ts-node create --payer --symbol --token_name --mint --supply --decimals --metadata --image --cluster --priority-fee --file_type " ); process.exit(0); } @@ -98,7 +99,6 @@ program supply = options.supply; decimals = options.decimals; metadata_path = options.metadata; - image = options.image; cluster = options.cluster; priority_fee = options.priority; file_type = options.file_type; @@ -134,8 +134,8 @@ if (!mintkeypair_path) { } else { mintSecret = loadOrCreateKeypair(mintkeypair_path); } -let payerSecret = null, - PayerWallet = null; +let payerSecret:any = null, + PayerWallet:any = null; // create the Umi object const umi = createUmi(endpoint); //Replace with your RPC Endpoint @@ -169,7 +169,7 @@ umi.use(mplCandyMachine()); * @returns {Keypair} - The loaded or newly created keypair. * @throws {Error} - If there is an error reading or writing the keypair file. */ -async function loadOrCreateKeypair_wallet(filepath) { +async function loadOrCreateKeypair_wallet(filepath:string) { try { const keypairString = fs.readFileSync(filepath, { encoding: "utf8" }); return Keypair.fromSecretKey(Uint8Array.from(JSON.parse(keypairString))); @@ -188,7 +188,7 @@ async function loadOrCreateKeypair_wallet(filepath) { * @param {string} filepath - The path to the keypair file. * @returns {Uint8Array} - The loaded or created keypair. */ -function loadOrCreateKeypair(filepath) { +function loadOrCreateKeypair(filepath:string) { try { const keypairStringArr = fs.readFileSync(filepath, { encoding: "utf8", @@ -208,7 +208,7 @@ function loadOrCreateKeypair(filepath) { * @param {string} owner - The owner address. * @returns {Promise} - A promise that resolves when the freeze authority is disabled. */ -async function revokeFreeze(mint, payer, owner) { +export async function revokeFreeze(mint:any, payer:any, owner:any) { console.log("Disabling the freeze authority..."); await setAuthority( newConnection, @@ -229,7 +229,7 @@ async function revokeFreeze(mint, payer, owner) { * @param {string} owner - The owner address. * @returns {Promise} - A promise that resolves when the mint authority is revoked. */ -async function revokeMint(mint, payer, owner) { +export async function revokeMint(mint:any, payer:any, owner:any) { console.log("Disabling the mint authority..."); await setAuthority( newConnection, @@ -248,7 +248,7 @@ async function revokeMint(mint, payer, owner) { * @param {string} walletPath - The path to the wallet. * @returns {Promise} The Metaplex instance. */ -async function getMetaplex(walletPath) { +export async function getMetaplex(walletPath:string) { let WALLET = null; if (walletPath === null) WALLET = wallet; else WALLET = await loadOrCreateKeypair_wallet(walletPath); @@ -276,15 +276,15 @@ async function getMetaplex(walletPath) { * @param {Metaplex} METAPLEX - The Metaplex instance used for uploading metadata. * @returns {Promise} - The URI of the uploaded metadata. */ -async function uploadMetadata( - imgUri, - imgType, - nftName, - symbol, - description, - website, - twitter, - telegram, +export async function uploadMetadata( + imgUri:any, + imgType:any, + nftName:any, + symbol:any, + description:any, + website:any, + twitter:any, + telegram:any, METAPLEX = Metaplex.make(newConnection) ) { const uri = await METAPLEX.nfts().uploadMetadata({ @@ -318,9 +318,9 @@ async function uploadMetadata( * @param {Metaplex} METAPLEX - The Metaplex instance. * @returns {Promise} The image URI. */ -async function uploadImage( - filePath, - fileName, +export async function uploadImage( + filePath:any, + fileName:any, METAPLEX = Metaplex.make(newConnection) ) { const imgBuffer = fs.readFileSync(filePath); @@ -346,20 +346,20 @@ async function uploadImage( * @param {object} mintSigner - The mint signer object. * @returns {Promise} A promise that resolves when the meme token is created. */ -async function createMeme( - name, - symbol, - filetype, - description, - website, - twitter, - telegram, - ownerWallet, - max_supply, - decimals, - imgURI, - uri, - mintSigner +export async function createMeme( + name:any, + symbol:any, + filetype:any, + description:any, + website:any, + twitter:any, + telegram:any, + ownerWallet:any, + max_supply:any, + decimals:any, + imgURI:any, + uri:any, + mintSigner:any ) { const CONFIG = { uploadPath: image_path, @@ -448,15 +448,15 @@ async function createMeme( * @param {number} decimals - The number of decimals for the token. * @returns {Promise} - A promise that resolves when the token is successfully minted. */ -async function mint_token( - umi, - mint, - name, - symbol, - uri, - owner, - amount, - decimals +export async function mint_token( + umi:any, + mint:any, + name:any, + symbol:any, + uri:any, + owner:any, + amount:any, + decimals:any ) { try { console.log(`minting token ${name}, CA: ${mint.publicKey}`); @@ -502,4 +502,3 @@ async function main() { } main(); -module.exports = { loadOrCreateKeypair }; diff --git a/src/token/index.ts b/src/token/index.ts new file mode 100644 index 0000000..bd81272 --- /dev/null +++ b/src/token/index.ts @@ -0,0 +1,2 @@ +export * from "./burn"; +export * from "./create"; \ No newline at end of file diff --git a/src/Token/revoke_authority.js b/src/token/revoke_authority.ts similarity index 82% rename from src/Token/revoke_authority.js rename to src/token/revoke_authority.ts index 3dab772..5311394 100644 --- a/src/Token/revoke_authority.js +++ b/src/token/revoke_authority.ts @@ -1,17 +1,18 @@ -const { AuthorityType, setAuthority } = require("@solana/spl-token"); -const bs58 = require("bs58"); -const fs = require("fs"); -const { Connection, PublicKey, Keypair } = require("@solana/web3.js"); -const { program } = require("commander"); -const { connection, dev_connection } = require("../helpers/config"); -const { loadOrCreateKeypair_wallet } = require("../helpers/util"); -const { wallet } = require("../helpers/config"); +import { AuthorityType, setAuthority } from "@solana/spl-token"; +import bs58 from "bs58" ; +import fs from "fs"; +import { Connection, PublicKey, Keypair } from "@solana/web3.js"; +import { program } from "commander"; +import { connection, dev_connection } from "../helpers/config"; +import { loadOrCreateKeypair_wallet } from "../helpers/util"; +import { wallet } from "../helpers/config"; -let newConnection = null; -let payer_keypair_path = null, - token_address = null, +let newConnection:any = null; +let payer_keypair_path:any = null, + token_address:any = null, mint = false, - freeze = false; + freeze = false, + cluster:any = null; program .option("--payer ", "Specify the path to the secret key") .option("--token_address ", "Specify the token address") @@ -59,7 +60,7 @@ program.parse(); * @param {string} owner - The owner address. * @returns {Promise} - A promise that resolves when the mint authority is revoked. */ -async function revokeMint(mint, payer, owner) { +export async function revokeMint(mint:any, payer:any, owner:any) { console.log("Disabling the mint authority..."); await setAuthority( newConnection, @@ -81,7 +82,7 @@ async function revokeMint(mint, payer, owner) { * @param {string} owner - The owner address. * @returns {Promise} - A promise that resolves when the freeze authority is disabled. */ -async function revokeFreeze(mint, payer, owner) { +export async function revokeFreeze(mint:any, payer:any, owner:any) { console.log("Disabling the freeze authority..."); await setAuthority( newConnection, @@ -103,7 +104,7 @@ async function revokeFreeze(mint, payer, owner) { * @function revokeAuthority * @returns {Promise} */ -async function revokeAuthority() { +export async function revokeAuthority() { // let payer_wallet = null; // if (payer_keypair !== null) { // payer_wallet = await loadOrCreateKeypair_wallet(payer_keypair); diff --git a/src/Token/zk-compression/compressed-token/createAndMint.js b/src/token/zk-compression/compressed-token/createAndMint.ts similarity index 83% rename from src/Token/zk-compression/compressed-token/createAndMint.js rename to src/token/zk-compression/compressed-token/createAndMint.ts index 8e60457..06e38c3 100644 --- a/src/Token/zk-compression/compressed-token/createAndMint.js +++ b/src/token/zk-compression/compressed-token/createAndMint.ts @@ -1,24 +1,22 @@ -const { +import { LightSystemProgram, Rpc, confirmTx, createRpc, -} = require("@lightprotocol/stateless.js"); -const { +} from "@lightprotocol/stateless.js"; +import { createMint, mintTo, transfer, - compressToken, -} = require("@lightprotocol/compressed-token"); -const { Keypair } = require("@solana/web3.js"); -const { req } = require("pino-std-serializers"); +} from "@lightprotocol/compressed-token"; +import { Keypair } from "@solana/web3.js"; const payer = Keypair.generate(); const tokenRecipient = Keypair.generate(); const connection = createRpc(); -async function main() { +export async function main() { console.log("Payer: ", payer.publicKey.toBase58()); console.log("Token recipient: ", tokenRecipient.publicKey.toBase58()); await confirmTx( diff --git a/src/Token/zk-compression/connect-testnet.js b/src/token/zk-compression/connect-testnet.ts similarity index 57% rename from src/Token/zk-compression/connect-testnet.js rename to src/token/zk-compression/connect-testnet.ts index 510bc9b..8790c72 100644 --- a/src/Token/zk-compression/connect-testnet.js +++ b/src/token/zk-compression/connect-testnet.ts @@ -1,5 +1,5 @@ -const stateless = require("@lightprotocol/stateless.js"); -const connection = stateless.createRpc( +import stateless from "@lightprotocol/stateless.js"; +const newConnection:any = stateless.createRpc( "https://zk-testnet.helius.dev:8899", // rpc "https://zk-testnet.helius.dev:8784", // zk compression rpc "https://zk-testnet.helius.dev:3001" // prover @@ -9,17 +9,17 @@ const connection = stateless.createRpc( * Main function that retrieves various information from the Solana network. * @returns {Promise} A promise that resolves when the function completes. */ -async function main() { - let slot = await connection.getSlot(); +export async function main() { + let slot = await newConnection.getSlot(); console.log("Slot: ", slot); - let health = await connection.getIndexerHealth(slot); + let health = await newConnection.getIndexerHealth(slot); console.log("health: ", health); - let leaderSchedule = await connection.getLeaderSchedule(); + let leaderSchedule = await newConnection.getLeaderSchedule(); console.log("Current leader schedule: ", leaderSchedule); - let latestNonVotingSig = await connection.getLatestNonVotingSignatures(); + let latestNonVotingSig = await newConnection.getLatestNonVotingSignatures(); console.log(latestNonVotingSig); } main(); diff --git a/src/trading_dev/ProfitAndLoss/bought-tokens.json b/src/trading_dev/ProfitAndLoss/bought-tokens.json new file mode 100644 index 0000000..544b7b4 --- /dev/null +++ b/src/trading_dev/ProfitAndLoss/bought-tokens.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/src/trading_dev/ProfitAndLoss/constants.ts b/src/trading_dev/ProfitAndLoss/constants.ts new file mode 100644 index 0000000..a26ca62 --- /dev/null +++ b/src/trading_dev/ProfitAndLoss/constants.ts @@ -0,0 +1,38 @@ +import { logger, retrieveEnvVariable } from "../../utils"; +import { + Currency, + Token, + TOKEN_PROGRAM_ID, + } from "@raydium-io/raydium-sdk"; +import { PublicKey } from "@solana/web3.js"; +import path from "path"; +export const path_To_bought_tokens = path.join(__dirname, "bought_tokens.json"); +export const tp = retrieveEnvVariable("TAKE_PROFIT", logger); +export const sl = retrieveEnvVariable("STOP_LOSS", logger); +export const order_size = retrieveEnvVariable("ORDER_SIZE", logger); +export const buyin_percentage = retrieveEnvVariable("BUYIN_PERCENTAGE", logger); +export const wsol = "So11111111111111111111111111111111111111112" +export const usdc = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" +export const quoteToken = [ + usdc, // USDC + "SOL", // SOL + "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", // USDT + wsol, // WSOL +]; +export const DEFAULT_TOKEN = { + SOL: new Currency(9, "SOL", "SOL"), + WSOL: new Token( + TOKEN_PROGRAM_ID, + new PublicKey("So11111111111111111111111111111111111111112"), + 9, + "WSOL", + "WSOL" + ), + USDC: new Token( + TOKEN_PROGRAM_ID, + new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), + 6, + "USDC", + "USDC" + ), +}; \ No newline at end of file diff --git a/src/trading_dev/ProfitAndLoss/index.ts b/src/trading_dev/ProfitAndLoss/index.ts new file mode 100644 index 0000000..a5db5b4 --- /dev/null +++ b/src/trading_dev/ProfitAndLoss/index.ts @@ -0,0 +1,5 @@ +export * from "./stop-loss"; +export * from "./take-profit"; +export * from "./sell-checker"; +export * from "./constants"; +export * from "./utils"; \ No newline at end of file diff --git a/src/trading_dev/ProfitAndLoss/sell-checker.ts b/src/trading_dev/ProfitAndLoss/sell-checker.ts new file mode 100644 index 0000000..c65f331 --- /dev/null +++ b/src/trading_dev/ProfitAndLoss/sell-checker.ts @@ -0,0 +1,73 @@ +import { deleteBoughtTokens, getSPLTokenBalance, loadBoughtTokens, logExitPrice, readBoughtTokens, writeBoughtTokens} from "./utils"; +import {checkStopLoss } from "./stop-loss" +import { checkTakeProfit } from "./take-profit"; +import {retriveWalletState, writeLineToLogFile} from "./utils"; +import { logger, retrieveEnvVariable } from "../../utils"; +import {wsol, path_To_bought_tokens} from "./constants" +import {connection, wallet} from "../../helpers/config"; +import { sell } from "../../raydium/sell_helper"; +import Decimal from "decimal.js"; +import { PublicKey, SYSVAR_EPOCH_SCHEDULE_PUBKEY } from "@solana/web3.js"; +let boughtTokens:string[] = [], currentOurWalletState = {}; + +async function checkIsPricesHitTPorSL(){ + + + try{ + if(boughtTokens.length > 0){ + + for(let i=0; i0){ // check if already bought + + if(await checkTakeProfit(token, path_To_bought_tokens)){ + logger.info(`Take profit price reached for token ${token}`); + writeLineToLogFile(`Take profit price reached for token ${token}`); + const balance = await getSPLTokenBalance(connection, new PublicKey(token), wallet.publicKey); // check if still holding the token + if(balance > 0) { + logger.info(`selling ${token}...`); + writeLineToLogFile(`selling ${token}...`); + sell("sell", token, 100, wallet); // sell all + + } + continue; + } + if(await checkStopLoss(token, path_To_bought_tokens)){ + logger.info(`Stop loss price reached for token ${token}`); + writeLineToLogFile(`Stop loss price reached for token ${token}`); + const balance = await getSPLTokenBalance(connection, new PublicKey(token), wallet.publicKey); // check if still holding the token + if(balance > 0) { + logger.info(`selling ${token}...`); + writeLineToLogFile(`selling ${token}...`); + sell("sell", token, 100, wallet); // sell all + + } + } + + + } + } + } + }catch(err){ + console.log(err); + + } + +} +export async function main() { + logger.info("Starting sell..."); + while (true) { + boughtTokens = await loadBoughtTokens(path_To_bought_tokens); + + // Run both check functions concurrently + await Promise.all([ + checkIsPricesHitTPorSL().then(() => new Promise(resolve => setTimeout(resolve, 3000))), + ]); + + // If you want a consistent delay after both checks are complete, you can add it here + // await new Promise(resolve => setTimeout(resolve, 1000)); + } +} +main(); \ No newline at end of file diff --git a/src/trading_dev/ProfitAndLoss/stop-loss.ts b/src/trading_dev/ProfitAndLoss/stop-loss.ts new file mode 100644 index 0000000..f5a17fa --- /dev/null +++ b/src/trading_dev/ProfitAndLoss/stop-loss.ts @@ -0,0 +1,58 @@ +import {sl} from "./constants" +import { readBoughtTokens, writeBoughtTokens, getCurrentPriceRaydium } from "./utils"; +import Decimal from 'decimal.js'; +/** + * Sets the stop loss price for a given token. + * @param {string} tokenAddress - The address of the token. + * @returns {Promise} - A promise that resolves when the stop loss price is set. + */ +export async function setStopLoss_Price(tokenAddress: string, path_To_bought_tokens:string){ + try{ + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + const our_entry_price = tokenObj.entry_price; + const sl_price = our_entry_price * (1 - parseFloat(sl)); + tokenObj.sl_price = sl_price; + await writeBoughtTokens(tokenAddress, tokenObj, path_To_bought_tokens); + }catch(err){ + console.error("Error setting stop loss: ", err); + } +} +/** + * Retrieves the stop loss price for a given token address. + * @param {string} tokenAddress - The address of the token. + * @returns {number} - The stop loss price of the token. + */ +export async function getStopLoss_Price(tokenAddress: string, path_To_bought_tokens:string){ + try{ + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + return tokenObj.sl_price; + }catch(err){ + console.error("Error getting stop loss price: ", err); + } +} +/** + * Checks if the current price of a token is below or equal to the stop loss price. + * @param {string} tokenAddress - The address of the token to check. + * @returns {Promise} - A promise that resolves to `true` if the current price is below or equal to the stop loss price, otherwise `false`. + */ +export async function checkStopLoss(tokenAddress: string, path_To_bought_tokens:string): Promise{ + let res = false; + try{ + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + const current_price = new Decimal(await getCurrentPriceRaydium(tokenAddress, path_To_bought_tokens)); + const stop_loss_price = new Decimal(tokenObj.sl_price); + if (stop_loss_price.greaterThanOrEqualTo(current_price)) { + res = true; + } + }catch(e:any){ + console.error("Error checking stop loss: ", e); + if (e.response && e.response.status === 502) { + console.error('Bad Gateway: The server received an invalid response from the upstream server.'); + } + if (e.response && e.response.status === 504) { + console.error('Gateway Timeout: The server did not receive a timely response.'); + } + } + return res; +} + diff --git a/src/trading_dev/ProfitAndLoss/take-profit.ts b/src/trading_dev/ProfitAndLoss/take-profit.ts new file mode 100644 index 0000000..1280eef --- /dev/null +++ b/src/trading_dev/ProfitAndLoss/take-profit.ts @@ -0,0 +1,63 @@ +import {tp} from "./constants" +import { readBoughtTokens, writeBoughtTokens, getCurrentPriceRaydium } from "./utils"; +import Decimal from 'decimal.js'; +/** + * Sets the take profit price for a given token address. + * @param {string} tokenAddress - The address of the token. + * @returns {Promise} - A promise that resolves when the take profit price is set. + */ +export async function setTakeProfit_Price(tokenAddress: string, path_To_bought_tokens:string){ + try{ + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + const our_entry_price = tokenObj.entry_price; + const tp_price = our_entry_price * (1 + parseFloat(tp)); + tokenObj.tp_price = tp_price; + await writeBoughtTokens(tokenAddress, tokenObj, path_To_bought_tokens); + }catch(err){ + console.error("Error setting take profit: ", err); + } +} + +/** + * Retrieves the take profit price for a given token address. + * + * @param {string} tokenAddress - The address of the token. + * @returns {Promise} - The take profit price of the token. + * @throws {Error} - If there is an error retrieving the take profit price. + */ +export async function getTakeProfit_Price(tokenAddress: string, path_To_bought_tokens:string){ + try{ + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + return tokenObj.tp_price; + }catch(err){ + console.error("Error getting take profit price: ", err); + } +} + +/** + * Checks if the current price of a token is greater than or equal to the take profit price. + * @param {string} tokenAddress - The address of the token to check. + * @returns {Promise} - A promise that resolves to true if the current price is greater than or equal to the take profit price, false otherwise. + */ +export async function checkTakeProfit(tokenAddress: string, path_To_bought_tokens:string): Promise{ + let res = false; + try{ + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + const current_price = new Decimal(await getCurrentPriceRaydium(tokenAddress, path_To_bought_tokens)).toFixed(20); + const take_profit_price = new Decimal(tokenObj.tp_price).toFixed(20); + + if(current_price > take_profit_price){ + console.log(`Take profit price reached for token ${tokenAddress}`); + res = true; + } + }catch(e:any){ + console.error("Error checking take profit: ", e); + if (e.response && e.response.status === 502) { + console.error('Bad Gateway: The server received an invalid response from the upstream server.'); + } + if (e.response && e.response.status === 504) { + console.error('Gateway Timeout: The server did not receive a timely response.'); + } + } + return res; +} diff --git a/src/trading_dev/ProfitAndLoss/utils.ts b/src/trading_dev/ProfitAndLoss/utils.ts new file mode 100644 index 0000000..490965d --- /dev/null +++ b/src/trading_dev/ProfitAndLoss/utils.ts @@ -0,0 +1,276 @@ +import * as fs from 'fs/promises'; +import fetch from 'cross-fetch'; +import {sl, tp, wsol, order_size, buyin_percentage} from "./constants" +import Decimal from 'decimal.js'; +import { Connection, PublicKey } from "@solana/web3.js"; +import {connection} from "../../helpers/config"; +import {getCurrentMarketCap, getDayVolume, getCurrentSolInPool } from "../../raydium/token-filters"; +import {initSdk} from "../../raydium/raydium_config" +import { getAssociatedTokenAddressSync, TOKEN_PROGRAM_ID } from '@solana/spl-token'; +import {fetchAMMPoolId} from "../../raydium/Pool/fetch_pool" +import {logger} from "../../utils" +import path from "path"; +let sdkCache = {sdk: null, expiry: 0} +const log_path = path.join(__dirname, "info.log"); +export async function retriveWalletState(wallet_address: string) { + try{ + const filters = [ + { + dataSize: 165, //size of account (bytes) + }, + { + memcmp: { + offset: 32, //location of our query in the account (bytes) + bytes: wallet_address, //our search criteria, a base58 encoded string + }, + }, + ]; + const accounts = await connection.getParsedProgramAccounts( + TOKEN_PROGRAM_ID, //new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") + { filters: filters } + ); + let results:any = {}; + const solBalance = await connection.getBalance(new PublicKey(wallet_address)); + accounts.forEach((account:any, i:any) => { + //Parse the account data + const parsedAccountInfo = account.account.data; + const mintAddress = parsedAccountInfo["parsed"]["info"]["mint"]; + const tokenBalance = + parsedAccountInfo["parsed"]["info"]["tokenAmount"]["uiAmount"]; + results[mintAddress] = tokenBalance; + }); + results["SOL"] = solBalance / 10 ** 9; + return results || {}; + }catch(e){ + console.log(e) + } + return {}; + } + +export async function getSPLTokenBalance(connection:Connection, tokenAccount:PublicKey, payerPubKey:PublicKey) { + try{ + const address = getAssociatedTokenAddressSync(tokenAccount, payerPubKey); + const info = await connection.getTokenAccountBalance(address, "finalized"); + if (info.value.uiAmount == null) throw new Error("No balance found"); + return info.value.uiAmount; + }catch(err:any){ + logger.error(`Errr when checking token balance...`) + } + return 0; +} +export async function loadBoughtTokens(path_To_bought_tokens:string) { + try { + let boughtTokens:any = []; + const data = await fs.readFile(path_To_bought_tokens, 'utf8'); + const jsonData = JSON.parse(data); + // the JSON structure is something like { "tokenA": {...}, "tokenB": {...} } + boughtTokens = Object.keys(jsonData); + return boughtTokens; + } catch (err) { + console.error('Error reading or parsing file:', err); + } + } +/** + * Reads the bought tokens from a JSON file and returns the token object for the given token address. + * @param {string} tokenAddress - The address of the token to read. + * @returns {Object} - The token object containing entry price, take profit price, and stop loss price. + */ +export async function readBoughtTokens(tokenAddress:string, path_To_bought_tokens:string) { + try { + // Read the JSON file asynchronously + const data = await fs.readFile(path_To_bought_tokens, { encoding: 'utf8' }); + // Parse the JSON data + const jsonData = JSON.parse(data); + // Access the data + if(!(tokenAddress in jsonData)){ + return null; + } + + const tokenObj = jsonData[tokenAddress]; + + return tokenObj; + } catch (err) { + console.error('Error reading file:', err); + } +} +/** + * Writes the bought tokens to a JSON file. + * @param {string} tokenAddress - The address of the token. + * @param {object} tokenObj - The token object to be written. + * @returns {Promise} - A promise that resolves when the tokens are written successfully, or rejects with an error. + */ +export async function writeBoughtTokens(tokenAddress:string, tokenObj:object, path_To_bought_tokens:string) { + try { + // Read the JSON file asynchronously + const data = await fs.readFile(path_To_bought_tokens, { encoding: 'utf8' }); + // Parse the JSON data + const jsonData = JSON.parse(data); + // Update the JSON data + jsonData[tokenAddress] = tokenObj; + // Write the updated JSON data back to the file + await fs.writeFile(path_To_bought_tokens, JSON.stringify(jsonData, null, 2)); + } catch (err) { + console.error('Error writing bought tokens file:', err); + } +} +/** + * Deletes the bought tokens after selling it from the JSON file. + * @param {string} tokenAddress - The address of the token to be deleted. + * @returns {Promise} - A promise that resolves when the tokens are deleted successfully. + */ +export async function deleteBoughtTokens(tokenAddress:string, path_To_bought_tokens:string) { + try { + // Read the JSON file asynchronously + const data = await fs.readFile(path_To_bought_tokens, { encoding: 'utf8' }); + // Parse the JSON data + const jsonData = JSON.parse(data); + if (tokenAddress in jsonData) delete jsonData[tokenAddress]; + // Write the updated JSON data back to the file + await fs.writeFile(path_To_bought_tokens, JSON.stringify(jsonData, null, 2)); + } catch (err) { + console.error('Error deleting bought tokens file:', err); + } +} + +export async function getCurrentPriceJUP(tokenAddress:string){ + // api: https://price.jup.ag/v6/price?ids=tokenAddress&vsToken=So11111111111111111111111111111111111111112 + try{ + const response = await( await fetch(`https://price.jup.ag/v6/price?ids=${tokenAddress}&vsToken=${wsol}`)).json(); + //const response = await( await fetch(`https://quote-api.jup.ag/v6/quote?inputMint=${wsol}&outputMint=${tokenAddress}&amount=1000000&slippageBps=50`) ).json() + console.log(response) + }catch(e){ + console.log(`Error when getting current price of ${tokenAddress} `, e) + } +} +export async function logExitPrice(tokenAddress: string, exitPrice:number, path_To_bought_tokens:string){ + let tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + tokenObj.exit_price = exitPrice; + await writeBoughtTokens(tokenAddress, tokenObj, path_To_bought_tokens); +} +export async function logTraderEntryPrice(tokenAddress:string, entryPrice:number, path_To_bought_tokens:string){ + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + tokenObj.trader_entry_price = entryPrice; + await writeBoughtTokens(tokenAddress, tokenObj, path_To_bought_tokens); +} +// export async function setEntryPrice(tokenAddress){ +// const tokenObj = await readBoughtTokens(tokenAddress); +// const trader_entry_price = tokenObj.trader_entry_price; +// tokenObj.entry_price = trader_entry_price * (1 - entry_percentage); +// await writeBoughtTokens(tokenAddress, tokenObj); +// } +export async function setInitTokenObj(tokenAddress: string, path_To_bought_tokens:string){ + // if day volume < 100k, + // we don't trade it + const currentPrice = new Decimal(await getCurrentPriceRaydium(tokenAddress, path_To_bought_tokens)); + const ourEntryPrice = currentPrice.mul(new Decimal(1).minus(buyin_percentage)); + let ourEntryPriceDec = new Decimal(ourEntryPrice); + let tpPriceDec = ourEntryPriceDec.mul(new Decimal(1).plus(tp)); + let slPriceDec = ourEntryPriceDec.mul(new Decimal(1).minus(sl)); + const mc = await getCurrentMarketCap(tokenAddress); + const noOfSolInPool = await getCurrentSolInPool(tokenAddress); + let solPerOrder = order_size; + const poolId = await fetchAMMPoolId(tokenAddress); + // if((mc||0) >= 10000000){ + // solPerOrder = 2; + // tpPriceDec = ourEntryPriceDec.mul(new Decimal(1).plus(new Decimal(0.05))); + // } + // if((mc||0) >= 5000000){ + // solPerOrder = 1.5 + // tpPriceDec = ourEntryPriceDec.mul(new Decimal(1).plus(new Decimal(0.05))); + // } + // else if((mc||0) >= 1000000){ + // solPerOrder = 1; + // tpPriceDec = ourEntryPriceDec.mul(new Decimal(1).plus(new Decimal(0.05))); + // }else{ + // solPerOrder = 0.5; + // tpPriceDec = ourEntryPriceDec.mul(new Decimal(1).plus(new Decimal(0.05))); + // } + + const tokenObj = { + "entry_price": ourEntryPriceDec, + "tp_price": tpPriceDec, + "sl_price": slPriceDec, + "exit_price": 0, + "poolId": poolId, + "number_of_sol_in_pool": noOfSolInPool, + "market_cap": mc, + "sol_per_order": solPerOrder, + } + console.log("Init our trade successfully!", tokenObj) + await writeBoughtTokens(tokenAddress, tokenObj, path_To_bought_tokens); +} + +export async function checkIfHitEntryPrice(tokenAddress:string, path_To_bought_tokens:string){ + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + const currentPrice = await getCurrentPriceRaydium(tokenAddress, path_To_bought_tokens); + const entryPrice = tokenObj.entry_price; + if(currentPrice <= entryPrice){ + return true; + } + return false; +} +export async function getCurrentPriceRaydium(tokenAddress:string, path_To_bought_tokens:string){ + try{ + // Check if poolId is already set + let raydium:any = null + if(sdkCache.sdk){ + raydium = sdkCache.sdk; + } + else { + raydium = await initSdk(); + sdkCache.sdk = raydium; + } + const tokenObj = await readBoughtTokens(tokenAddress, path_To_bought_tokens); + let poolId:any = null; + if (tokenObj === null) { + poolId = ""; + } else { + poolId = tokenObj.poolId; + } + if (poolId === "") { + poolId = await fetchAMMPoolId(tokenAddress); + if(tokenObj){ + tokenObj.poolId = poolId; + await writeBoughtTokens(tokenAddress, tokenObj, path_To_bought_tokens); + } + } + const res = await raydium.liquidity.getRpcPoolInfos([poolId]); + const poolInfo = res[poolId]; + const baseMint = poolInfo.baseMint.toString(); + const quoteMint = poolInfo.quoteMint.toString(); + const baseDecimals = new Decimal(poolInfo.baseDecimal.toString()); + const quoteDecimals = new Decimal(poolInfo.quoteDecimal.toString()); + const solMintAddress = wsol; + //const solPrice = await getCurrentSolPrice(); + let solReserve:any = null; + let tokenReserve:any = null; + let priceInSOL; + + if (baseMint === solMintAddress) { + // baseMint is SOL, (this is pump token) + solReserve = new Decimal(poolInfo.baseReserve.toString()).div(new Decimal(10).pow(baseDecimals)); + tokenReserve = new Decimal(poolInfo.quoteReserve.toString()).div(new Decimal(10).pow(quoteDecimals)); + priceInSOL = solReserve.div(tokenReserve); + } else { + // Neither baseMint nor quoteMint is SOL, use the pool price directly + solReserve = new Decimal(poolInfo.quoteReserve.toString()).div(new Decimal(10).pow(quoteDecimals)); + tokenReserve = new Decimal(poolInfo.baseReserve.toString()).div(new Decimal(10).pow(baseDecimals)); + priceInSOL = poolInfo.poolPrice; + } + //console.log(`Current price of ${tokenAddress} in SOL: ${priceInSOL}`); + return priceInSOL; + }catch(e){ + logger.error(`Error when getting current price of ${tokenAddress} `, e) + } +} +export async function writeLineToLogFile(logMessage:string){ + fs.appendFile(log_path, `${logMessage}\n`, 'utf8'); +} + //"tokenA": { + // "trader_entry_price": 0.5312, + // "entry_price": 0.5152, + // "actual_entry_price": 0.5152, + // "tp_price": 0.58432, + // "sl_price": 0.42496, + // "exit_price": 0.5312 + //} diff --git a/src/trading_dev/README.md b/src/trading_dev/README.md new file mode 100644 index 0000000..dc0246c --- /dev/null +++ b/src/trading_dev/README.md @@ -0,0 +1,59 @@ +## Limit Order + +- it depends on the buy in percentage from the .env file + +### HOW TO USE + +```typescript +import { + setInitTokenObj, + checkIfHitEntryPrice, + path_To_bought_tokens, + loadBoughtTokens, + order_size +} from "./trading_dev/ProfitAndLoss"; +import { wallet} from "./helpers/config"; +import { buy } from "./raydium/buy_helper"; + +// create a limit order object locally when your searcher bot finds a token +async function searcherLogic() { + + // when your searcher bot finds a token, you can create a limit order object + while(true){ + // logic to find a target token... + // ... + // ... + const tokenAddress = "token address"; + await setInitTokenObj(tokenAddress, path_To_bought_tokens); // successfully create a limit order object in the bought_tokens.json file, + // before using it, please see the implementation of setInitTokenObj() in src/trading_dev/ProfitAndLoss/utils.ts + + } +} + +// check if the token has hit the entry price, if so, buy the token +async function buy_checker(){ + while (true) { + const bought_tokens = await loadBoughtTokens(path_To_bought_tokens); + for (const token in bought_tokens) { + const tokenObj = bought_tokens[token]; + if (checkIfHitEntryPrice(tokenObj, path_To_bought_tokens)) { + // buy the token + buy("buy", token, order_size, wallet); + } + } + } +} + +``` + +## take profit / stop-loss + +- it depends on the tp/sl percentage from the .env file + +### HOW TO USE + +```shell +ts-node src/trading_dev/ProfitAndLoss/sell-checker.ts +``` + +### it will automatically sell the token from the bought_tokens.json if it hits the take profit or stop-loss price diff --git a/src/Trading_dev/memecoin_trading_strategies/copy_trading/bought-tokens.json b/src/trading_dev/copy-bot/bought-tokens.json similarity index 100% rename from src/Trading_dev/memecoin_trading_strategies/copy_trading/bought-tokens.json rename to src/trading_dev/copy-bot/bought-tokens.json diff --git a/src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-buy.js b/src/trading_dev/copy-bot/copy-buy.ts similarity index 88% rename from src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-buy.js rename to src/trading_dev/copy-bot/copy-buy.ts index 54efd05..1ddda78 100644 --- a/src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-buy.js +++ b/src/trading_dev/copy-bot/copy-buy.ts @@ -1,22 +1,15 @@ -const { PublicKey } = require("@solana/web3.js"); -const { TOKEN_PROGRAM_ID, AccountLayout } = require("@solana/spl-token"); -const { - connection, - wallet, - smart_money_wallet, -} = require("../../../helpers/config"); -//const { buy } = require("../../dex/jupiter/swap/buy-helper"); -//const { sell } = require("../../dex/jupiter/swap/sell-helper"); -const path = require("path"); -const { swap } = require("../../../jupiter/swap/swap-helper"); -const { buy } = require("../../../raydium/buy_helper"); -const { sell } = require("../../../raydium/sell_helper"); -const fs = require("fs"); +import { PublicKey } from "@solana/web3.js"; +import { TOKEN_PROGRAM_ID, AccountLayout } from "@solana/spl-token"; +import { connection, wallet, smart_money_wallet } from "../../helpers/config"; +import path from "path"; +import { swap } from "../../jupiter/swap/swap-helper"; +import { buy } from "../../raydium/buy_helper"; +import { sell } from "../../raydium/sell_helper"; +import fs from "fs"; const boughtTokensPath = path.join(__dirname, "bought-tokens.json"); -//const {swap} = require("../../../Pool/swap") let walletsToListen = []; -var previous_trader_wallet_state = {}; -var previous_our_wallet_state = {}; +var previous_trader_wallet_state: any = {}; +var previous_our_wallet_state: any = {}; // [usdc, sol, usdt, wsol] const wsol = "So11111111111111111111111111111111111111112"; const quoteToken = [ @@ -27,7 +20,7 @@ const quoteToken = [ ]; let boughtTokens = JSON.parse(fs.readFileSync(boughtTokensPath, "utf8")); -async function saveToJson(token) { +export async function saveToJson(token: string) { boughtTokens.push(token); fs.writeFileSync(boughtTokensPath, JSON.stringify(boughtTokens, null, 2)); } @@ -36,7 +29,7 @@ async function saveToJson(token) { * Listens to changes in multiple wallets and performs trading actions based on the changes. * @returns {Promise} A promise that resolves once the wallet listening is set up. */ -async function listenToWallets(address) { +export async function listenToWallets(address: PublicKey) { try { connection.onProgramAccountChange( TOKEN_PROGRAM_ID, @@ -48,10 +41,10 @@ async function listenToWallets(address) { // realize in smart money wallet there is a token's balance changed // then we look at trader's portfolio console.log("Wallet state changed"); - const current_trader_wallet_state = await retriveWalletState( + const current_trader_wallet_state: any = await retriveWalletState( address.toBase58() ); - const current_our_wallet_state = await retriveWalletState( + const current_our_wallet_state: any = await retriveWalletState( wallet.publicKey.toBase58() ); if ( @@ -93,7 +86,7 @@ async function listenToWallets(address) { console.log("We don't have enough SOL to swap"); throw new Error("We don't have enough SOL to swap"); } - if ((!changedMint) in current_trader_wallet_state) { + if (!(changedMint in current_trader_wallet_state)) { current_trader_wallet_state[changedMint] = 0; } const sell_percentage = Math.abs( @@ -215,7 +208,7 @@ async function listenToWallets(address) { * @param {string} wallet_address - The address of the wallet to retrieve the state for. * @returns {Object} - An object containing the token balances of the wallet and the SOL balance. */ -async function retriveWalletState(wallet_address) { +async function retriveWalletState(wallet_address: string) { try { const filters = [ { @@ -232,13 +225,13 @@ async function retriveWalletState(wallet_address) { TOKEN_PROGRAM_ID, //new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") { filters: filters } ); - let results = {}; + let results: any = {}; const solBalance = await connection.getBalance( new PublicKey(wallet_address) ); accounts.forEach((account, i) => { //Parse the account data - const parsedAccountInfo = account.account.data; + const parsedAccountInfo: any = account.account.data; const mintAddress = parsedAccountInfo["parsed"]["info"]["mint"]; const tokenBalance = parsedAccountInfo["parsed"]["info"]["tokenAmount"]["uiAmount"]; @@ -256,9 +249,9 @@ async function retriveWalletState(wallet_address) { * Copies trades based on predefined parameters. * @returns {Promise} A promise that resolves when the trade copying is complete. */ -async function copy_buy() { +export async function copy_buy() { // smart money wallet address - let smart_money_address = smart_money_wallet; + let smart_money_address: any = smart_money_wallet; // our wallet address let our_wallet_address = wallet.publicKey.toBase58(); previous_trader_wallet_state = await retriveWalletState(smart_money_address); @@ -271,8 +264,3 @@ async function copy_buy() { } copy_buy(); -module.exports = { - copy_buy, - listenToWallets, - retriveWalletState, -}; diff --git a/src/trading_dev/copy-bot/copy-sell.ts b/src/trading_dev/copy-bot/copy-sell.ts new file mode 100644 index 0000000..6ffd37d --- /dev/null +++ b/src/trading_dev/copy-bot/copy-sell.ts @@ -0,0 +1,104 @@ +import { PublicKey } from "@solana/web3.js"; +import { TOKEN_PROGRAM_ID, AccountLayout } from "@solana/spl-token"; +import fs from "fs"; +import path from "path"; +import { wallet, connection, smart_money_wallet } from "../../helpers/config"; +//import { buy } from("../../dex/jupiter/swap/buy-helper"); +//import { sell } from("../../dex/jupiter/swap/sell-helper"); +import { sell } from "../../raydium/sell_helper"; + +//const {swap} from("../../../Pool/swap") +var current_trader_wallet_state: any = {}; +var current_our_wallet_state: any = {}; +// [usdc, sol, usdt, wsol] +const wsol = "So11111111111111111111111111111111111111112"; +const quoteToken = [ + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", + "SOL", + "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", + wsol, +]; +const boughtTokensPath = path.join(__dirname, "bought-tokens.json"); +let boughtTokens = JSON.parse(fs.readFileSync(boughtTokensPath, "utf8")); +function saveToJson() { + fs.writeFileSync(boughtTokensPath, JSON.stringify(boughtTokens, null, 2)); +} +/** + * Retrieves the state of a wallet by querying the Solana blockchain. + * @param {string} wallet_address - The address of the wallet to retrieve the state for. + * @returns {Object} - An object containing the token balances of the wallet and the SOL balance. + */ +async function retriveWalletState(wallet_address: string) { + const filters = [ + { + dataSize: 165, //size of account (bytes) + }, + { + memcmp: { + offset: 32, //location of our query in the account (bytes) + bytes: wallet_address, //our search criteria, a base58 encoded string + }, + }, + ]; + const accounts = await connection.getParsedProgramAccounts( + TOKEN_PROGRAM_ID, //new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") + { filters: filters } + ); + let results: any = {}; + const solBalance = await connection.getBalance(new PublicKey(wallet_address)); + accounts.forEach((account, i) => { + //Parse the account data + const parsedAccountInfo: any = account.account.data; + const mintAddress = parsedAccountInfo["parsed"]["info"]["mint"]; + const tokenBalance = + parsedAccountInfo["parsed"]["info"]["tokenAmount"]["uiAmount"]; + + results[mintAddress] = tokenBalance; + results["SOL"] = solBalance / 10 ** 9; + }); + return results; +} +export async function copy_sell(address: string) { + // 400 ms to check the wallet state + // if token we have but trader doesn't have, sell it + // that's it + let soldTokens: string[] = []; + let flag = false; + let possible_cant_sell_token = null; + try { + if (boughtTokens.length > 0) { + for (let i = 0; i < boughtTokens.length; i++) { + let token = boughtTokens[i]; + current_trader_wallet_state = await retriveWalletState(address); + if ( + !(token in current_trader_wallet_state) || + current_trader_wallet_state[token] == 0 + ) { + console.log(`Selling ${token}...`); + soldTokens.push(token); + flag = true; + sell("sell", token, 100, wallet); + } + } + } + } catch (err) { + console.log(err); + } + if (flag) { + // Update the list with the remaining unsold tokens + boughtTokens = boughtTokens.filter( + (token: any) => !soldTokens.includes(token) + ); + // Save the updated list back to the JSON file + saveToJson(); + } +} +async function main() { + while (true) { + boughtTokens = JSON.parse(fs.readFileSync(boughtTokensPath, "utf8")); + await copy_sell(smart_money_wallet || ""); + + await new Promise((resolve) => setTimeout(resolve, 2500)); + } +} +main(); diff --git a/src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-trade.js b/src/trading_dev/copy-bot/copy-trade.ts similarity index 86% rename from src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-trade.js rename to src/trading_dev/copy-bot/copy-trade.ts index b12869e..2d68130 100644 --- a/src/Trading_dev/memecoin_trading_strategies/copy_trading/copy-trade.js +++ b/src/trading_dev/copy-bot/copy-trade.ts @@ -2,8 +2,8 @@ // use two cores to run the two functions // 1. copy_sell // 2. copy_buy -const { fork } = require('child_process'); -const path = require('path'); +import { fork } from 'child_process'; +import path from 'path'; const copySellPath = path.join(__dirname, 'copy-sell.js'); const copyBuyPath = path.join(__dirname, 'copy-buy.js'); // Run copy_sell in a separate process diff --git a/src/raydium/token-filters/tx-count.js b/src/transactions/README.md similarity index 100% rename from src/raydium/token-filters/tx-count.js rename to src/transactions/README.md diff --git a/src/Transactions/bloXroute_tips_tx_executor.js b/src/transactions/bloXroute_tips_tx_executor.ts similarity index 75% rename from src/Transactions/bloXroute_tips_tx_executor.js rename to src/transactions/bloXroute_tips_tx_executor.ts index f8df2e5..5b5a21e 100644 --- a/src/Transactions/bloXroute_tips_tx_executor.js +++ b/src/transactions/bloXroute_tips_tx_executor.ts @@ -1,28 +1,28 @@ -const { +import { createTraderAPIMemoInstruction, HttpProvider, MAINNET_API_UK_HTTP, MAINNET_API_NY_HTTP, -} = require("@bloxroute/solana-trader-client-ts"); -const { private_key, bloXRoute_auth_header, bloXroute_fee } = require("../helpers/config"); -const { +} from "@bloxroute/solana-trader-client-ts"; +import { private_key, bloXRoute_auth_header, bloXroute_fee } from "../helpers/config"; +import { Connection, LAMPORTS_PER_SOL, PublicKey, Keypair, SystemProgram, -} = require("@solana/web3.js"); -const base58 = require("bs58"); -const { Transaction } = require("@solana/web3.js"); +} from "@solana/web3.js"; +import base58 from "bs58"; +import { Transaction } from "@solana/web3.js"; const TRADER_API_TIP_WALLET = "HWEoBxYs7ssKuudEjzjmpfJVX7Dvi7wescFsVx2L5yoY"; const provider = new HttpProvider( - bloXRoute_auth_header, + bloXRoute_auth_header||"", private_key, MAINNET_API_UK_HTTP // or MAINNET_API_NY_HTTP ); -async function CreateTraderAPITipTransaction( - senderAddress, - tipAmountInLamports +export async function CreateTraderAPITipTransaction( + senderAddress:any, + tipAmountInLamports:any ) { const tipAddress = new PublicKey(TRADER_API_TIP_WALLET); return new Transaction().add( @@ -33,35 +33,37 @@ async function CreateTraderAPITipTransaction( }) ); } -async function bloXroute_executeAndConfirm(transaction, signers) { +export async function bloXroute_executeAndConfirm(transaction:any, signers:any) { const memo = createTraderAPIMemoInstruction( "Powered by bloXroute Trader Api" ); // why not use empty string? see https://docs.bloxroute.com/solana/trader-api-v2/achieve-best-performance-for-landing-a-transaction - const wallet = Keypair.fromSecretKey(base58.decode(private_key)); + const wallet = Keypair.fromSecretKey(base58.decode(private_key||"")); const recentBlockhash = await provider.getRecentBlockHash({}); let tx = new Transaction({ recentBlockhash: recentBlockhash.blockHash, feePayer: wallet.publicKey, }); + const fee:number = parseFloat(bloXroute_fee||"0.001"); tx.add(transaction); tx.add(memo); tx.add( await CreateTraderAPITipTransaction( wallet.publicKey, - bloXroute_fee * LAMPORTS_PER_SOL + (fee) * LAMPORTS_PER_SOL ) ); // why 0.001 SOL? tx.sign(wallet); const serializeTxBytes = tx.serialize(); const buffTx = Buffer.from(serializeTxBytes); - const encodedTx = buffTx.toString("base64"); + const encodedTx:any = buffTx.toString("base64"); console.log("Submitting transaction to bloXroute..."); - const response = await provider.postSubmit({ + const request:any= { transaction: { content: encodedTx, isCleanup: false }, frontRunningProtection: false, useStakedRPCs: true, // comment this line if you don't want to directly send txn to current blockleader - }); + } + const response = await provider.postSubmit(request); /** * For better performance, * you could include a high enough tip and set useStakedRPCs to True diff --git a/src/transactions/index.ts b/src/transactions/index.ts new file mode 100644 index 0000000..671c8db --- /dev/null +++ b/src/transactions/index.ts @@ -0,0 +1,3 @@ +export * from "./bloXroute_tips_tx_executor"; +export * from "./simple_tx_executor"; +export * from "./jito_tips_tx_executor"; \ No newline at end of file diff --git a/src/Transactions/jito_tips_tx_executor.js b/src/transactions/jito_tips_tx_executor.ts similarity index 88% rename from src/Transactions/jito_tips_tx_executor.js rename to src/transactions/jito_tips_tx_executor.ts index 6347fc6..ec51fe9 100644 --- a/src/Transactions/jito_tips_tx_executor.js +++ b/src/transactions/jito_tips_tx_executor.ts @@ -1,4 +1,4 @@ -const { +import { BlockhashWithExpiryBlockHeight, Keypair, PublicKey, @@ -6,11 +6,11 @@ const { Connection, TransactionMessage, VersionedTransaction, -} = require("@solana/web3.js"); -const axios = require("axios"); -const bs58 = require("bs58"); -const { Currency, CurrencyAmount } = require("@raydium-io/raydium-sdk"); -const { connection } = require("../helpers/config"); +} from "@solana/web3.js"; +import axios from "axios"; +import bs58 from "bs58"; +import { Currency, CurrencyAmount } from "@raydium-io/raydium-sdk"; +import { connection } from "../helpers/config"; const jito_Validators = [ "DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh", "ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt", @@ -21,7 +21,8 @@ const jito_Validators = [ "DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL", "96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5", ]; -const endpoints = [ // TODO: Choose a jito endpoint which is closest to your location, and uncomment others +const endpoints = [ + // TODO: Choose a jito endpoint which is closest to your location, and uncomment others "https://mainnet.block-engine.jito.wtf/api/v1/bundles", "https://amsterdam.mainnet.block-engine.jito.wtf/api/v1/bundles", "https://frankfurt.mainnet.block-engine.jito.wtf/api/v1/bundles", @@ -33,7 +34,7 @@ const endpoints = [ // TODO: Choose a jito endpoint which is closest to your loc * Generates a random validator from the list of jito_Validators. * @returns {PublicKey} A new PublicKey representing the random validator. */ -async function getRandomValidator() { +export async function getRandomValidator() { const res = jito_Validators[Math.floor(Math.random() * jito_Validators.length)]; return new PublicKey(res); @@ -46,11 +47,11 @@ async function getRandomValidator() { * @param {number} jitofee - The fee for the Jito transaction. * @returns {Promise<{ confirmed: boolean, signature: string | null }>} - A promise that resolves to an object containing the confirmation status and the transaction signature. */ -async function jito_executeAndConfirm( - transaction, - payer, - lastestBlockhash, - jitofee +export async function jito_executeAndConfirm( + transaction: any, + payer: Keypair, + lastestBlockhash: any, + jitofee: any ) { console.log("Executing transaction (jito)..."); const jito_validator_wallet = await getRandomValidator(); @@ -114,7 +115,7 @@ async function jito_executeAndConfirm( * @param {object} latestBlockhash - The latest blockhash information. * @returns {object} - An object containing the confirmation status and the transaction signature. */ -async function jito_confirm(signature, latestBlockhash) { +export async function jito_confirm(signature: any, latestBlockhash: any) { console.log("Confirming the jito transaction..."); const confirmation = await connection.confirmTransaction( { @@ -127,4 +128,3 @@ async function jito_confirm(signature, latestBlockhash) { return { confirmed: !confirmation.value.err, signature }; } -module.exports = { jito_executeAndConfirm }; diff --git a/src/transactions/nozomi/tx-submission.ts b/src/transactions/nozomi/tx-submission.ts new file mode 100644 index 0000000..c7bd325 --- /dev/null +++ b/src/transactions/nozomi/tx-submission.ts @@ -0,0 +1,117 @@ + +import { PublicKey, TransactionInstruction, Keypair, Connection, SystemProgram, Transaction, LAMPORTS_PER_SOL } from "@solana/web3.js"; +import {connection, jito_fee} from "../../helpers/config"; +import bs58 from "bs58"; +import axios from "axios"; +export const nozomi_connection = new Connection("https://ams1.secure.nozomi.temporal.xyz/?c=YOUR_API_KEY"); // +// Define constants +const NOZOMI_TIP = new PublicKey("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq"); +const MIN_TIP_AMOUNT = 1_000_000; + +const listOfValidators = [ + "TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq", +"noz3jAjPiHuBPqiSPkkugaJDkJscPuRhYnSpbi8UvC4", +"noz3str9KXfpKknefHji8L1mPgimezaiUyCHYMDv1GE", +"noz6uoYCDijhu1V7cutCpwxNiSovEwLdRHPwmgCGDNo", +"noz9EPNcT7WH6Sou3sr3GGjHQYVkN3DNirpbvDkv9YJ", +"nozc5yT15LazbLTFVZzoNZCwjh3yUtW86LoUyqsBu4L", +"nozFrhfnNGoyqwVuwPAW4aaGqempx4PU6g6D9CJMv7Z", +"nozievPk7HyK1Rqy1MPJwVQ7qQg2QoJGyP71oeDwbsu", +"noznbgwYnBLDHu8wcQVCEw6kDrXkPdKkydGJGNXGvL7", +"nozNVWs5N8mgzuD3qigrCG2UoKxZttxzZ85pvAQVrbP", +"nozpEGbwx4BcGp6pvEdAh1JoC2CQGZdU6HbNP1v2p6P", +"nozrhjhkCr3zXT3BiT4WCodYCUFeQvcdUkM7MqhKqge", +"nozrwQtWhEdrA6W8dkbt9gnUaMs52PdAv5byipnadq3", +"nozUacTVWub3cL4mJmGCYjKZTnE9RbdY5AP46iQgbPJ", +"nozWCyTPppJjRuw2fpzDhhWbW355fzosWSzrrMYB1Qk", +"nozWNju6dY353eMkMqURqwQEoM3SFgEKC6psLCSfUne", +"nozxNBgWohjR75vdspfxR5H9ceC7XXH99xpxhVGt3Bb" + +] +const nozomi_url = "http://ams1.nozomi.temporal.xyz/?c="; // i'm using ams Direct HTTP here, please change if needed +// Direct HTTP +// PITT: http://pit1.nozomi.temporal.xyz/?c= + +// EWR: http://ewr1.nozomi.temporal.xyz/?c= + +// AMS: http://ams1.nozomi.temporal.xyz/?c= + +// FRA: http://fra2.nozomi.temporal.xyz/?c= + +// Secure HTTPS: +// AMS: https://ams1.secure.nozomi.temporal.xyz/?c= + +// EWR: https://ewr1.secure.nozomi.temporal.xyz/?c= + +// PITT: https://pit1.secure.nozomi.temporal.xyz/?c= + +// FRA: https://fra2.secure.nozomi.temporal.xyz/?c= + +// put your nozomi low latency api keys here. +const low_latency_api_key = [ + "YOUR_NOZOMI_LOW_LATENCY_API_KEY" + +] +export async function getRamdomValidator() { + const randomIndex = Math.floor(Math.random() * listOfValidators.length); + return new PublicKey(listOfValidators[randomIndex]); +} +export async function getRandomNozomiAPIKey() { + const randomIndex = Math.floor(Math.random() * low_latency_api_key.length); + return low_latency_api_key[randomIndex]; +} +export async function sendNozomiTx( + ixs: any[], + signer: Keypair, + blockhash:any, + dex:string, + buyOrSell:string, +): Promise { + const validator = await getRamdomValidator(); + console.log("signer", signer.publicKey.toBase58()); + console.log("Sending tip to", validator.toBase58()); + // Create transfer instruction + let tips = parseFloat(jito_fee); + const tipIx = SystemProgram.transfer({ + fromPubkey: signer.publicKey, + toPubkey: validator, + lamports: tips*LAMPORTS_PER_SOL, + }); + ixs.push(tipIx); + + // Get the latest blockhash + + // Create transaction and sign it + const tx = new Transaction().add(...ixs); + if(typeof blockhash === "string") { + tx.recentBlockhash = blockhash; + }else{ + tx.recentBlockhash = blockhash.blockhash; + tx.lastValidBlockHeight = blockhash.lastValidBlockHeight + } + tx.feePayer = signer.publicKey; + tx.sign(signer); + console.log(tx); + const b64Tx = Buffer.from(tx.serialize()).toString('base64'); + const url_request = `${nozomi_url}${await getRandomNozomiAPIKey()}`; + let request; + try{ + request = await axios.post(url_request, { + jsonrpc: "2.0", + id: 1, + method: "sendTransaction", + params: [ + b64Tx, + { "encoding": "base64" } + ] + }); + + } catch (error) { + console.log(`error sending tx to Nozomi: ${error}`); + + } + + console.log("Transaction sent with signature:", request); + +} + diff --git a/src/Transactions/simple_tx_executor.js b/src/transactions/simple_tx_executor.ts similarity index 77% rename from src/Transactions/simple_tx_executor.js rename to src/transactions/simple_tx_executor.ts index 5300f7c..bf46fde 100644 --- a/src/Transactions/simple_tx_executor.js +++ b/src/transactions/simple_tx_executor.ts @@ -1,11 +1,11 @@ -const { +import { BlockhashWithExpiryBlockHeight, Connection, Keypair, Transaction, VersionedTransaction, -} = require("@solana/web3.js"); -const { connection } = require("../helpers/config.js"); +} from "@solana/web3.js"; +import { connection } from "../helpers/config"; /** * Executes a transaction and confirms it on the Solana blockchain. @@ -14,21 +14,21 @@ const { connection } = require("../helpers/config.js"); * @param {string} lastestBlockhash - The latest blockhash of the Solana blockchain. * @returns {Promise} - A promise that resolves to true if the transaction is confirmed, false otherwise. */ -async function simple_executeAndConfirm(transaction, payer, lastestBlockhash) { +export async function simple_executeAndConfirm(transaction:any, payer:any, lastestBlockhash:any) { console.log("Executing transaction..."); const signature = await simple_execute(transaction); console.log("Transaction executed. Confirming transaction..."); return simple_confirm(signature, lastestBlockhash); } -async function simple_execute(transaction) { +async function simple_execute(transaction:any) { return connection.sendRawTransaction(transaction.serialize(), { skipPreflight: true, maxRetries: 0, }); } -async function simple_confirm(signature, latestBlockhash) { +async function simple_confirm(signature:any, latestBlockhash:any) { const confirmation = await connection.confirmTransaction( { signature, @@ -40,4 +40,3 @@ async function simple_confirm(signature, latestBlockhash) { return { confirmed: !confirmation.value.err, signature }; } -module.exports = { simple_executeAndConfirm }; diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..7afecbe --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from "../helpers/utils"; +export * from "../helpers/logger"; \ No newline at end of file diff --git a/test.ts b/test.ts new file mode 100644 index 0000000..d4a5e32 --- /dev/null +++ b/test.ts @@ -0,0 +1,71 @@ +import { spawn } from 'child_process'; +import path from "path"; +import { logger } from './src/utils'; +const config_path = path.join(__dirname, 'src/helpers/config.ts'); +const wrap_sol_path = path.join(__dirname, 'src/helpers/wrap_sol.ts'); +const unwrap_sol_path = path.join(__dirname, 'src/helpers/unwrap_sol.ts'); +const meteora_buy_path = path.join(__dirname, 'src/meteora/buy.ts'); +const meteora_sell_path = path.join(__dirname, 'src/meteora/sell.ts'); +const orca_buy_path = path.join(__dirname, 'src/orca/buy.ts'); +const orca_sell_path = path.join(__dirname, 'src/orca/sell.ts'); +const raydium_buy_path = path.join(__dirname, 'src/raydium/buy.ts'); +const raydium_sell_path = path.join(__dirname, 'src/raydium/sell.ts'); +const pumpfun_buy_path = path.join(__dirname, 'src/pumpfunsdk/pumpdotfun-sdk/src/buy.ts'); +const pumpfun_sell_path = path.join(__dirname, 'src/pumpfunsdk/pumpdotfun-sdk/src/sell.ts'); +const pumpfun_createAndBuy_path = path.join(__dirname, 'src/pumpfunsdk/pumpdotfun-sdk/src/createAndBuy.ts'); +const boost_volume_path = path.join(__dirname, 'src/memecoin_dev/market-making_dev/boost_volume.ts'); +const create_token_path = path.join(__dirname, 'src/token/create.ts'); +const burn_token_path = path.join(__dirname, 'src/token/burn.ts'); +const copy_trade_path = path.join(__dirname, 'src/grpc_streaming_dev/grpc-copy-bot/src/streaming/copy-trade.ts'); +const pumpfun_sniper_path = path.join(__dirname, 'src/grpc_streaming_dev/grpc-pf-sniper/src/streaming/snipe-create.ts'); +async function runSHScript(scriptPath: string) { + return new Promise((resolve, reject) => { + const child = spawn('ts-node', [scriptPath, " -h"], { + stdio: 'inherit', + shell: true, + }); + + child.on('close', (code) => { + //console.log(`Child process for ${scriptPath} exited with code ${code}`); + resolve(code); // Resolve the promise when the process exits + }); + + child.on('error', (err) => { + //console.error(`Error running ${scriptPath}:`, err); + reject(err); // Reject the promise on error + }); + }); + } +/** + * please run this before using the cli + */ + +async function test(){ + logger.info("Testing helper scripts..."); + await runSHScript(config_path); + await runSHScript(wrap_sol_path); + await runSHScript(unwrap_sol_path); + logger.info("Testing Meteora scripts..."); + await runSHScript(meteora_buy_path); + await runSHScript(meteora_sell_path); + logger.info("Testing Orca scripts..."); + await runSHScript(orca_buy_path); + await runSHScript(orca_sell_path); + logger.info("Testing Raydium scripts..."); + await runSHScript(raydium_buy_path); + await runSHScript(raydium_sell_path); + logger.info("Testing Pumpfun scripts..."); + await runSHScript(pumpfun_buy_path); + await runSHScript(pumpfun_sell_path); + await runSHScript(pumpfun_createAndBuy_path); + logger.info("Testing Memecoin scripts..."); + await runSHScript(boost_volume_path); + await runSHScript(create_token_path); + await runSHScript(burn_token_path); + logger.info("Testing grpc Streaming scripts..."); + await runSHScript(copy_trade_path); + await runSHScript(pumpfun_sniper_path); + + logger.info("All tests passed!"); +} +test(); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..2aaa2ed --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,110 @@ +{ + "include": ["./src/**/*.ts", "./src/**/**/*.ts","./src/**/**/**/*.ts","./src/**/**/**/**/*.ts", ], + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "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. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "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. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "resolveJsonModule": true, + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} \ No newline at end of file