├── .gitignore ├── CLAUDE.md ├── README.md ├── package-lock.json ├── package.json ├── src ├── api │ ├── jupiter.ts │ └── solana.ts ├── constants │ └── constants.ts ├── main.ts ├── strategies │ └── basicMM.ts ├── utils │ ├── convert.ts │ ├── getSignature.ts │ ├── sleep.ts │ └── transactionSender.ts └── wallet.ts ├── tsconfig.json └── types └── solana-web3.d.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | .env -------------------------------------------------------------------------------- /CLAUDE.md: -------------------------------------------------------------------------------- 1 | # CLAUDE.md - Solana Market Maker Bot 2 | 3 | ## Build Commands 4 | - `npm run build` - Compile TypeScript to JavaScript 5 | - `npm start` - Run the compiled bot (production) 6 | - `npm run dev` - Run the bot with ts-node (development) 7 | 8 | ## Project Structure 9 | - `/src` - Source code 10 | - `/api` - External API integrations (Jupiter, Solana) 11 | - `/constants` - Project-wide constants 12 | - `/strategies` - Trading strategies 13 | - `/utils` - Helper functions 14 | - `main.ts` - Entry point 15 | - `wallet.ts` - Wallet management 16 | 17 | ## Code Style Guidelines 18 | - **Types**: Use strict typing (`strict: true` in tsconfig) 19 | - **Naming**: Use camelCase for files and variables 20 | - **Imports**: Group imports by external libraries first, then internal modules 21 | - **Error Handling**: Use try/catch blocks for API calls and transactions 22 | - **Environment**: Store sensitive data in `.env` file (never commit) 23 | - **Documentation**: Add JSDoc comments for functions with complex logic 24 | - **Async**: Use async/await pattern for asynchronous operations 25 | - **Constants**: Define token addresses and config values in constants directory 26 | 27 | ## Dependencies 28 | - Solana web3.js and SPL Token 29 | - Jupiter Aggregator API 30 | - TypeScript and Node.js (v18+) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Solana Market Maker Bot 2 | 3 | This project is a Solana Market Maker Bot designed to automate trading strategies on the Solana blockchain using the Jupiter swap protocol. It implements a 50/50 portfolio rebalancing strategy between SOL and SPL tokens, automatically executing trades to maintain balance when price fluctuations create imbalances. 4 | 5 | ## Features 6 | 7 | - **Automatic Portfolio Rebalancing**: Maintains a 50/50 value balance between token pairs 8 | - **Jupiter Integration**: Uses Jupiter Aggregator for optimal swap execution 9 | - **Price Tolerance**: Default 2% tolerance before triggering rebalance 10 | - **Slippage Protection**: Default 0.5% (50 bps) maximum slippage 11 | - **Priority Fees**: Includes 200,000 lamport priority fees for faster transaction confirmation 12 | - **BIP39 Wallet Support**: Generate keypairs from mnemonics or load from file 13 | - **Robust Transaction Handling**: Includes retry logic and confirmation timeouts 14 | - **Simulation Mode**: Test strategies without executing actual trades 15 | 16 | ## Project Structure 17 | 18 | ```bash 19 | . 20 | ├── package.json 21 | ├── package-lock.json 22 | ├── src 23 | │ ├── api 24 | │ │ ├── jupiter.ts # Jupiter API client with quote and swap functionality 25 | │ │ └── solana.ts # Solana connection management 26 | │ ├── constants 27 | │ │ └── constants.ts # Token addresses and network configuration 28 | │ ├── main.ts # Entry point and setup 29 | │ ├── strategies 30 | │ │ └── basicMM.ts # 50/50 market-making strategy implementation 31 | │ ├── utils 32 | │ │ ├── convert.ts # Token unit conversion utilities 33 | │ │ ├── getSignature.ts # Transaction signature handling 34 | │ │ ├── transactionSender.ts # Robust transaction submission with retry logic 35 | │ │ └── sleep.ts # Asynchronous sleep utility 36 | │ └── wallet.ts # Keypair loading from file or mnemonic 37 | └── tsconfig.json 38 | ``` 39 | 40 | ## Requirements 41 | 42 | - Node.js (version 18.x or later) 43 | - A funded Solana wallet with SOL and SPL tokens 44 | 45 | ## Setup 46 | 47 | 1. Install Node.js: Ensure that you have Node.js installed on your machine. You can download it from [here](https://nodejs.org/) 48 | 2. Clone the Repository: Clone the repository to your local machine: 49 | ```bash 50 | git clone https://github.com/gianlucamazza/solana-mmaker.git 51 | cd solana-mmaker 52 | ``` 53 | 3. Install Dependencies: 54 | ```bash 55 | npm install 56 | ``` 57 | 4. Environment Variables: Create a `.env` file in the project root: 58 | ``` 59 | SOLANA_RPC_ENDPOINT= 60 | USER_KEYPAIR= 61 | SOLANA_MNEMONIC= 62 | ENABLE_TRADING= 63 | ``` 64 | Either `USER_KEYPAIR` or `SOLANA_MNEMONIC` is required, not both. 65 | 66 | ## Running the Bot 67 | 68 | To start the market maker bot in development mode: 69 | 70 | ```bash 71 | npm run dev 72 | ``` 73 | 74 | For production after building: 75 | 76 | ```bash 77 | npm run build 78 | npm start 79 | ``` 80 | 81 | ## Configuration Options 82 | 83 | The following parameters can be adjusted in the `MarketMaker` class constructor: 84 | 85 | - `waitTime`: Time between rebalance checks (default: 60000ms) 86 | - `slippageBps`: Maximum slippage tolerance in basis points (default: 50 bps or 0.5%) 87 | - `priceTolerance`: Threshold for triggering rebalance (default: 0.02 or 2%) 88 | - `rebalancePercentage`: Target portfolio balance ratio (default: 0.5 or 50/50) 89 | - `minimumTradeAmount`: Minimum amount to trade (default: 0.01 tokens) 90 | 91 | ## Customizing Trading Pairs 92 | 93 | The bot is designed to work with any SPL token pair. To modify the trading pairs: 94 | 95 | 1. Add your token mint addresses to the `constants.ts` file 96 | 2. Update the token configuration in the `MarketMaker` constructor 97 | 3. Ensure you have balances of both tokens in your wallet 98 | 99 | ## Safety and Security 100 | 101 | - Always review the strategy and start with small amounts for testing 102 | - Use a dedicated wallet with only the tokens you intend to trade 103 | - The bot uses priority fees to ensure transactions confirm quickly 104 | - All sensitive information is stored in environment variables 105 | - Transaction timeout protection prevents hanging on failed transactions 106 | 107 | ## Contribution 108 | Contributions are welcome! Please feel free to fork the repository, make changes, and submit pull requests. 109 | 110 | ## Disclaimer 111 | This project is for educational and experimental purposes only. Use it at your own risk. The authors are not responsible for any financial losses or damages. -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tradingbot", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "tradingbot", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@jup-ag/api": "^6.0.11", 13 | "@jup-ag/core": "^4.0.0-beta.21", 14 | "@project-serum/anchor": "^0.26.0", 15 | "@solana/spl-token-registry": "^0.2.4574", 16 | "@solana/web3.js": "^1.90.0", 17 | "bs58": "^5.0.0", 18 | "cross-fetch": "^4.0.0", 19 | "dotenv": "^16.4.4", 20 | "jsbi": "^4.3.0" 21 | } 22 | }, 23 | "node_modules/@babel/runtime": { 24 | "version": "7.24.1", 25 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", 26 | "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", 27 | "dependencies": { 28 | "regenerator-runtime": "^0.14.0" 29 | }, 30 | "engines": { 31 | "node": ">=6.9.0" 32 | } 33 | }, 34 | "node_modules/@blockworks-foundation/mango-client": { 35 | "version": "3.6.20", 36 | "resolved": "https://registry.npmjs.org/@blockworks-foundation/mango-client/-/mango-client-3.6.20.tgz", 37 | "integrity": "sha512-Te0i52KUyp5e8jQQZlIMsTy9fKIfefPHvkA8+NRGIH80kQcnJKKfzw3T1NxaDsc3KFMZwpuN3m4afDNpKTuF0g==", 38 | "dependencies": { 39 | "@project-serum/anchor": "^0.21.0", 40 | "@project-serum/serum": "^0.13.65", 41 | "@project-serum/sol-wallet-adapter": "^0.2.0", 42 | "@solana/spl-token": "^0.1.6", 43 | "@solana/web3.js": "^1.43.5", 44 | "big.js": "^6.1.1", 45 | "bn.js": "^5.1.0", 46 | "buffer-layout": "^1.2.1", 47 | "cross-fetch": "^3.1.5", 48 | "dotenv": "^10.0.0", 49 | "toformat": "^2.0.0", 50 | "yargs": "^17.0.1" 51 | } 52 | }, 53 | "node_modules/@blockworks-foundation/mango-client/node_modules/@project-serum/anchor": { 54 | "version": "0.21.0", 55 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.21.0.tgz", 56 | "integrity": "sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA==", 57 | "dependencies": { 58 | "@project-serum/borsh": "^0.2.4", 59 | "@solana/web3.js": "^1.17.0", 60 | "base64-js": "^1.5.1", 61 | "bn.js": "^5.1.2", 62 | "bs58": "^4.0.1", 63 | "buffer-layout": "^1.2.2", 64 | "camelcase": "^5.3.1", 65 | "cross-fetch": "^3.1.5", 66 | "crypto-hash": "^1.3.0", 67 | "eventemitter3": "^4.0.7", 68 | "find": "^0.3.0", 69 | "js-sha256": "^0.9.0", 70 | "pako": "^2.0.3", 71 | "snake-case": "^3.0.4", 72 | "toml": "^3.0.0" 73 | }, 74 | "engines": { 75 | "node": ">=11" 76 | } 77 | }, 78 | "node_modules/@blockworks-foundation/mango-client/node_modules/base-x": { 79 | "version": "3.0.9", 80 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 81 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 82 | "dependencies": { 83 | "safe-buffer": "^5.0.1" 84 | } 85 | }, 86 | "node_modules/@blockworks-foundation/mango-client/node_modules/big.js": { 87 | "version": "6.2.1", 88 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", 89 | "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==", 90 | "engines": { 91 | "node": "*" 92 | }, 93 | "funding": { 94 | "type": "opencollective", 95 | "url": "https://opencollective.com/bigjs" 96 | } 97 | }, 98 | "node_modules/@blockworks-foundation/mango-client/node_modules/bs58": { 99 | "version": "4.0.1", 100 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 101 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 102 | "dependencies": { 103 | "base-x": "^3.0.2" 104 | } 105 | }, 106 | "node_modules/@blockworks-foundation/mango-client/node_modules/camelcase": { 107 | "version": "5.3.1", 108 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 109 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 110 | "engines": { 111 | "node": ">=6" 112 | } 113 | }, 114 | "node_modules/@blockworks-foundation/mango-client/node_modules/cross-fetch": { 115 | "version": "3.1.8", 116 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 117 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 118 | "dependencies": { 119 | "node-fetch": "^2.6.12" 120 | } 121 | }, 122 | "node_modules/@blockworks-foundation/mango-client/node_modules/dotenv": { 123 | "version": "10.0.0", 124 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", 125 | "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", 126 | "engines": { 127 | "node": ">=10" 128 | } 129 | }, 130 | "node_modules/@coral-xyz/borsh": { 131 | "version": "0.28.0", 132 | "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz", 133 | "integrity": "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==", 134 | "dependencies": { 135 | "bn.js": "^5.1.2", 136 | "buffer-layout": "^1.2.0" 137 | }, 138 | "engines": { 139 | "node": ">=10" 140 | }, 141 | "peerDependencies": { 142 | "@solana/web3.js": "^1.68.0" 143 | } 144 | }, 145 | "node_modules/@cremafinance/option-utils": { 146 | "version": "1.14.3", 147 | "resolved": "https://registry.npmjs.org/@cremafinance/option-utils/-/option-utils-1.14.3.tgz", 148 | "integrity": "sha512-XWFEGo3A2H8A2lR4OgBwpJtLKRlRy8pe7Il/Z1cfgVurShl8z2TQn9LWEUOhEt4Bwjq8xRnK/v4F8YCIX5X82Q==", 149 | "dependencies": { 150 | "tslib": "^2.4.0" 151 | }, 152 | "funding": { 153 | "url": "https://www.coingecko.com/en/coins/crm" 154 | } 155 | }, 156 | "node_modules/@cremafinance/solana-contrib": { 157 | "version": "1.14.5", 158 | "resolved": "https://registry.npmjs.org/@cremafinance/solana-contrib/-/solana-contrib-1.14.5.tgz", 159 | "integrity": "sha512-4KIApAW+QmohmhPNV5CXFBDqqTxXGjWhVLWBLNUtys5sC1sZ8U2AGEvjj33rbgyxJuim+stdgXn1ziWwsdB9GQ==", 160 | "dependencies": { 161 | "@cremafinance/option-utils": "^1.14.3", 162 | "@solana/buffer-layout": "^4.0.0", 163 | "@types/promise-retry": "^1.1.3", 164 | "@types/retry": "^0.12.2", 165 | "promise-retry": "^2.0.1", 166 | "retry": "^0.13.1", 167 | "tiny-invariant": "^1.2.0", 168 | "tslib": "^2.4.0" 169 | }, 170 | "funding": { 171 | "url": "https://www.coingecko.com/en/coins/crm" 172 | }, 173 | "peerDependencies": { 174 | "@solana/web3.js": "^1.42", 175 | "bn.js": "^4 || ^5" 176 | } 177 | }, 178 | "node_modules/@cykura/sdk-core": { 179 | "name": "@jup-ag/cykura-sdk-core", 180 | "version": "0.1.8", 181 | "resolved": "https://registry.npmjs.org/@jup-ag/cykura-sdk-core/-/cykura-sdk-core-0.1.8.tgz", 182 | "integrity": "sha512-bVtDA4oEuzj/amuTPVlk1OFpdlYKK6H9nKWg6Tv6mn6MydS/ArC2EY2zuMHtWP+1YJ5CAwxHL/7Kl1k+7XBSoQ==", 183 | "dependencies": { 184 | "@project-serum/anchor": "^0.22.0", 185 | "big.js": "^5.2.2", 186 | "decimal.js": "^10.3.1", 187 | "jsbi": "^4.1.0", 188 | "tiny-invariant": "^1.1.0", 189 | "toformat": "^2.0.0" 190 | }, 191 | "engines": { 192 | "node": ">=10" 193 | } 194 | }, 195 | "node_modules/@cykura/sdk-core/node_modules/@project-serum/anchor": { 196 | "version": "0.22.1", 197 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.22.1.tgz", 198 | "integrity": "sha512-5pHeyvQhzLahIQ8aZymmDMZJAJFklN0joZdI+YIqFkK2uU/mlKr6rBLQjxysf/j1mLLiNG00tdyLfUtTAdQz7w==", 199 | "dependencies": { 200 | "@project-serum/borsh": "^0.2.5", 201 | "@solana/web3.js": "^1.17.0", 202 | "base64-js": "^1.5.1", 203 | "bn.js": "^5.1.2", 204 | "bs58": "^4.0.1", 205 | "buffer-layout": "^1.2.2", 206 | "camelcase": "^5.3.1", 207 | "cross-fetch": "^3.1.5", 208 | "crypto-hash": "^1.3.0", 209 | "eventemitter3": "^4.0.7", 210 | "find": "^0.3.0", 211 | "js-sha256": "^0.9.0", 212 | "pako": "^2.0.3", 213 | "snake-case": "^3.0.4", 214 | "toml": "^3.0.0" 215 | }, 216 | "engines": { 217 | "node": ">=11" 218 | } 219 | }, 220 | "node_modules/@cykura/sdk-core/node_modules/base-x": { 221 | "version": "3.0.9", 222 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 223 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 224 | "dependencies": { 225 | "safe-buffer": "^5.0.1" 226 | } 227 | }, 228 | "node_modules/@cykura/sdk-core/node_modules/bs58": { 229 | "version": "4.0.1", 230 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 231 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 232 | "dependencies": { 233 | "base-x": "^3.0.2" 234 | } 235 | }, 236 | "node_modules/@cykura/sdk-core/node_modules/camelcase": { 237 | "version": "5.3.1", 238 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 239 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 240 | "engines": { 241 | "node": ">=6" 242 | } 243 | }, 244 | "node_modules/@cykura/sdk-core/node_modules/cross-fetch": { 245 | "version": "3.1.8", 246 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 247 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 248 | "dependencies": { 249 | "node-fetch": "^2.6.12" 250 | } 251 | }, 252 | "node_modules/@dradex/idl": { 253 | "name": "@jup-ag/dradex-idl", 254 | "version": "0.2.1", 255 | "resolved": "https://registry.npmjs.org/@jup-ag/dradex-idl/-/dradex-idl-0.2.1.tgz", 256 | "integrity": "sha512-CZ5GZTLExy1+fw/tFOo6C4AbU0o/PcqJxxQpDp5UkSJ0SXbz7ZGMz9DfKu+htJuAwxwGgS/rbQfeBoU9fhDXuQ==", 257 | "dependencies": { 258 | "@solana/buffer-layout": "4.0.0", 259 | "bn.js": "5.2.1" 260 | }, 261 | "peerDependencies": { 262 | "@solana/web3.js": ">=1.4.0" 263 | } 264 | }, 265 | "node_modules/@dradex/idl/node_modules/@solana/buffer-layout": { 266 | "version": "4.0.0", 267 | "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz", 268 | "integrity": "sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==", 269 | "dependencies": { 270 | "buffer": "~6.0.3" 271 | }, 272 | "engines": { 273 | "node": ">=5.10" 274 | } 275 | }, 276 | "node_modules/@ethersproject/bytes": { 277 | "version": "5.7.0", 278 | "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", 279 | "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", 280 | "funding": [ 281 | { 282 | "type": "individual", 283 | "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" 284 | }, 285 | { 286 | "type": "individual", 287 | "url": "https://www.buymeacoffee.com/ricmoo" 288 | } 289 | ], 290 | "dependencies": { 291 | "@ethersproject/logger": "^5.7.0" 292 | } 293 | }, 294 | "node_modules/@ethersproject/logger": { 295 | "version": "5.7.0", 296 | "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", 297 | "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", 298 | "funding": [ 299 | { 300 | "type": "individual", 301 | "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" 302 | }, 303 | { 304 | "type": "individual", 305 | "url": "https://www.buymeacoffee.com/ricmoo" 306 | } 307 | ] 308 | }, 309 | "node_modules/@ethersproject/sha2": { 310 | "version": "5.7.0", 311 | "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", 312 | "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", 313 | "funding": [ 314 | { 315 | "type": "individual", 316 | "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" 317 | }, 318 | { 319 | "type": "individual", 320 | "url": "https://www.buymeacoffee.com/ricmoo" 321 | } 322 | ], 323 | "dependencies": { 324 | "@ethersproject/bytes": "^5.7.0", 325 | "@ethersproject/logger": "^5.7.0", 326 | "hash.js": "1.1.7" 327 | } 328 | }, 329 | "node_modules/@hapi/hoek": { 330 | "version": "9.3.0", 331 | "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", 332 | "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" 333 | }, 334 | "node_modules/@hapi/topo": { 335 | "version": "5.1.0", 336 | "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", 337 | "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", 338 | "dependencies": { 339 | "@hapi/hoek": "^9.0.0" 340 | } 341 | }, 342 | "node_modules/@jup-ag/api": { 343 | "version": "6.0.19", 344 | "resolved": "https://registry.npmjs.org/@jup-ag/api/-/api-6.0.19.tgz", 345 | "integrity": "sha512-5IjWtAhl8evXtnmvqHCiVXtBdcxS2gZdZ07Njkx6hCpo90C+WYKUbF0v/pPio+laKddcSh6xni+yCkgM+CRpTQ==", 346 | "dependencies": { 347 | "@project-serum/anchor": "^0.26.0", 348 | "@solana/web3.js": "^1.87.6", 349 | "bs58": "^5.0.0", 350 | "promise-retry": "2.0.1" 351 | } 352 | }, 353 | "node_modules/@jup-ag/core": { 354 | "version": "4.0.0-beta.3-fbed36", 355 | "resolved": "https://registry.npmjs.org/@jup-ag/core/-/core-4.0.0-beta.3-fbed36.tgz", 356 | "integrity": "sha512-ubk7LO0t3RfHAPJctq04u9SHMXPYPdxNB9ql3GzY7+H8ZC5l5KIqlhvXU8c49nclXNRO5kIkyMqrgCWKY5sOAQ==", 357 | "deprecated": "Jupiter core library is deprecated. The new API client is @jup-ag/api https://docs.jup.ag/api-v6", 358 | "dependencies": { 359 | "@jup-ag/crema-sdk-v2": "2.1.6", 360 | "@jup-ag/cykura-sdk": "0.1.25", 361 | "@jup-ag/cykura-sdk-core": "0.1.8", 362 | "@jup-ag/deltafi-sdk": "0.0.2", 363 | "@jup-ag/dradex-idl": "0.2.1", 364 | "@jup-ag/dradex-sdk": "0.2.3", 365 | "@jup-ag/goosefx-ssl-sdk": "1.2.17", 366 | "@jup-ag/invariant": "0.9.35", 367 | "@jup-ag/lifinity-sdk": "0.1.72", 368 | "@jup-ag/lifinity-sdk-v2": "1.0.8", 369 | "@jup-ag/math": "4.0.0-beta.3-fbed36", 370 | "@jup-ag/raydium-clmm-sdk": "1.0.2", 371 | "@jup-ag/whirlpools-sdk": "0.7.2", 372 | "@mercurial-finance/dynamic-amm-sdk": "0.1.12", 373 | "@mercurial-finance/optimist": "0.2.0", 374 | "@mercurial-finance/vault-sdk": "0.3.3", 375 | "@noble/hashes": "1.1.2", 376 | "@project-serum/anchor": "0.24.2", 377 | "@project-serum/serum": "0.13.65", 378 | "@pythnetwork/client": "2.7.3", 379 | "@saberhq/stableswap-sdk": "1.13.6", 380 | "@solana/spl-token": "0.1.8", 381 | "bignumber.js": "9.1.0", 382 | "bn.js": "5.2.1", 383 | "cross-fetch": "3.1.5", 384 | "decimal.js": "10.4.2", 385 | "fzstd": "~0.0.4", 386 | "jsbi": "4.3.0", 387 | "promise-retry": "2.0.1" 388 | }, 389 | "engines": { 390 | "node": ">=10" 391 | }, 392 | "peerDependencies": { 393 | "@solana/buffer-layout": "^3 || ^4", 394 | "@solana/web3.js": ">=1.42.0" 395 | } 396 | }, 397 | "node_modules/@jup-ag/core/node_modules/@project-serum/anchor": { 398 | "version": "0.24.2", 399 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", 400 | "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", 401 | "dependencies": { 402 | "@project-serum/borsh": "^0.2.5", 403 | "@solana/web3.js": "^1.36.0", 404 | "base64-js": "^1.5.1", 405 | "bn.js": "^5.1.2", 406 | "bs58": "^4.0.1", 407 | "buffer-layout": "^1.2.2", 408 | "camelcase": "^5.3.1", 409 | "cross-fetch": "^3.1.5", 410 | "crypto-hash": "^1.3.0", 411 | "eventemitter3": "^4.0.7", 412 | "js-sha256": "^0.9.0", 413 | "pako": "^2.0.3", 414 | "snake-case": "^3.0.4", 415 | "toml": "^3.0.0" 416 | }, 417 | "engines": { 418 | "node": ">=11" 419 | } 420 | }, 421 | "node_modules/@jup-ag/core/node_modules/base-x": { 422 | "version": "3.0.9", 423 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 424 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 425 | "dependencies": { 426 | "safe-buffer": "^5.0.1" 427 | } 428 | }, 429 | "node_modules/@jup-ag/core/node_modules/bs58": { 430 | "version": "4.0.1", 431 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 432 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 433 | "dependencies": { 434 | "base-x": "^3.0.2" 435 | } 436 | }, 437 | "node_modules/@jup-ag/core/node_modules/camelcase": { 438 | "version": "5.3.1", 439 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 440 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 441 | "engines": { 442 | "node": ">=6" 443 | } 444 | }, 445 | "node_modules/@jup-ag/core/node_modules/cross-fetch": { 446 | "version": "3.1.5", 447 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", 448 | "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", 449 | "dependencies": { 450 | "node-fetch": "2.6.7" 451 | } 452 | }, 453 | "node_modules/@jup-ag/core/node_modules/node-fetch": { 454 | "version": "2.6.7", 455 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 456 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 457 | "dependencies": { 458 | "whatwg-url": "^5.0.0" 459 | }, 460 | "engines": { 461 | "node": "4.x || >=6.0.0" 462 | }, 463 | "peerDependencies": { 464 | "encoding": "^0.1.0" 465 | }, 466 | "peerDependenciesMeta": { 467 | "encoding": { 468 | "optional": true 469 | } 470 | } 471 | }, 472 | "node_modules/@jup-ag/crema-sdk-v2": { 473 | "version": "2.1.6", 474 | "resolved": "https://registry.npmjs.org/@jup-ag/crema-sdk-v2/-/crema-sdk-v2-2.1.6.tgz", 475 | "integrity": "sha512-YhYfzbZCB0G0XciDO0vFXOpJsIn6kveVYolXuJ0toj2t7W0OM9NfvdtUvboUbhE92nJfzpHBScb3X9Qosb8KOA==", 476 | "dependencies": { 477 | "@cremafinance/anchor-contrib": "1.14.3", 478 | "@project-serum/anchor": "^0.24.0", 479 | "@solana/buffer-layout": "^4.0.0", 480 | "@solana/web3.js": "^1.50.1", 481 | "bn.js": "^5.2.1", 482 | "decimal.js": "^10.3.1", 483 | "jsbi": "^4.3.0" 484 | } 485 | }, 486 | "node_modules/@jup-ag/crema-sdk-v2/node_modules/@cremafinance/anchor-contrib": { 487 | "version": "1.14.3", 488 | "resolved": "https://registry.npmjs.org/@cremafinance/anchor-contrib/-/anchor-contrib-1.14.3.tgz", 489 | "integrity": "sha512-X57tRaZPWGpgCaYn0bXXDIQ6RzZedppwS5MhtGWm1EiM3flqi8RUxcY2VAsZikQ0inHvrDbEOY85hxPTx1VCtQ==", 490 | "dependencies": { 491 | "@cremafinance/solana-contrib": "^1.14.3", 492 | "eventemitter3": "^4.0.7", 493 | "lodash.camelcase": "^4.3.0", 494 | "lodash.mapvalues": "^4.6.0", 495 | "tslib": "^2.4.0" 496 | }, 497 | "funding": { 498 | "url": "https://www.coingecko.com/en/coins/crm" 499 | }, 500 | "peerDependencies": { 501 | "@project-serum/anchor": "^0.22 || ^0.23 || ^0.24", 502 | "@solana/web3.js": "^1.42", 503 | "bn.js": "^4 || ^5" 504 | } 505 | }, 506 | "node_modules/@jup-ag/crema-sdk-v2/node_modules/@project-serum/anchor": { 507 | "version": "0.24.2", 508 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", 509 | "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", 510 | "dependencies": { 511 | "@project-serum/borsh": "^0.2.5", 512 | "@solana/web3.js": "^1.36.0", 513 | "base64-js": "^1.5.1", 514 | "bn.js": "^5.1.2", 515 | "bs58": "^4.0.1", 516 | "buffer-layout": "^1.2.2", 517 | "camelcase": "^5.3.1", 518 | "cross-fetch": "^3.1.5", 519 | "crypto-hash": "^1.3.0", 520 | "eventemitter3": "^4.0.7", 521 | "js-sha256": "^0.9.0", 522 | "pako": "^2.0.3", 523 | "snake-case": "^3.0.4", 524 | "toml": "^3.0.0" 525 | }, 526 | "engines": { 527 | "node": ">=11" 528 | } 529 | }, 530 | "node_modules/@jup-ag/crema-sdk-v2/node_modules/base-x": { 531 | "version": "3.0.9", 532 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 533 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 534 | "dependencies": { 535 | "safe-buffer": "^5.0.1" 536 | } 537 | }, 538 | "node_modules/@jup-ag/crema-sdk-v2/node_modules/bs58": { 539 | "version": "4.0.1", 540 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 541 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 542 | "dependencies": { 543 | "base-x": "^3.0.2" 544 | } 545 | }, 546 | "node_modules/@jup-ag/crema-sdk-v2/node_modules/camelcase": { 547 | "version": "5.3.1", 548 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 549 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 550 | "engines": { 551 | "node": ">=6" 552 | } 553 | }, 554 | "node_modules/@jup-ag/crema-sdk-v2/node_modules/cross-fetch": { 555 | "version": "3.1.8", 556 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 557 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 558 | "dependencies": { 559 | "node-fetch": "^2.6.12" 560 | } 561 | }, 562 | "node_modules/@jup-ag/cykura-sdk": { 563 | "version": "0.1.25", 564 | "resolved": "https://registry.npmjs.org/@jup-ag/cykura-sdk/-/cykura-sdk-0.1.25.tgz", 565 | "integrity": "sha512-DuBcN7SKN3l9lS7l5zADITVeuTEQxwNW7QB7GzcsZiGysauok6z4GIaYUrqGgZ6Vtqa6tJhFAQu9wlylozRlXw==", 566 | "dependencies": { 567 | "@cykura/sdk-core": "npm:@jup-ag/cykura-sdk-core@0.1.8", 568 | "@project-serum/anchor": "^0.22.1", 569 | "@solana/web3.js": "^1.32.0", 570 | "tiny-invariant": "^1.1.0" 571 | }, 572 | "engines": { 573 | "node": ">=10" 574 | } 575 | }, 576 | "node_modules/@jup-ag/cykura-sdk-core": { 577 | "version": "0.1.8", 578 | "resolved": "https://registry.npmjs.org/@jup-ag/cykura-sdk-core/-/cykura-sdk-core-0.1.8.tgz", 579 | "integrity": "sha512-bVtDA4oEuzj/amuTPVlk1OFpdlYKK6H9nKWg6Tv6mn6MydS/ArC2EY2zuMHtWP+1YJ5CAwxHL/7Kl1k+7XBSoQ==", 580 | "dependencies": { 581 | "@project-serum/anchor": "^0.22.0", 582 | "big.js": "^5.2.2", 583 | "decimal.js": "^10.3.1", 584 | "jsbi": "^4.1.0", 585 | "tiny-invariant": "^1.1.0", 586 | "toformat": "^2.0.0" 587 | }, 588 | "engines": { 589 | "node": ">=10" 590 | } 591 | }, 592 | "node_modules/@jup-ag/cykura-sdk-core/node_modules/@project-serum/anchor": { 593 | "version": "0.22.1", 594 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.22.1.tgz", 595 | "integrity": "sha512-5pHeyvQhzLahIQ8aZymmDMZJAJFklN0joZdI+YIqFkK2uU/mlKr6rBLQjxysf/j1mLLiNG00tdyLfUtTAdQz7w==", 596 | "dependencies": { 597 | "@project-serum/borsh": "^0.2.5", 598 | "@solana/web3.js": "^1.17.0", 599 | "base64-js": "^1.5.1", 600 | "bn.js": "^5.1.2", 601 | "bs58": "^4.0.1", 602 | "buffer-layout": "^1.2.2", 603 | "camelcase": "^5.3.1", 604 | "cross-fetch": "^3.1.5", 605 | "crypto-hash": "^1.3.0", 606 | "eventemitter3": "^4.0.7", 607 | "find": "^0.3.0", 608 | "js-sha256": "^0.9.0", 609 | "pako": "^2.0.3", 610 | "snake-case": "^3.0.4", 611 | "toml": "^3.0.0" 612 | }, 613 | "engines": { 614 | "node": ">=11" 615 | } 616 | }, 617 | "node_modules/@jup-ag/cykura-sdk-core/node_modules/base-x": { 618 | "version": "3.0.9", 619 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 620 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 621 | "dependencies": { 622 | "safe-buffer": "^5.0.1" 623 | } 624 | }, 625 | "node_modules/@jup-ag/cykura-sdk-core/node_modules/bs58": { 626 | "version": "4.0.1", 627 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 628 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 629 | "dependencies": { 630 | "base-x": "^3.0.2" 631 | } 632 | }, 633 | "node_modules/@jup-ag/cykura-sdk-core/node_modules/camelcase": { 634 | "version": "5.3.1", 635 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 636 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 637 | "engines": { 638 | "node": ">=6" 639 | } 640 | }, 641 | "node_modules/@jup-ag/cykura-sdk-core/node_modules/cross-fetch": { 642 | "version": "3.1.8", 643 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 644 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 645 | "dependencies": { 646 | "node-fetch": "^2.6.12" 647 | } 648 | }, 649 | "node_modules/@jup-ag/cykura-sdk/node_modules/@project-serum/anchor": { 650 | "version": "0.22.1", 651 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.22.1.tgz", 652 | "integrity": "sha512-5pHeyvQhzLahIQ8aZymmDMZJAJFklN0joZdI+YIqFkK2uU/mlKr6rBLQjxysf/j1mLLiNG00tdyLfUtTAdQz7w==", 653 | "dependencies": { 654 | "@project-serum/borsh": "^0.2.5", 655 | "@solana/web3.js": "^1.17.0", 656 | "base64-js": "^1.5.1", 657 | "bn.js": "^5.1.2", 658 | "bs58": "^4.0.1", 659 | "buffer-layout": "^1.2.2", 660 | "camelcase": "^5.3.1", 661 | "cross-fetch": "^3.1.5", 662 | "crypto-hash": "^1.3.0", 663 | "eventemitter3": "^4.0.7", 664 | "find": "^0.3.0", 665 | "js-sha256": "^0.9.0", 666 | "pako": "^2.0.3", 667 | "snake-case": "^3.0.4", 668 | "toml": "^3.0.0" 669 | }, 670 | "engines": { 671 | "node": ">=11" 672 | } 673 | }, 674 | "node_modules/@jup-ag/cykura-sdk/node_modules/base-x": { 675 | "version": "3.0.9", 676 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 677 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 678 | "dependencies": { 679 | "safe-buffer": "^5.0.1" 680 | } 681 | }, 682 | "node_modules/@jup-ag/cykura-sdk/node_modules/bs58": { 683 | "version": "4.0.1", 684 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 685 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 686 | "dependencies": { 687 | "base-x": "^3.0.2" 688 | } 689 | }, 690 | "node_modules/@jup-ag/cykura-sdk/node_modules/camelcase": { 691 | "version": "5.3.1", 692 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 693 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 694 | "engines": { 695 | "node": ">=6" 696 | } 697 | }, 698 | "node_modules/@jup-ag/cykura-sdk/node_modules/cross-fetch": { 699 | "version": "3.1.8", 700 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 701 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 702 | "dependencies": { 703 | "node-fetch": "^2.6.12" 704 | } 705 | }, 706 | "node_modules/@jup-ag/deltafi-sdk": { 707 | "version": "0.0.2", 708 | "resolved": "https://registry.npmjs.org/@jup-ag/deltafi-sdk/-/deltafi-sdk-0.0.2.tgz", 709 | "integrity": "sha512-x5aibvJn4JSa7TnviYLDchkxOluvE9W209jy90YfuccNsIDRB3qhDK5rpSu8y2kInXJFA++CY5qTr2VklvdqtQ==", 710 | "dependencies": { 711 | "@project-serum/anchor": "~0.24.2", 712 | "@pythnetwork/client": "^2.5.1", 713 | "@solana/spl-token": "^0.1.8", 714 | "bigint-buffer": "^1.1.5", 715 | "bignumber.js": "^9.1.0", 716 | "bn.js": "^5.2.0" 717 | }, 718 | "peerDependencies": { 719 | "@solana/web3.js": ">=1.32.0" 720 | } 721 | }, 722 | "node_modules/@jup-ag/deltafi-sdk/node_modules/@project-serum/anchor": { 723 | "version": "0.24.2", 724 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", 725 | "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", 726 | "dependencies": { 727 | "@project-serum/borsh": "^0.2.5", 728 | "@solana/web3.js": "^1.36.0", 729 | "base64-js": "^1.5.1", 730 | "bn.js": "^5.1.2", 731 | "bs58": "^4.0.1", 732 | "buffer-layout": "^1.2.2", 733 | "camelcase": "^5.3.1", 734 | "cross-fetch": "^3.1.5", 735 | "crypto-hash": "^1.3.0", 736 | "eventemitter3": "^4.0.7", 737 | "js-sha256": "^0.9.0", 738 | "pako": "^2.0.3", 739 | "snake-case": "^3.0.4", 740 | "toml": "^3.0.0" 741 | }, 742 | "engines": { 743 | "node": ">=11" 744 | } 745 | }, 746 | "node_modules/@jup-ag/deltafi-sdk/node_modules/base-x": { 747 | "version": "3.0.9", 748 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 749 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 750 | "dependencies": { 751 | "safe-buffer": "^5.0.1" 752 | } 753 | }, 754 | "node_modules/@jup-ag/deltafi-sdk/node_modules/bs58": { 755 | "version": "4.0.1", 756 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 757 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 758 | "dependencies": { 759 | "base-x": "^3.0.2" 760 | } 761 | }, 762 | "node_modules/@jup-ag/deltafi-sdk/node_modules/camelcase": { 763 | "version": "5.3.1", 764 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 765 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 766 | "engines": { 767 | "node": ">=6" 768 | } 769 | }, 770 | "node_modules/@jup-ag/deltafi-sdk/node_modules/cross-fetch": { 771 | "version": "3.1.8", 772 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 773 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 774 | "dependencies": { 775 | "node-fetch": "^2.6.12" 776 | } 777 | }, 778 | "node_modules/@jup-ag/dradex-idl": { 779 | "version": "0.2.1", 780 | "resolved": "https://registry.npmjs.org/@jup-ag/dradex-idl/-/dradex-idl-0.2.1.tgz", 781 | "integrity": "sha512-CZ5GZTLExy1+fw/tFOo6C4AbU0o/PcqJxxQpDp5UkSJ0SXbz7ZGMz9DfKu+htJuAwxwGgS/rbQfeBoU9fhDXuQ==", 782 | "dependencies": { 783 | "@solana/buffer-layout": "4.0.0", 784 | "bn.js": "5.2.1" 785 | }, 786 | "peerDependencies": { 787 | "@solana/web3.js": ">=1.4.0" 788 | } 789 | }, 790 | "node_modules/@jup-ag/dradex-idl/node_modules/@solana/buffer-layout": { 791 | "version": "4.0.0", 792 | "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz", 793 | "integrity": "sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==", 794 | "dependencies": { 795 | "buffer": "~6.0.3" 796 | }, 797 | "engines": { 798 | "node": ">=5.10" 799 | } 800 | }, 801 | "node_modules/@jup-ag/dradex-sdk": { 802 | "version": "0.2.3", 803 | "resolved": "https://registry.npmjs.org/@jup-ag/dradex-sdk/-/dradex-sdk-0.2.3.tgz", 804 | "integrity": "sha512-VGvJzy1aYFs7pdEBsyHipLDODG2JoczCBbNXkUjOMqf0RK8Cq0Ofwa6znDKDqK63sO+JdOD41dyQoswwsFUmVQ==", 805 | "dependencies": { 806 | "@dradex/idl": "npm:@jup-ag/dradex-idl@0.2.1", 807 | "@solana/spl-token": "^0.3.4", 808 | "decimal.js": "^10.3.1", 809 | "jsbi": "^4.3.0" 810 | }, 811 | "peerDependencies": { 812 | "@project-serum/anchor": ">=0.25.0" 813 | } 814 | }, 815 | "node_modules/@jup-ag/dradex-sdk/node_modules/@solana/spl-token": { 816 | "version": "0.3.11", 817 | "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.11.tgz", 818 | "integrity": "sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==", 819 | "dependencies": { 820 | "@solana/buffer-layout": "^4.0.0", 821 | "@solana/buffer-layout-utils": "^0.2.0", 822 | "@solana/spl-token-metadata": "^0.1.2", 823 | "buffer": "^6.0.3" 824 | }, 825 | "engines": { 826 | "node": ">=16" 827 | }, 828 | "peerDependencies": { 829 | "@solana/web3.js": "^1.88.0" 830 | } 831 | }, 832 | "node_modules/@jup-ag/goosefx-ssl-sdk": { 833 | "version": "1.2.17", 834 | "resolved": "https://registry.npmjs.org/@jup-ag/goosefx-ssl-sdk/-/goosefx-ssl-sdk-1.2.17.tgz", 835 | "integrity": "sha512-ouBfsJqLeiWXccx026gEuOtoEo67uVt9FAFA3rP8fbX5DW9hS5n40vwGbAVXbftcbfJDdymsSep95WdjYJ4rZA==", 836 | "dependencies": { 837 | "@project-serum/anchor": "^0.17.1-beta.1", 838 | "@pythnetwork/client": "^2.8.0", 839 | "@solana/buffer-layout": "^4.0.0", 840 | "@solana/spl-token": "^0.2.0", 841 | "@solana/web3.js": "^1.41.1" 842 | } 843 | }, 844 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/@coral-xyz/anchor": { 845 | "version": "0.29.0", 846 | "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz", 847 | "integrity": "sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==", 848 | "dependencies": { 849 | "@coral-xyz/borsh": "^0.29.0", 850 | "@noble/hashes": "^1.3.1", 851 | "@solana/web3.js": "^1.68.0", 852 | "bn.js": "^5.1.2", 853 | "bs58": "^4.0.1", 854 | "buffer-layout": "^1.2.2", 855 | "camelcase": "^6.3.0", 856 | "cross-fetch": "^3.1.5", 857 | "crypto-hash": "^1.3.0", 858 | "eventemitter3": "^4.0.7", 859 | "pako": "^2.0.3", 860 | "snake-case": "^3.0.4", 861 | "superstruct": "^0.15.4", 862 | "toml": "^3.0.0" 863 | }, 864 | "engines": { 865 | "node": ">=11" 866 | } 867 | }, 868 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/@coral-xyz/anchor/node_modules/@coral-xyz/borsh": { 869 | "version": "0.29.0", 870 | "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.29.0.tgz", 871 | "integrity": "sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==", 872 | "dependencies": { 873 | "bn.js": "^5.1.2", 874 | "buffer-layout": "^1.2.0" 875 | }, 876 | "engines": { 877 | "node": ">=10" 878 | }, 879 | "peerDependencies": { 880 | "@solana/web3.js": "^1.68.0" 881 | } 882 | }, 883 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/@coral-xyz/anchor/node_modules/camelcase": { 884 | "version": "6.3.0", 885 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 886 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 887 | "engines": { 888 | "node": ">=10" 889 | }, 890 | "funding": { 891 | "url": "https://github.com/sponsors/sindresorhus" 892 | } 893 | }, 894 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/@noble/hashes": { 895 | "version": "1.4.0", 896 | "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", 897 | "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", 898 | "engines": { 899 | "node": ">= 16" 900 | }, 901 | "funding": { 902 | "url": "https://paulmillr.com/funding/" 903 | } 904 | }, 905 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/@project-serum/anchor": { 906 | "version": "0.17.1-beta.2", 907 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.17.1-beta.2.tgz", 908 | "integrity": "sha512-uUqojV+oTmzjf/OelVj7anD71/wWnkdKAaNpz4Q57T06XUaFPnNbOvKh7c991/WDVGXrdDCQcx6nRQEP1tQn2Q==", 909 | "dependencies": { 910 | "@project-serum/borsh": "^0.2.2", 911 | "@solana/web3.js": "^1.17.0", 912 | "base64-js": "^1.5.1", 913 | "bn.js": "^5.1.2", 914 | "bs58": "^4.0.1", 915 | "buffer-layout": "^1.2.0", 916 | "camelcase": "^5.3.1", 917 | "crypto-hash": "^1.3.0", 918 | "eventemitter3": "^4.0.7", 919 | "find": "^0.3.0", 920 | "js-sha256": "^0.9.0", 921 | "pako": "^2.0.3", 922 | "snake-case": "^3.0.4", 923 | "toml": "^3.0.0" 924 | }, 925 | "engines": { 926 | "node": ">=11" 927 | } 928 | }, 929 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/@pythnetwork/client": { 930 | "version": "2.21.0", 931 | "resolved": "https://registry.npmjs.org/@pythnetwork/client/-/client-2.21.0.tgz", 932 | "integrity": "sha512-jqUuPLuVKRNUsZfwLuvK/MwnJ3LIrIxBNoz43xt0fjvVuH5QyTlz51ek76CkeKfCbomGKe41Vq7bvn8aqWVOGA==", 933 | "dependencies": { 934 | "@coral-xyz/anchor": "^0.29.0", 935 | "@coral-xyz/borsh": "^0.28.0", 936 | "buffer": "^6.0.1" 937 | }, 938 | "peerDependencies": { 939 | "@solana/web3.js": "^1.30.2" 940 | } 941 | }, 942 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/@solana/spl-token": { 943 | "version": "0.2.0", 944 | "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.2.0.tgz", 945 | "integrity": "sha512-RWcn31OXtdqIxmkzQfB2R+WpsJOVS6rKuvpxJFjvik2LyODd+WN58ZP3Rpjpro03fscGAkzlFuP3r42doRJgyQ==", 946 | "dependencies": { 947 | "@solana/buffer-layout": "^4.0.0", 948 | "@solana/buffer-layout-utils": "^0.2.0", 949 | "@solana/web3.js": "^1.32.0", 950 | "start-server-and-test": "^1.14.0" 951 | }, 952 | "engines": { 953 | "node": ">= 14" 954 | } 955 | }, 956 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/base-x": { 957 | "version": "3.0.9", 958 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 959 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 960 | "dependencies": { 961 | "safe-buffer": "^5.0.1" 962 | } 963 | }, 964 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/bs58": { 965 | "version": "4.0.1", 966 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 967 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 968 | "dependencies": { 969 | "base-x": "^3.0.2" 970 | } 971 | }, 972 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/camelcase": { 973 | "version": "5.3.1", 974 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 975 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 976 | "engines": { 977 | "node": ">=6" 978 | } 979 | }, 980 | "node_modules/@jup-ag/goosefx-ssl-sdk/node_modules/cross-fetch": { 981 | "version": "3.1.8", 982 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 983 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 984 | "dependencies": { 985 | "node-fetch": "^2.6.12" 986 | } 987 | }, 988 | "node_modules/@jup-ag/invariant": { 989 | "version": "0.9.35", 990 | "resolved": "https://registry.npmjs.org/@jup-ag/invariant/-/invariant-0.9.35.tgz", 991 | "integrity": "sha512-5OPWvfOQYfXMeI4JjlCxTvoF9MR9wVQ+zVGAtzfgrfkM0sFslJ0c+4pn1TwySc+FGw4MDehrKUMj86VtqZnYZg==", 992 | "dependencies": { 993 | "@project-serum/anchor": "^0.24.0", 994 | "@solana/spl-token-registry": "^0.2.4484", 995 | "invariant": "^2.2.4" 996 | } 997 | }, 998 | "node_modules/@jup-ag/invariant/node_modules/@project-serum/anchor": { 999 | "version": "0.24.2", 1000 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", 1001 | "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", 1002 | "dependencies": { 1003 | "@project-serum/borsh": "^0.2.5", 1004 | "@solana/web3.js": "^1.36.0", 1005 | "base64-js": "^1.5.1", 1006 | "bn.js": "^5.1.2", 1007 | "bs58": "^4.0.1", 1008 | "buffer-layout": "^1.2.2", 1009 | "camelcase": "^5.3.1", 1010 | "cross-fetch": "^3.1.5", 1011 | "crypto-hash": "^1.3.0", 1012 | "eventemitter3": "^4.0.7", 1013 | "js-sha256": "^0.9.0", 1014 | "pako": "^2.0.3", 1015 | "snake-case": "^3.0.4", 1016 | "toml": "^3.0.0" 1017 | }, 1018 | "engines": { 1019 | "node": ">=11" 1020 | } 1021 | }, 1022 | "node_modules/@jup-ag/invariant/node_modules/base-x": { 1023 | "version": "3.0.9", 1024 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1025 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1026 | "dependencies": { 1027 | "safe-buffer": "^5.0.1" 1028 | } 1029 | }, 1030 | "node_modules/@jup-ag/invariant/node_modules/bs58": { 1031 | "version": "4.0.1", 1032 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1033 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1034 | "dependencies": { 1035 | "base-x": "^3.0.2" 1036 | } 1037 | }, 1038 | "node_modules/@jup-ag/invariant/node_modules/camelcase": { 1039 | "version": "5.3.1", 1040 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1041 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1042 | "engines": { 1043 | "node": ">=6" 1044 | } 1045 | }, 1046 | "node_modules/@jup-ag/invariant/node_modules/cross-fetch": { 1047 | "version": "3.1.8", 1048 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 1049 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 1050 | "dependencies": { 1051 | "node-fetch": "^2.6.12" 1052 | } 1053 | }, 1054 | "node_modules/@jup-ag/lifinity-sdk": { 1055 | "version": "0.1.72", 1056 | "resolved": "https://registry.npmjs.org/@jup-ag/lifinity-sdk/-/lifinity-sdk-0.1.72.tgz", 1057 | "integrity": "sha512-nHfpaSFsLGjXg9xG/6k4Miik9X4MuGGi5KxYdtSe2a4vR8fQxXNxY/1ATPObAsy2dKV8K7ppkUSwahbXOtLvdQ==", 1058 | "dependencies": { 1059 | "@project-serum/anchor": "^0.20.1", 1060 | "@project-serum/borsh": "^0.2.5", 1061 | "@project-serum/serum": "^0.13.61", 1062 | "@pythnetwork/client": "^2.5.1", 1063 | "@solana/spl-token": "^0.1.8", 1064 | "@solana/web3.js": "1.31.0", 1065 | "decimal.js": "^10.3.1" 1066 | } 1067 | }, 1068 | "node_modules/@jup-ag/lifinity-sdk-v2": { 1069 | "version": "1.0.8", 1070 | "resolved": "https://registry.npmjs.org/@jup-ag/lifinity-sdk-v2/-/lifinity-sdk-v2-1.0.8.tgz", 1071 | "integrity": "sha512-9NKK3ky3mhCVRg93lkYYf6POTUXc6p033l4i4mYaUbqh3s0MNRn1zKqMoQmqSuJDVFzKQlVWWKLkuYv2+Wr86A==", 1072 | "dependencies": { 1073 | "@project-serum/anchor": "0.24.2", 1074 | "@project-serum/borsh": "^0.2.5", 1075 | "@project-serum/serum": "^0.13.61", 1076 | "@pythnetwork/client": "^2.5.1", 1077 | "@solana/spl-token": "^0.1.8", 1078 | "@solana/web3.js": "^1.31.0", 1079 | "decimal.js": "^10.3.1" 1080 | } 1081 | }, 1082 | "node_modules/@jup-ag/lifinity-sdk-v2/node_modules/@project-serum/anchor": { 1083 | "version": "0.24.2", 1084 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", 1085 | "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", 1086 | "dependencies": { 1087 | "@project-serum/borsh": "^0.2.5", 1088 | "@solana/web3.js": "^1.36.0", 1089 | "base64-js": "^1.5.1", 1090 | "bn.js": "^5.1.2", 1091 | "bs58": "^4.0.1", 1092 | "buffer-layout": "^1.2.2", 1093 | "camelcase": "^5.3.1", 1094 | "cross-fetch": "^3.1.5", 1095 | "crypto-hash": "^1.3.0", 1096 | "eventemitter3": "^4.0.7", 1097 | "js-sha256": "^0.9.0", 1098 | "pako": "^2.0.3", 1099 | "snake-case": "^3.0.4", 1100 | "toml": "^3.0.0" 1101 | }, 1102 | "engines": { 1103 | "node": ">=11" 1104 | } 1105 | }, 1106 | "node_modules/@jup-ag/lifinity-sdk-v2/node_modules/base-x": { 1107 | "version": "3.0.9", 1108 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1109 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1110 | "dependencies": { 1111 | "safe-buffer": "^5.0.1" 1112 | } 1113 | }, 1114 | "node_modules/@jup-ag/lifinity-sdk-v2/node_modules/bs58": { 1115 | "version": "4.0.1", 1116 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1117 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1118 | "dependencies": { 1119 | "base-x": "^3.0.2" 1120 | } 1121 | }, 1122 | "node_modules/@jup-ag/lifinity-sdk-v2/node_modules/camelcase": { 1123 | "version": "5.3.1", 1124 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1125 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1126 | "engines": { 1127 | "node": ">=6" 1128 | } 1129 | }, 1130 | "node_modules/@jup-ag/lifinity-sdk-v2/node_modules/cross-fetch": { 1131 | "version": "3.1.8", 1132 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 1133 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 1134 | "dependencies": { 1135 | "node-fetch": "^2.6.12" 1136 | } 1137 | }, 1138 | "node_modules/@jup-ag/lifinity-sdk/node_modules/@project-serum/anchor": { 1139 | "version": "0.20.1", 1140 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.20.1.tgz", 1141 | "integrity": "sha512-2TuBmGUn9qeYz6sJINJlElrBuPsaUAtYyUsJ3XplEBf1pczrANAgs5ceJUFzdiqGEWLn+84ObSdBeChT/AXYFA==", 1142 | "dependencies": { 1143 | "@project-serum/borsh": "^0.2.2", 1144 | "@solana/web3.js": "^1.17.0", 1145 | "base64-js": "^1.5.1", 1146 | "bn.js": "^5.1.2", 1147 | "bs58": "^4.0.1", 1148 | "buffer-layout": "^1.2.2", 1149 | "camelcase": "^5.3.1", 1150 | "crypto-hash": "^1.3.0", 1151 | "eventemitter3": "^4.0.7", 1152 | "find": "^0.3.0", 1153 | "js-sha256": "^0.9.0", 1154 | "pako": "^2.0.3", 1155 | "snake-case": "^3.0.4", 1156 | "toml": "^3.0.0" 1157 | }, 1158 | "engines": { 1159 | "node": ">=11" 1160 | } 1161 | }, 1162 | "node_modules/@jup-ag/lifinity-sdk/node_modules/@solana/buffer-layout": { 1163 | "version": "3.0.0", 1164 | "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz", 1165 | "integrity": "sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==", 1166 | "dependencies": { 1167 | "buffer": "~6.0.3" 1168 | }, 1169 | "engines": { 1170 | "node": ">=5.10" 1171 | } 1172 | }, 1173 | "node_modules/@jup-ag/lifinity-sdk/node_modules/@solana/web3.js": { 1174 | "version": "1.31.0", 1175 | "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.31.0.tgz", 1176 | "integrity": "sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==", 1177 | "dependencies": { 1178 | "@babel/runtime": "^7.12.5", 1179 | "@ethersproject/sha2": "^5.5.0", 1180 | "@solana/buffer-layout": "^3.0.0", 1181 | "bn.js": "^5.0.0", 1182 | "borsh": "^0.4.0", 1183 | "bs58": "^4.0.1", 1184 | "buffer": "6.0.1", 1185 | "cross-fetch": "^3.1.4", 1186 | "jayson": "^3.4.4", 1187 | "js-sha3": "^0.8.0", 1188 | "rpc-websockets": "^7.4.2", 1189 | "secp256k1": "^4.0.2", 1190 | "superstruct": "^0.14.2", 1191 | "tweetnacl": "^1.0.0" 1192 | }, 1193 | "engines": { 1194 | "node": ">=12.20.0" 1195 | } 1196 | }, 1197 | "node_modules/@jup-ag/lifinity-sdk/node_modules/@solana/web3.js/node_modules/buffer": { 1198 | "version": "6.0.1", 1199 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", 1200 | "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", 1201 | "funding": [ 1202 | { 1203 | "type": "github", 1204 | "url": "https://github.com/sponsors/feross" 1205 | }, 1206 | { 1207 | "type": "patreon", 1208 | "url": "https://www.patreon.com/feross" 1209 | }, 1210 | { 1211 | "type": "consulting", 1212 | "url": "https://feross.org/support" 1213 | } 1214 | ], 1215 | "dependencies": { 1216 | "base64-js": "^1.3.1", 1217 | "ieee754": "^1.2.1" 1218 | } 1219 | }, 1220 | "node_modules/@jup-ag/lifinity-sdk/node_modules/@types/node": { 1221 | "version": "12.20.55", 1222 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", 1223 | "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" 1224 | }, 1225 | "node_modules/@jup-ag/lifinity-sdk/node_modules/base-x": { 1226 | "version": "3.0.9", 1227 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1228 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1229 | "dependencies": { 1230 | "safe-buffer": "^5.0.1" 1231 | } 1232 | }, 1233 | "node_modules/@jup-ag/lifinity-sdk/node_modules/borsh": { 1234 | "version": "0.4.0", 1235 | "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.4.0.tgz", 1236 | "integrity": "sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==", 1237 | "dependencies": { 1238 | "@types/bn.js": "^4.11.5", 1239 | "bn.js": "^5.0.0", 1240 | "bs58": "^4.0.0", 1241 | "text-encoding-utf-8": "^1.0.2" 1242 | } 1243 | }, 1244 | "node_modules/@jup-ag/lifinity-sdk/node_modules/bs58": { 1245 | "version": "4.0.1", 1246 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1247 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1248 | "dependencies": { 1249 | "base-x": "^3.0.2" 1250 | } 1251 | }, 1252 | "node_modules/@jup-ag/lifinity-sdk/node_modules/camelcase": { 1253 | "version": "5.3.1", 1254 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1255 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1256 | "engines": { 1257 | "node": ">=6" 1258 | } 1259 | }, 1260 | "node_modules/@jup-ag/lifinity-sdk/node_modules/cross-fetch": { 1261 | "version": "3.1.8", 1262 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 1263 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 1264 | "dependencies": { 1265 | "node-fetch": "^2.6.12" 1266 | } 1267 | }, 1268 | "node_modules/@jup-ag/lifinity-sdk/node_modules/jayson": { 1269 | "version": "3.7.0", 1270 | "resolved": "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz", 1271 | "integrity": "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==", 1272 | "dependencies": { 1273 | "@types/connect": "^3.4.33", 1274 | "@types/node": "^12.12.54", 1275 | "@types/ws": "^7.4.4", 1276 | "commander": "^2.20.3", 1277 | "delay": "^5.0.0", 1278 | "es6-promisify": "^5.0.0", 1279 | "eyes": "^0.1.8", 1280 | "isomorphic-ws": "^4.0.1", 1281 | "json-stringify-safe": "^5.0.1", 1282 | "JSONStream": "^1.3.5", 1283 | "lodash": "^4.17.20", 1284 | "uuid": "^8.3.2", 1285 | "ws": "^7.4.5" 1286 | }, 1287 | "bin": { 1288 | "jayson": "bin/jayson.js" 1289 | }, 1290 | "engines": { 1291 | "node": ">=8" 1292 | } 1293 | }, 1294 | "node_modules/@jup-ag/lifinity-sdk/node_modules/superstruct": { 1295 | "version": "0.14.2", 1296 | "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", 1297 | "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" 1298 | }, 1299 | "node_modules/@jup-ag/math": { 1300 | "version": "4.0.0-beta.3-fbed36", 1301 | "resolved": "https://registry.npmjs.org/@jup-ag/math/-/math-4.0.0-beta.3-fbed36.tgz", 1302 | "integrity": "sha512-EBBOhmPaTJFzjih8ZNiOpTr2I3W2UJ17bPLoFRvKDwAlXMKNjsEwVFh+2toz0LBqqJIJPS+6Q6hRGJXommfUaA==", 1303 | "dependencies": { 1304 | "decimal.js": "10.4.2", 1305 | "jsbi": "4.3.0" 1306 | }, 1307 | "engines": { 1308 | "node": ">=10" 1309 | } 1310 | }, 1311 | "node_modules/@jup-ag/raydium-clmm-sdk": { 1312 | "version": "1.0.2", 1313 | "resolved": "https://registry.npmjs.org/@jup-ag/raydium-clmm-sdk/-/raydium-clmm-sdk-1.0.2.tgz", 1314 | "integrity": "sha512-cFTmIqnKpoJeEgvjMTc3ylFO2mhfEDWDJVqP2t5rmxTy18MT6g7qXSTT3c8HVB3pM3TJAms1CA0MBC/0RS9YwQ==", 1315 | "dependencies": { 1316 | "@project-serum/anchor": "0.24.2", 1317 | "@project-serum/borsh": "^0.2.5", 1318 | "@solana/spl-token": "0.1.8", 1319 | "@solana/web3.js": "^1.66.2", 1320 | "decimal.js": "^10.3.1" 1321 | } 1322 | }, 1323 | "node_modules/@jup-ag/raydium-clmm-sdk/node_modules/@project-serum/anchor": { 1324 | "version": "0.24.2", 1325 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", 1326 | "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", 1327 | "dependencies": { 1328 | "@project-serum/borsh": "^0.2.5", 1329 | "@solana/web3.js": "^1.36.0", 1330 | "base64-js": "^1.5.1", 1331 | "bn.js": "^5.1.2", 1332 | "bs58": "^4.0.1", 1333 | "buffer-layout": "^1.2.2", 1334 | "camelcase": "^5.3.1", 1335 | "cross-fetch": "^3.1.5", 1336 | "crypto-hash": "^1.3.0", 1337 | "eventemitter3": "^4.0.7", 1338 | "js-sha256": "^0.9.0", 1339 | "pako": "^2.0.3", 1340 | "snake-case": "^3.0.4", 1341 | "toml": "^3.0.0" 1342 | }, 1343 | "engines": { 1344 | "node": ">=11" 1345 | } 1346 | }, 1347 | "node_modules/@jup-ag/raydium-clmm-sdk/node_modules/base-x": { 1348 | "version": "3.0.9", 1349 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1350 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1351 | "dependencies": { 1352 | "safe-buffer": "^5.0.1" 1353 | } 1354 | }, 1355 | "node_modules/@jup-ag/raydium-clmm-sdk/node_modules/bs58": { 1356 | "version": "4.0.1", 1357 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1358 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1359 | "dependencies": { 1360 | "base-x": "^3.0.2" 1361 | } 1362 | }, 1363 | "node_modules/@jup-ag/raydium-clmm-sdk/node_modules/camelcase": { 1364 | "version": "5.3.1", 1365 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1366 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1367 | "engines": { 1368 | "node": ">=6" 1369 | } 1370 | }, 1371 | "node_modules/@jup-ag/raydium-clmm-sdk/node_modules/cross-fetch": { 1372 | "version": "3.1.8", 1373 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 1374 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 1375 | "dependencies": { 1376 | "node-fetch": "^2.6.12" 1377 | } 1378 | }, 1379 | "node_modules/@jup-ag/whirlpools-sdk": { 1380 | "version": "0.7.2", 1381 | "resolved": "https://registry.npmjs.org/@jup-ag/whirlpools-sdk/-/whirlpools-sdk-0.7.2.tgz", 1382 | "integrity": "sha512-q3QPZ4QCj5s9eaY000jmIPiaFVCuJ/cYAxdzR+0gEeDCgrcBl3eJsxvaIEnyElM6x2r6/lc+yhjJMP0kfrUYxQ==", 1383 | "dependencies": { 1384 | "@orca-so/common-sdk": "^0.1.4", 1385 | "@project-serum/anchor": "~0.25.0", 1386 | "@solana/spl-token": "^0.1.8", 1387 | "@solana/web3.js": "^1.66.0", 1388 | "decimal.js": "^10.3.1", 1389 | "tiny-invariant": "^1.2.0" 1390 | } 1391 | }, 1392 | "node_modules/@jup-ag/whirlpools-sdk/node_modules/@project-serum/anchor": { 1393 | "version": "0.25.0", 1394 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.25.0.tgz", 1395 | "integrity": "sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A==", 1396 | "dependencies": { 1397 | "@project-serum/borsh": "^0.2.5", 1398 | "@solana/web3.js": "^1.36.0", 1399 | "base64-js": "^1.5.1", 1400 | "bn.js": "^5.1.2", 1401 | "bs58": "^4.0.1", 1402 | "buffer-layout": "^1.2.2", 1403 | "camelcase": "^5.3.1", 1404 | "cross-fetch": "^3.1.5", 1405 | "crypto-hash": "^1.3.0", 1406 | "eventemitter3": "^4.0.7", 1407 | "js-sha256": "^0.9.0", 1408 | "pako": "^2.0.3", 1409 | "snake-case": "^3.0.4", 1410 | "superstruct": "^0.15.4", 1411 | "toml": "^3.0.0" 1412 | }, 1413 | "engines": { 1414 | "node": ">=11" 1415 | } 1416 | }, 1417 | "node_modules/@jup-ag/whirlpools-sdk/node_modules/base-x": { 1418 | "version": "3.0.9", 1419 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1420 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1421 | "dependencies": { 1422 | "safe-buffer": "^5.0.1" 1423 | } 1424 | }, 1425 | "node_modules/@jup-ag/whirlpools-sdk/node_modules/bs58": { 1426 | "version": "4.0.1", 1427 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1428 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1429 | "dependencies": { 1430 | "base-x": "^3.0.2" 1431 | } 1432 | }, 1433 | "node_modules/@jup-ag/whirlpools-sdk/node_modules/camelcase": { 1434 | "version": "5.3.1", 1435 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1436 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1437 | "engines": { 1438 | "node": ">=6" 1439 | } 1440 | }, 1441 | "node_modules/@jup-ag/whirlpools-sdk/node_modules/cross-fetch": { 1442 | "version": "3.1.8", 1443 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 1444 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 1445 | "dependencies": { 1446 | "node-fetch": "^2.6.12" 1447 | } 1448 | }, 1449 | "node_modules/@mercurial-finance/apricot-sdk": { 1450 | "version": "0.17.6", 1451 | "resolved": "https://registry.npmjs.org/@mercurial-finance/apricot-sdk/-/apricot-sdk-0.17.6.tgz", 1452 | "integrity": "sha512-/x/nMksG2h3uB7G4bPVXk0YjvsGVUniSikRmCf/VFFly9BqcRcBtSk4aMdSvIjYsJrpSzWVrHXUYeOtUF1ObDA==", 1453 | "dependencies": { 1454 | "@solana/spl-token": "0.1.8", 1455 | "@solana/web3.js": "^1.37.0", 1456 | "decimal.js": "^10.3.1", 1457 | "tiny-invariant": "^1.1.0" 1458 | }, 1459 | "engines": { 1460 | "node": ">=10" 1461 | } 1462 | }, 1463 | "node_modules/@mercurial-finance/dynamic-amm-sdk": { 1464 | "version": "0.1.12", 1465 | "resolved": "https://registry.npmjs.org/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.12.tgz", 1466 | "integrity": "sha512-MscZP0Mpzs0oo7KsOZlQWvpwKSKAE+baf0E5usseuVnMvarYDDw/7gnZFt2Ot/lFRxv79McqwcV/mLJWW25OnQ==", 1467 | "dependencies": { 1468 | "@mercurial-finance/vault-sdk": "0.3.3", 1469 | "@project-serum/anchor": "0.24.2", 1470 | "@saberhq/anchor-contrib": "^1.13.32", 1471 | "@saberhq/stableswap-sdk": "^1.13.32", 1472 | "@saberhq/token-utils": "1.13.32", 1473 | "@solana/spl-token": "0.1.8", 1474 | "@solana/spl-token-registry": "0.2.1105", 1475 | "@solana/web3.js": "^1.42.0", 1476 | "bn-sqrt": "^1.0.0", 1477 | "bn.js": "5.2.1", 1478 | "decimal.js": "^10.4.1", 1479 | "dotenv": "^16.0.1", 1480 | "invariant": "^2.2.4", 1481 | "jsbi": "^4.3.0" 1482 | }, 1483 | "peerDependencies": { 1484 | "@solana/buffer-layout": "^3 || ^4" 1485 | } 1486 | }, 1487 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@project-serum/anchor": { 1488 | "version": "0.24.2", 1489 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", 1490 | "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", 1491 | "dependencies": { 1492 | "@project-serum/borsh": "^0.2.5", 1493 | "@solana/web3.js": "^1.36.0", 1494 | "base64-js": "^1.5.1", 1495 | "bn.js": "^5.1.2", 1496 | "bs58": "^4.0.1", 1497 | "buffer-layout": "^1.2.2", 1498 | "camelcase": "^5.3.1", 1499 | "cross-fetch": "^3.1.5", 1500 | "crypto-hash": "^1.3.0", 1501 | "eventemitter3": "^4.0.7", 1502 | "js-sha256": "^0.9.0", 1503 | "pako": "^2.0.3", 1504 | "snake-case": "^3.0.4", 1505 | "toml": "^3.0.0" 1506 | }, 1507 | "engines": { 1508 | "node": ">=11" 1509 | } 1510 | }, 1511 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@saberhq/anchor-contrib": { 1512 | "version": "1.15.0", 1513 | "resolved": "https://registry.npmjs.org/@saberhq/anchor-contrib/-/anchor-contrib-1.15.0.tgz", 1514 | "integrity": "sha512-RYXcwaEY1xS39KaPLKbnGyewsAfI3y6OXH2V7E0OjIP3GHTlEkoXtN/SEOLvFAfQC+Vx/31fyhopKC/rQ4H/GQ==", 1515 | "dependencies": { 1516 | "@saberhq/solana-contrib": "^1.15.0", 1517 | "eventemitter3": "^4.0.7", 1518 | "lodash.camelcase": "^4.3.0", 1519 | "lodash.mapvalues": "^4.6.0", 1520 | "tslib": "^2.6.2" 1521 | }, 1522 | "funding": { 1523 | "url": "https://www.coingecko.com/en/coins/saber" 1524 | }, 1525 | "peerDependencies": { 1526 | "@project-serum/anchor": "^0.22 || ^0.23 || ^0.24", 1527 | "@solana/web3.js": "^1.42", 1528 | "bn.js": "^4 || ^5" 1529 | } 1530 | }, 1531 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@saberhq/stableswap-sdk": { 1532 | "version": "1.15.0", 1533 | "resolved": "https://registry.npmjs.org/@saberhq/stableswap-sdk/-/stableswap-sdk-1.15.0.tgz", 1534 | "integrity": "sha512-YbzvQFRy96wuZ9ck+jHttZX5TKDVYCN1ErScfw+3NWMNkGWuUj3LjqMz2B1b6lJ19D0BXgB/BqmgQvy0CVKm8A==", 1535 | "dependencies": { 1536 | "@saberhq/solana-contrib": "^1.15.0", 1537 | "@saberhq/token-utils": "^1.15.0", 1538 | "@solana/buffer-layout": "^4.0.0", 1539 | "tiny-invariant": "^1.3.1", 1540 | "tslib": "^2.6.2" 1541 | }, 1542 | "engines": { 1543 | "node": ">=12.x" 1544 | }, 1545 | "peerDependencies": { 1546 | "@solana/web3.js": "^1.42", 1547 | "bn.js": ">=5", 1548 | "jsbi": "^3 || ^4" 1549 | } 1550 | }, 1551 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@saberhq/stableswap-sdk/node_modules/@saberhq/token-utils": { 1552 | "version": "1.15.0", 1553 | "resolved": "https://registry.npmjs.org/@saberhq/token-utils/-/token-utils-1.15.0.tgz", 1554 | "integrity": "sha512-XydjtT08Qq6hdJXnfk1NtIZeyOhNyb0YXrVtM6K3OoaH88HjF36niIRv6kMMcWAGm+Hkp1111NyYFhk55PNfOA==", 1555 | "dependencies": { 1556 | "@saberhq/solana-contrib": "^1.15.0", 1557 | "@solana/buffer-layout": "^4.0.0", 1558 | "@solana/spl-token": "^0.1.8", 1559 | "@ubeswap/token-math": "^5.2.1", 1560 | "tiny-invariant": "^1.3.1", 1561 | "tslib": "^2.6.2" 1562 | }, 1563 | "funding": { 1564 | "url": "https://www.coingecko.com/en/coins/saber" 1565 | }, 1566 | "peerDependencies": { 1567 | "@solana/web3.js": "^1.42", 1568 | "bn.js": "^4 || ^5", 1569 | "jsbi": "^3 || ^4" 1570 | } 1571 | }, 1572 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@solana/spl-token-registry": { 1573 | "version": "0.2.1105", 1574 | "resolved": "https://registry.npmjs.org/@solana/spl-token-registry/-/spl-token-registry-0.2.1105.tgz", 1575 | "integrity": "sha512-s9MIUoTAtqYsg1RaXIHXq7DhsUVS9VckvrwYuJBFn68YCZNSMUEquqaimbaHi88OVduFsApVAbKRmsGnJ9abIw==", 1576 | "dependencies": { 1577 | "cross-fetch": "3.0.6" 1578 | }, 1579 | "engines": { 1580 | "node": ">=10" 1581 | } 1582 | }, 1583 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@solana/spl-token-registry/node_modules/cross-fetch": { 1584 | "version": "3.0.6", 1585 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", 1586 | "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", 1587 | "dependencies": { 1588 | "node-fetch": "2.6.1" 1589 | } 1590 | }, 1591 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/@solana/spl-token-registry/node_modules/node-fetch": { 1592 | "version": "2.6.1", 1593 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1594 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 1595 | "engines": { 1596 | "node": "4.x || >=6.0.0" 1597 | } 1598 | }, 1599 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/base-x": { 1600 | "version": "3.0.9", 1601 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1602 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1603 | "dependencies": { 1604 | "safe-buffer": "^5.0.1" 1605 | } 1606 | }, 1607 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/bs58": { 1608 | "version": "4.0.1", 1609 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1610 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1611 | "dependencies": { 1612 | "base-x": "^3.0.2" 1613 | } 1614 | }, 1615 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/camelcase": { 1616 | "version": "5.3.1", 1617 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1618 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1619 | "engines": { 1620 | "node": ">=6" 1621 | } 1622 | }, 1623 | "node_modules/@mercurial-finance/dynamic-amm-sdk/node_modules/cross-fetch": { 1624 | "version": "3.1.8", 1625 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 1626 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 1627 | "dependencies": { 1628 | "node-fetch": "^2.6.12" 1629 | } 1630 | }, 1631 | "node_modules/@mercurial-finance/francium-sdk": { 1632 | "version": "1.4.3", 1633 | "resolved": "https://registry.npmjs.org/@mercurial-finance/francium-sdk/-/francium-sdk-1.4.3.tgz", 1634 | "integrity": "sha512-beFsxFx9WsHsImCSZAPXlitE4kQMugHczATishmJdxXGEHvBfJ3hrncjaWf+znwlMTknx8zYgPFfeP9JzbHHgw==" 1635 | }, 1636 | "node_modules/@mercurial-finance/optimist": { 1637 | "version": "0.2.0", 1638 | "resolved": "https://registry.npmjs.org/@mercurial-finance/optimist/-/optimist-0.2.0.tgz", 1639 | "integrity": "sha512-tUA1y83jTXroEClGN7dyhHxKZ+C+zKbSRx/LA7BltMumNG8mFSWJpi5uwkhmfhmSzvSgDob/qw0py3lFjw/FKQ==", 1640 | "dependencies": { 1641 | "promise-retry": "2.0.1" 1642 | }, 1643 | "engines": { 1644 | "node": ">=10" 1645 | }, 1646 | "peerDependencies": { 1647 | "@solana/spl-token": "<0.2.0", 1648 | "@solana/web3.js": ">=1.15.0", 1649 | "bn.js": ">=5.2.0" 1650 | } 1651 | }, 1652 | "node_modules/@mercurial-finance/port-sdk": { 1653 | "version": "0.2.69", 1654 | "resolved": "https://registry.npmjs.org/@mercurial-finance/port-sdk/-/port-sdk-0.2.69.tgz", 1655 | "integrity": "sha512-DDZBLkoIQVhLQRy+t7dVuiHNw0nAmWD7xqwMekHT71bBLU5ajQglRvQ9b8d2RQQn1WJsXhbGbc7eTUGWdZqWoQ==", 1656 | "dependencies": { 1657 | "@solana/buffer-layout": "^3.0.0", 1658 | "@solana/spl-token": "0.1.8", 1659 | "@solana/spl-token-registry": "^0.2.1107", 1660 | "@solana/web3.js": "^1.32.0", 1661 | "big.js": "^6.1.1", 1662 | "bn.js": "^5.2.1", 1663 | "buffer-layout": "1.2.2" 1664 | }, 1665 | "engines": { 1666 | "node": ">=10" 1667 | }, 1668 | "peerDependencies": { 1669 | "@solana/web3.js": "^1.32.0", 1670 | "bn.js": "^5.2.0" 1671 | } 1672 | }, 1673 | "node_modules/@mercurial-finance/port-sdk/node_modules/@solana/buffer-layout": { 1674 | "version": "3.0.0", 1675 | "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz", 1676 | "integrity": "sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==", 1677 | "dependencies": { 1678 | "buffer": "~6.0.3" 1679 | }, 1680 | "engines": { 1681 | "node": ">=5.10" 1682 | } 1683 | }, 1684 | "node_modules/@mercurial-finance/port-sdk/node_modules/big.js": { 1685 | "version": "6.2.1", 1686 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", 1687 | "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==", 1688 | "engines": { 1689 | "node": "*" 1690 | }, 1691 | "funding": { 1692 | "type": "opencollective", 1693 | "url": "https://opencollective.com/bigjs" 1694 | } 1695 | }, 1696 | "node_modules/@mercurial-finance/solend-sdk": { 1697 | "version": "0.6.5", 1698 | "resolved": "https://registry.npmjs.org/@mercurial-finance/solend-sdk/-/solend-sdk-0.6.5.tgz", 1699 | "integrity": "sha512-544KqvD1IkpnyTUDOCt0yVlTcayt9rv+CTXHTFQDinWQQkA8uWBoiNbI0g49bJVE//Np3SbJSOgJmq5KlxgvWQ==", 1700 | "dependencies": { 1701 | "@solana/web3.js": "^1.52.0", 1702 | "bn.js": "^5.2.0", 1703 | "buffer": "^6.0.3", 1704 | "buffer-layout": "^1.2.0" 1705 | } 1706 | }, 1707 | "node_modules/@mercurial-finance/tulip-platform-sdk": { 1708 | "version": "2.0.30", 1709 | "resolved": "https://registry.npmjs.org/@mercurial-finance/tulip-platform-sdk/-/tulip-platform-sdk-2.0.30.tgz", 1710 | "integrity": "sha512-ySPxAtFLtati9Vv7g3czrcNEiT9HBZboRDNnfEDmCFJqsub87Y2ZF125dpspaZzKUlolOrBIqBy1FZYIreMgfg==", 1711 | "dependencies": { 1712 | "@project-serum/anchor": "^0.25.0", 1713 | "@project-serum/associated-token": "^0.1.1", 1714 | "@project-serum/borsh": "^0.2.5", 1715 | "@solana/web3.js": "^1.66.2", 1716 | "lodash": "^4.17.21" 1717 | } 1718 | }, 1719 | "node_modules/@mercurial-finance/tulip-platform-sdk/node_modules/@project-serum/anchor": { 1720 | "version": "0.25.0", 1721 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.25.0.tgz", 1722 | "integrity": "sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A==", 1723 | "dependencies": { 1724 | "@project-serum/borsh": "^0.2.5", 1725 | "@solana/web3.js": "^1.36.0", 1726 | "base64-js": "^1.5.1", 1727 | "bn.js": "^5.1.2", 1728 | "bs58": "^4.0.1", 1729 | "buffer-layout": "^1.2.2", 1730 | "camelcase": "^5.3.1", 1731 | "cross-fetch": "^3.1.5", 1732 | "crypto-hash": "^1.3.0", 1733 | "eventemitter3": "^4.0.7", 1734 | "js-sha256": "^0.9.0", 1735 | "pako": "^2.0.3", 1736 | "snake-case": "^3.0.4", 1737 | "superstruct": "^0.15.4", 1738 | "toml": "^3.0.0" 1739 | }, 1740 | "engines": { 1741 | "node": ">=11" 1742 | } 1743 | }, 1744 | "node_modules/@mercurial-finance/tulip-platform-sdk/node_modules/base-x": { 1745 | "version": "3.0.9", 1746 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1747 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1748 | "dependencies": { 1749 | "safe-buffer": "^5.0.1" 1750 | } 1751 | }, 1752 | "node_modules/@mercurial-finance/tulip-platform-sdk/node_modules/bs58": { 1753 | "version": "4.0.1", 1754 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1755 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1756 | "dependencies": { 1757 | "base-x": "^3.0.2" 1758 | } 1759 | }, 1760 | "node_modules/@mercurial-finance/tulip-platform-sdk/node_modules/camelcase": { 1761 | "version": "5.3.1", 1762 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1763 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1764 | "engines": { 1765 | "node": ">=6" 1766 | } 1767 | }, 1768 | "node_modules/@mercurial-finance/tulip-platform-sdk/node_modules/cross-fetch": { 1769 | "version": "3.1.8", 1770 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 1771 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 1772 | "dependencies": { 1773 | "node-fetch": "^2.6.12" 1774 | } 1775 | }, 1776 | "node_modules/@mercurial-finance/vault-sdk": { 1777 | "version": "0.3.3", 1778 | "resolved": "https://registry.npmjs.org/@mercurial-finance/vault-sdk/-/vault-sdk-0.3.3.tgz", 1779 | "integrity": "sha512-6zSLrvQp03x5101DV5+mZaQ3VZ+f78KQgGQEarMPrjm80F/Eb5ElNh7Od9S0BsEfL7nocM8yIi424wgH17/gLQ==", 1780 | "dependencies": { 1781 | "@blockworks-foundation/mango-client": "^3.4.7", 1782 | "@mercurial-finance/apricot-sdk": "0.17.6", 1783 | "@mercurial-finance/francium-sdk": "1.4.3", 1784 | "@mercurial-finance/optimist": "^0.1.4", 1785 | "@mercurial-finance/port-sdk": "0.2.69", 1786 | "@mercurial-finance/solend-sdk": "0.6.5", 1787 | "@mercurial-finance/tulip-platform-sdk": "2.0.30", 1788 | "@project-serum/anchor": "0.24.2", 1789 | "@quarryprotocol/quarry-sdk": "5.0.2", 1790 | "@saberhq/anchor-contrib": "^1.13.6", 1791 | "@solana/buffer-layout": "^4.0.0", 1792 | "@solana/spl-token": "0.1.8", 1793 | "@solana/spl-token-registry": "0.2.1105", 1794 | "@solana/web3.js": "^1.42.0", 1795 | "bn.js": "5.2.1", 1796 | "cross-fetch": "^3.1.5", 1797 | "decimal.js": "10.3.1", 1798 | "jsbi": "4.3.0" 1799 | } 1800 | }, 1801 | "node_modules/@mercurial-finance/vault-sdk/node_modules/@mercurial-finance/optimist": { 1802 | "version": "0.1.9", 1803 | "resolved": "https://registry.npmjs.org/@mercurial-finance/optimist/-/optimist-0.1.9.tgz", 1804 | "integrity": "sha512-cOJan58djQdg2iHKV/jPFgD1bNm2hffa5S0FXREKSNfzZRfsYLZOnRNJ24X0o+VJ9kC5BY0HYwduT/+dAyZ0AQ==", 1805 | "dependencies": { 1806 | "promise-retry": "2.0.1" 1807 | }, 1808 | "engines": { 1809 | "node": ">=10" 1810 | }, 1811 | "peerDependencies": { 1812 | "@solana/spl-token": "<0.2.0", 1813 | "@solana/web3.js": ">=1.15.0", 1814 | "bn.js": ">=5.2.0" 1815 | } 1816 | }, 1817 | "node_modules/@mercurial-finance/vault-sdk/node_modules/@project-serum/anchor": { 1818 | "version": "0.24.2", 1819 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", 1820 | "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", 1821 | "dependencies": { 1822 | "@project-serum/borsh": "^0.2.5", 1823 | "@solana/web3.js": "^1.36.0", 1824 | "base64-js": "^1.5.1", 1825 | "bn.js": "^5.1.2", 1826 | "bs58": "^4.0.1", 1827 | "buffer-layout": "^1.2.2", 1828 | "camelcase": "^5.3.1", 1829 | "cross-fetch": "^3.1.5", 1830 | "crypto-hash": "^1.3.0", 1831 | "eventemitter3": "^4.0.7", 1832 | "js-sha256": "^0.9.0", 1833 | "pako": "^2.0.3", 1834 | "snake-case": "^3.0.4", 1835 | "toml": "^3.0.0" 1836 | }, 1837 | "engines": { 1838 | "node": ">=11" 1839 | } 1840 | }, 1841 | "node_modules/@mercurial-finance/vault-sdk/node_modules/@quarryprotocol/quarry-sdk": { 1842 | "version": "5.0.2", 1843 | "resolved": "https://registry.npmjs.org/@quarryprotocol/quarry-sdk/-/quarry-sdk-5.0.2.tgz", 1844 | "integrity": "sha512-wczlmNfb8fk6WCZsLLR7ysSjgxl6ZdEJ7cNDhgvFpU9E1YMSN1f2l2NK9yw+VksuLxWCightFsBrHSqqIftDzQ==", 1845 | "dependencies": { 1846 | "superstruct": "^0.15.4", 1847 | "tiny-invariant": "^1.2.0", 1848 | "tslib": "^2.3.1" 1849 | }, 1850 | "peerDependencies": { 1851 | "@project-serum/anchor": ">=0.19", 1852 | "@saberhq/anchor-contrib": "^1.12", 1853 | "@saberhq/solana-contrib": "^1.12", 1854 | "@saberhq/token-utils": "^1.12", 1855 | "@solana/web3.js": "^1", 1856 | "bn.js": "^5.2.0", 1857 | "jsbi": "^3 || ^4" 1858 | } 1859 | }, 1860 | "node_modules/@mercurial-finance/vault-sdk/node_modules/@saberhq/anchor-contrib": { 1861 | "version": "1.15.0", 1862 | "resolved": "https://registry.npmjs.org/@saberhq/anchor-contrib/-/anchor-contrib-1.15.0.tgz", 1863 | "integrity": "sha512-RYXcwaEY1xS39KaPLKbnGyewsAfI3y6OXH2V7E0OjIP3GHTlEkoXtN/SEOLvFAfQC+Vx/31fyhopKC/rQ4H/GQ==", 1864 | "dependencies": { 1865 | "@saberhq/solana-contrib": "^1.15.0", 1866 | "eventemitter3": "^4.0.7", 1867 | "lodash.camelcase": "^4.3.0", 1868 | "lodash.mapvalues": "^4.6.0", 1869 | "tslib": "^2.6.2" 1870 | }, 1871 | "funding": { 1872 | "url": "https://www.coingecko.com/en/coins/saber" 1873 | }, 1874 | "peerDependencies": { 1875 | "@project-serum/anchor": "^0.22 || ^0.23 || ^0.24", 1876 | "@solana/web3.js": "^1.42", 1877 | "bn.js": "^4 || ^5" 1878 | } 1879 | }, 1880 | "node_modules/@mercurial-finance/vault-sdk/node_modules/@solana/spl-token-registry": { 1881 | "version": "0.2.1105", 1882 | "resolved": "https://registry.npmjs.org/@solana/spl-token-registry/-/spl-token-registry-0.2.1105.tgz", 1883 | "integrity": "sha512-s9MIUoTAtqYsg1RaXIHXq7DhsUVS9VckvrwYuJBFn68YCZNSMUEquqaimbaHi88OVduFsApVAbKRmsGnJ9abIw==", 1884 | "dependencies": { 1885 | "cross-fetch": "3.0.6" 1886 | }, 1887 | "engines": { 1888 | "node": ">=10" 1889 | } 1890 | }, 1891 | "node_modules/@mercurial-finance/vault-sdk/node_modules/@solana/spl-token-registry/node_modules/cross-fetch": { 1892 | "version": "3.0.6", 1893 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", 1894 | "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", 1895 | "dependencies": { 1896 | "node-fetch": "2.6.1" 1897 | } 1898 | }, 1899 | "node_modules/@mercurial-finance/vault-sdk/node_modules/@solana/spl-token-registry/node_modules/node-fetch": { 1900 | "version": "2.6.1", 1901 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1902 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 1903 | "engines": { 1904 | "node": "4.x || >=6.0.0" 1905 | } 1906 | }, 1907 | "node_modules/@mercurial-finance/vault-sdk/node_modules/base-x": { 1908 | "version": "3.0.9", 1909 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1910 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1911 | "dependencies": { 1912 | "safe-buffer": "^5.0.1" 1913 | } 1914 | }, 1915 | "node_modules/@mercurial-finance/vault-sdk/node_modules/bs58": { 1916 | "version": "4.0.1", 1917 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 1918 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 1919 | "dependencies": { 1920 | "base-x": "^3.0.2" 1921 | } 1922 | }, 1923 | "node_modules/@mercurial-finance/vault-sdk/node_modules/camelcase": { 1924 | "version": "5.3.1", 1925 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1926 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1927 | "engines": { 1928 | "node": ">=6" 1929 | } 1930 | }, 1931 | "node_modules/@mercurial-finance/vault-sdk/node_modules/cross-fetch": { 1932 | "version": "3.1.8", 1933 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 1934 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 1935 | "dependencies": { 1936 | "node-fetch": "^2.6.12" 1937 | } 1938 | }, 1939 | "node_modules/@mercurial-finance/vault-sdk/node_modules/decimal.js": { 1940 | "version": "10.3.1", 1941 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", 1942 | "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" 1943 | }, 1944 | "node_modules/@noble/curves": { 1945 | "version": "1.4.0", 1946 | "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", 1947 | "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", 1948 | "dependencies": { 1949 | "@noble/hashes": "1.4.0" 1950 | }, 1951 | "funding": { 1952 | "url": "https://paulmillr.com/funding/" 1953 | } 1954 | }, 1955 | "node_modules/@noble/curves/node_modules/@noble/hashes": { 1956 | "version": "1.4.0", 1957 | "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", 1958 | "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", 1959 | "engines": { 1960 | "node": ">= 16" 1961 | }, 1962 | "funding": { 1963 | "url": "https://paulmillr.com/funding/" 1964 | } 1965 | }, 1966 | "node_modules/@noble/hashes": { 1967 | "version": "1.1.2", 1968 | "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", 1969 | "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", 1970 | "funding": [ 1971 | { 1972 | "type": "individual", 1973 | "url": "https://paulmillr.com/funding/" 1974 | } 1975 | ] 1976 | }, 1977 | "node_modules/@orca-so/common-sdk": { 1978 | "version": "0.1.12", 1979 | "resolved": "https://registry.npmjs.org/@orca-so/common-sdk/-/common-sdk-0.1.12.tgz", 1980 | "integrity": "sha512-YtrwwnrkgnOLWPiXzKPdz+L6XRBfwXMd5zI0MZm2olCmyaM41RpKyHd+NW/adem+Eb2Ey0FVd+Bie6pRlY1Z0g==", 1981 | "dependencies": { 1982 | "@project-serum/anchor": "~0.25.0", 1983 | "@solana/spl-token": "0.1.8", 1984 | "decimal.js": "^10.3.1", 1985 | "tiny-invariant": "^1.2.0" 1986 | } 1987 | }, 1988 | "node_modules/@orca-so/common-sdk/node_modules/@project-serum/anchor": { 1989 | "version": "0.25.0", 1990 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.25.0.tgz", 1991 | "integrity": "sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A==", 1992 | "dependencies": { 1993 | "@project-serum/borsh": "^0.2.5", 1994 | "@solana/web3.js": "^1.36.0", 1995 | "base64-js": "^1.5.1", 1996 | "bn.js": "^5.1.2", 1997 | "bs58": "^4.0.1", 1998 | "buffer-layout": "^1.2.2", 1999 | "camelcase": "^5.3.1", 2000 | "cross-fetch": "^3.1.5", 2001 | "crypto-hash": "^1.3.0", 2002 | "eventemitter3": "^4.0.7", 2003 | "js-sha256": "^0.9.0", 2004 | "pako": "^2.0.3", 2005 | "snake-case": "^3.0.4", 2006 | "superstruct": "^0.15.4", 2007 | "toml": "^3.0.0" 2008 | }, 2009 | "engines": { 2010 | "node": ">=11" 2011 | } 2012 | }, 2013 | "node_modules/@orca-so/common-sdk/node_modules/base-x": { 2014 | "version": "3.0.9", 2015 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 2016 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 2017 | "dependencies": { 2018 | "safe-buffer": "^5.0.1" 2019 | } 2020 | }, 2021 | "node_modules/@orca-so/common-sdk/node_modules/bs58": { 2022 | "version": "4.0.1", 2023 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 2024 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 2025 | "dependencies": { 2026 | "base-x": "^3.0.2" 2027 | } 2028 | }, 2029 | "node_modules/@orca-so/common-sdk/node_modules/camelcase": { 2030 | "version": "5.3.1", 2031 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 2032 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 2033 | "engines": { 2034 | "node": ">=6" 2035 | } 2036 | }, 2037 | "node_modules/@orca-so/common-sdk/node_modules/cross-fetch": { 2038 | "version": "3.1.8", 2039 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 2040 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 2041 | "dependencies": { 2042 | "node-fetch": "^2.6.12" 2043 | } 2044 | }, 2045 | "node_modules/@project-serum/anchor": { 2046 | "version": "0.26.0", 2047 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.26.0.tgz", 2048 | "integrity": "sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==", 2049 | "dependencies": { 2050 | "@coral-xyz/borsh": "^0.26.0", 2051 | "@solana/web3.js": "^1.68.0", 2052 | "base64-js": "^1.5.1", 2053 | "bn.js": "^5.1.2", 2054 | "bs58": "^4.0.1", 2055 | "buffer-layout": "^1.2.2", 2056 | "camelcase": "^6.3.0", 2057 | "cross-fetch": "^3.1.5", 2058 | "crypto-hash": "^1.3.0", 2059 | "eventemitter3": "^4.0.7", 2060 | "js-sha256": "^0.9.0", 2061 | "pako": "^2.0.3", 2062 | "snake-case": "^3.0.4", 2063 | "superstruct": "^0.15.4", 2064 | "toml": "^3.0.0" 2065 | }, 2066 | "engines": { 2067 | "node": ">=11" 2068 | } 2069 | }, 2070 | "node_modules/@project-serum/anchor/node_modules/@coral-xyz/borsh": { 2071 | "version": "0.26.0", 2072 | "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", 2073 | "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", 2074 | "dependencies": { 2075 | "bn.js": "^5.1.2", 2076 | "buffer-layout": "^1.2.0" 2077 | }, 2078 | "engines": { 2079 | "node": ">=10" 2080 | }, 2081 | "peerDependencies": { 2082 | "@solana/web3.js": "^1.68.0" 2083 | } 2084 | }, 2085 | "node_modules/@project-serum/anchor/node_modules/base-x": { 2086 | "version": "3.0.9", 2087 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 2088 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 2089 | "dependencies": { 2090 | "safe-buffer": "^5.0.1" 2091 | } 2092 | }, 2093 | "node_modules/@project-serum/anchor/node_modules/bs58": { 2094 | "version": "4.0.1", 2095 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 2096 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 2097 | "dependencies": { 2098 | "base-x": "^3.0.2" 2099 | } 2100 | }, 2101 | "node_modules/@project-serum/anchor/node_modules/cross-fetch": { 2102 | "version": "3.1.8", 2103 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", 2104 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", 2105 | "dependencies": { 2106 | "node-fetch": "^2.6.12" 2107 | } 2108 | }, 2109 | "node_modules/@project-serum/associated-token": { 2110 | "version": "0.1.1", 2111 | "resolved": "https://registry.npmjs.org/@project-serum/associated-token/-/associated-token-0.1.1.tgz", 2112 | "integrity": "sha512-Zc1wdqragbDiyBVagzIbIsMe37P7fgkArWZPIj+jJjDIoznlmYMK6ASU5mtdDZrPJ7sNABF/lzZ3+jvCCcU+oA==", 2113 | "engines": { 2114 | "node": ">=10" 2115 | }, 2116 | "peerDependencies": { 2117 | "@solana/web3.js": "^0.86.1" 2118 | } 2119 | }, 2120 | "node_modules/@project-serum/borsh": { 2121 | "version": "0.2.5", 2122 | "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz", 2123 | "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==", 2124 | "dependencies": { 2125 | "bn.js": "^5.1.2", 2126 | "buffer-layout": "^1.2.0" 2127 | }, 2128 | "engines": { 2129 | "node": ">=10" 2130 | }, 2131 | "peerDependencies": { 2132 | "@solana/web3.js": "^1.2.0" 2133 | } 2134 | }, 2135 | "node_modules/@project-serum/serum": { 2136 | "version": "0.13.65", 2137 | "resolved": "https://registry.npmjs.org/@project-serum/serum/-/serum-0.13.65.tgz", 2138 | "integrity": "sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA==", 2139 | "dependencies": { 2140 | "@project-serum/anchor": "^0.11.1", 2141 | "@solana/spl-token": "^0.1.6", 2142 | "@solana/web3.js": "^1.21.0", 2143 | "bn.js": "^5.1.2", 2144 | "buffer-layout": "^1.2.0" 2145 | }, 2146 | "engines": { 2147 | "node": ">=10" 2148 | } 2149 | }, 2150 | "node_modules/@project-serum/serum/node_modules/@project-serum/anchor": { 2151 | "version": "0.11.1", 2152 | "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.11.1.tgz", 2153 | "integrity": "sha512-oIdm4vTJkUy6GmE6JgqDAuQPKI7XM4TPJkjtoIzp69RZe0iAD9JP2XHx7lV1jLdYXeYHqDXfBt3zcq7W91K6PA==", 2154 | "dependencies": { 2155 | "@project-serum/borsh": "^0.2.2", 2156 | "@solana/web3.js": "^1.17.0", 2157 | "base64-js": "^1.5.1", 2158 | "bn.js": "^5.1.2", 2159 | "bs58": "^4.0.1", 2160 | "buffer-layout": "^1.2.0", 2161 | "camelcase": "^5.3.1", 2162 | "crypto-hash": "^1.3.0", 2163 | "eventemitter3": "^4.0.7", 2164 | "find": "^0.3.0", 2165 | "js-sha256": "^0.9.0", 2166 | "pako": "^2.0.3", 2167 | "snake-case": "^3.0.4", 2168 | "toml": "^3.0.0" 2169 | }, 2170 | "engines": { 2171 | "node": ">=11" 2172 | } 2173 | }, 2174 | "node_modules/@project-serum/serum/node_modules/base-x": { 2175 | "version": "3.0.9", 2176 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 2177 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 2178 | "dependencies": { 2179 | "safe-buffer": "^5.0.1" 2180 | } 2181 | }, 2182 | "node_modules/@project-serum/serum/node_modules/bs58": { 2183 | "version": "4.0.1", 2184 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 2185 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 2186 | "dependencies": { 2187 | "base-x": "^3.0.2" 2188 | } 2189 | }, 2190 | "node_modules/@project-serum/serum/node_modules/camelcase": { 2191 | "version": "5.3.1", 2192 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 2193 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 2194 | "engines": { 2195 | "node": ">=6" 2196 | } 2197 | }, 2198 | "node_modules/@project-serum/sol-wallet-adapter": { 2199 | "version": "0.2.6", 2200 | "resolved": "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz", 2201 | "integrity": "sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==", 2202 | "dependencies": { 2203 | "bs58": "^4.0.1", 2204 | "eventemitter3": "^4.0.7" 2205 | }, 2206 | "engines": { 2207 | "node": ">=10" 2208 | }, 2209 | "peerDependencies": { 2210 | "@solana/web3.js": "^1.5.0" 2211 | } 2212 | }, 2213 | "node_modules/@project-serum/sol-wallet-adapter/node_modules/base-x": { 2214 | "version": "3.0.9", 2215 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 2216 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 2217 | "dependencies": { 2218 | "safe-buffer": "^5.0.1" 2219 | } 2220 | }, 2221 | "node_modules/@project-serum/sol-wallet-adapter/node_modules/bs58": { 2222 | "version": "4.0.1", 2223 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 2224 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 2225 | "dependencies": { 2226 | "base-x": "^3.0.2" 2227 | } 2228 | }, 2229 | "node_modules/@pythnetwork/client": { 2230 | "version": "2.7.3", 2231 | "resolved": "https://registry.npmjs.org/@pythnetwork/client/-/client-2.7.3.tgz", 2232 | "integrity": "sha512-+2k5JXxv/yUA6WMESSppJlg4T/AP+nZZfBnHmeG3RPCIJx+bargxFLCK4B2KgpQYdeTWb+2z8yRCNF7tHooCFQ==", 2233 | "dependencies": { 2234 | "buffer": "^6.0.1" 2235 | }, 2236 | "peerDependencies": { 2237 | "@solana/web3.js": "^1.30.2" 2238 | } 2239 | }, 2240 | "node_modules/@saberhq/option-utils": { 2241 | "version": "1.15.0", 2242 | "resolved": "https://registry.npmjs.org/@saberhq/option-utils/-/option-utils-1.15.0.tgz", 2243 | "integrity": "sha512-XVbS9H4b8PIGXJGaErkOurxV2FKFyvMwYq0pD8Y1iEPoi6HB//+HnpEKAv8tCssIQ5Nn1zQWzmQ9CmGkrwzcsw==", 2244 | "dependencies": { 2245 | "tslib": "^2.6.2" 2246 | }, 2247 | "funding": { 2248 | "url": "https://www.coingecko.com/en/coins/saber" 2249 | } 2250 | }, 2251 | "node_modules/@saberhq/solana-contrib": { 2252 | "version": "1.15.0", 2253 | "resolved": "https://registry.npmjs.org/@saberhq/solana-contrib/-/solana-contrib-1.15.0.tgz", 2254 | "integrity": "sha512-OExL5qGrNMmIKINU7qFUDmY7+xIwVM2s360g99k8CRNHSnjpnqIzwDjr2CnvEFpeQPp22OdGlS63woDp0w0JsQ==", 2255 | "dependencies": { 2256 | "@saberhq/option-utils": "^1.15.0", 2257 | "@solana/buffer-layout": "^4.0.0", 2258 | "@types/promise-retry": "^1.1.6", 2259 | "@types/retry": "^0.12.5", 2260 | "promise-retry": "^2.0.1", 2261 | "retry": "^0.13.1", 2262 | "tiny-invariant": "^1.3.1", 2263 | "tslib": "^2.6.2" 2264 | }, 2265 | "funding": { 2266 | "url": "https://www.coingecko.com/en/coins/saber" 2267 | }, 2268 | "peerDependencies": { 2269 | "@solana/web3.js": "^1.42", 2270 | "bn.js": "^4 || ^5" 2271 | } 2272 | }, 2273 | "node_modules/@saberhq/stableswap-sdk": { 2274 | "version": "1.13.6", 2275 | "resolved": "https://registry.npmjs.org/@saberhq/stableswap-sdk/-/stableswap-sdk-1.13.6.tgz", 2276 | "integrity": "sha512-WkMzKnvjAZS6WIYmbqdSmRQXY0X5a6OFsta+tM1+iCp6Yug1OkGYSnYHTZJ4byIgXWvPd9B88c4z5T17sWRUDQ==", 2277 | "dependencies": { 2278 | "@saberhq/solana-contrib": "^1.13.6", 2279 | "@saberhq/token-utils": "^1.13.6", 2280 | "@solana/buffer-layout": "^4.0.0", 2281 | "lodash.mapvalues": "^4.6.0", 2282 | "tiny-invariant": "^1.2.0", 2283 | "tslib": "^2.4.0" 2284 | }, 2285 | "engines": { 2286 | "node": ">=12.x" 2287 | }, 2288 | "peerDependencies": { 2289 | "@solana/web3.js": "^1.37", 2290 | "bn.js": ">=5", 2291 | "jsbi": "^3 || ^4" 2292 | } 2293 | }, 2294 | "node_modules/@saberhq/token-utils": { 2295 | "version": "1.13.32", 2296 | "resolved": "https://registry.npmjs.org/@saberhq/token-utils/-/token-utils-1.13.32.tgz", 2297 | "integrity": "sha512-n5ECiw82IQJwyq9bTkcrbNWVi+lAQoQlJlTmIye8odUQATBsqOWN+clqfrFkn/UMmezO60bo34bUaM0Oir7Pew==", 2298 | "dependencies": { 2299 | "@saberhq/solana-contrib": "^1.13.32", 2300 | "@solana/buffer-layout": "^4.0.0", 2301 | "@solana/spl-token": "^0.1.8", 2302 | "@ubeswap/token-math": "^5.1.6", 2303 | "tiny-invariant": "^1.2.0", 2304 | "tslib": "^2.4.0" 2305 | }, 2306 | "funding": { 2307 | "url": "https://www.coingecko.com/en/coins/saber" 2308 | }, 2309 | "peerDependencies": { 2310 | "@solana/web3.js": "^1.42", 2311 | "bn.js": "^4 || ^5", 2312 | "jsbi": "^3 || ^4" 2313 | } 2314 | }, 2315 | "node_modules/@sideway/address": { 2316 | "version": "4.1.5", 2317 | "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", 2318 | "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", 2319 | "dependencies": { 2320 | "@hapi/hoek": "^9.0.0" 2321 | } 2322 | }, 2323 | "node_modules/@sideway/formula": { 2324 | "version": "3.0.1", 2325 | "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", 2326 | "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" 2327 | }, 2328 | "node_modules/@sideway/pinpoint": { 2329 | "version": "2.0.0", 2330 | "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", 2331 | "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" 2332 | }, 2333 | "node_modules/@solana/buffer-layout": { 2334 | "version": "4.0.1", 2335 | "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", 2336 | "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", 2337 | "dependencies": { 2338 | "buffer": "~6.0.3" 2339 | }, 2340 | "engines": { 2341 | "node": ">=5.10" 2342 | } 2343 | }, 2344 | "node_modules/@solana/buffer-layout-utils": { 2345 | "version": "0.2.0", 2346 | "resolved": "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz", 2347 | "integrity": "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==", 2348 | "dependencies": { 2349 | "@solana/buffer-layout": "^4.0.0", 2350 | "@solana/web3.js": "^1.32.0", 2351 | "bigint-buffer": "^1.1.5", 2352 | "bignumber.js": "^9.0.1" 2353 | }, 2354 | "engines": { 2355 | "node": ">= 10" 2356 | } 2357 | }, 2358 | "node_modules/@solana/codecs-core": { 2359 | "version": "2.0.0-experimental.8618508", 2360 | "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-experimental.8618508.tgz", 2361 | "integrity": "sha512-JCz7mKjVKtfZxkuDtwMAUgA7YvJcA2BwpZaA1NOLcted4OMC4Prwa3DUe3f3181ixPYaRyptbF0Ikq2MbDkYEA==" 2362 | }, 2363 | "node_modules/@solana/codecs-data-structures": { 2364 | "version": "2.0.0-experimental.8618508", 2365 | "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-experimental.8618508.tgz", 2366 | "integrity": "sha512-sLpjL9sqzaDdkloBPV61Rht1tgaKq98BCtIKRuyscIrmVPu3wu0Bavk2n/QekmUzaTsj7K1pVSniM0YqCdnEBw==", 2367 | "dependencies": { 2368 | "@solana/codecs-core": "2.0.0-experimental.8618508", 2369 | "@solana/codecs-numbers": "2.0.0-experimental.8618508" 2370 | } 2371 | }, 2372 | "node_modules/@solana/codecs-numbers": { 2373 | "version": "2.0.0-experimental.8618508", 2374 | "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-experimental.8618508.tgz", 2375 | "integrity": "sha512-EXQKfzFr3CkKKNzKSZPOOOzchXsFe90TVONWsSnVkonO9z+nGKALE0/L9uBmIFGgdzhhU9QQVFvxBMclIDJo2Q==", 2376 | "dependencies": { 2377 | "@solana/codecs-core": "2.0.0-experimental.8618508" 2378 | } 2379 | }, 2380 | "node_modules/@solana/codecs-strings": { 2381 | "version": "2.0.0-experimental.8618508", 2382 | "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-experimental.8618508.tgz", 2383 | "integrity": "sha512-b2yhinr1+oe+JDmnnsV0641KQqqDG8AQ16Z/x7GVWO+AWHMpRlHWVXOq8U1yhPMA4VXxl7i+D+C6ql0VGFp0GA==", 2384 | "dependencies": { 2385 | "@solana/codecs-core": "2.0.0-experimental.8618508", 2386 | "@solana/codecs-numbers": "2.0.0-experimental.8618508" 2387 | }, 2388 | "peerDependencies": { 2389 | "fastestsmallesttextencoderdecoder": "^1.0.22" 2390 | } 2391 | }, 2392 | "node_modules/@solana/options": { 2393 | "version": "2.0.0-experimental.8618508", 2394 | "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-experimental.8618508.tgz", 2395 | "integrity": "sha512-fy/nIRAMC3QHvnKi63KEd86Xr/zFBVxNW4nEpVEU2OT0gCEKwHY4Z55YHf7XujhyuM3PNpiBKg/YYw5QlRU4vg==", 2396 | "dependencies": { 2397 | "@solana/codecs-core": "2.0.0-experimental.8618508", 2398 | "@solana/codecs-numbers": "2.0.0-experimental.8618508" 2399 | } 2400 | }, 2401 | "node_modules/@solana/spl-token": { 2402 | "version": "0.1.8", 2403 | "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz", 2404 | "integrity": "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==", 2405 | "dependencies": { 2406 | "@babel/runtime": "^7.10.5", 2407 | "@solana/web3.js": "^1.21.0", 2408 | "bn.js": "^5.1.0", 2409 | "buffer": "6.0.3", 2410 | "buffer-layout": "^1.2.0", 2411 | "dotenv": "10.0.0" 2412 | }, 2413 | "engines": { 2414 | "node": ">= 10" 2415 | } 2416 | }, 2417 | "node_modules/@solana/spl-token-metadata": { 2418 | "version": "0.1.2", 2419 | "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.2.tgz", 2420 | "integrity": "sha512-hJYnAJNkDrtkE2Q41YZhCpeOGU/0JgRFXbtrtOuGGeKc3pkEUHB9DDoxZAxx+XRno13GozUleyBi0qypz4c3bw==", 2421 | "dependencies": { 2422 | "@solana/codecs-core": "2.0.0-experimental.8618508", 2423 | "@solana/codecs-data-structures": "2.0.0-experimental.8618508", 2424 | "@solana/codecs-numbers": "2.0.0-experimental.8618508", 2425 | "@solana/codecs-strings": "2.0.0-experimental.8618508", 2426 | "@solana/options": "2.0.0-experimental.8618508", 2427 | "@solana/spl-type-length-value": "0.1.0" 2428 | }, 2429 | "engines": { 2430 | "node": ">=16" 2431 | }, 2432 | "peerDependencies": { 2433 | "@solana/web3.js": "^1.87.6" 2434 | } 2435 | }, 2436 | "node_modules/@solana/spl-token-registry": { 2437 | "version": "0.2.4574", 2438 | "resolved": "https://registry.npmjs.org/@solana/spl-token-registry/-/spl-token-registry-0.2.4574.tgz", 2439 | "integrity": "sha512-JzlfZmke8Rxug20VT/VpI2XsXlsqMlcORIUivF+Yucj7tFi7A0dXG7h+2UnD0WaZJw8BrUz2ABNkUnv89vbv1A==", 2440 | "dependencies": { 2441 | "cross-fetch": "3.0.6" 2442 | }, 2443 | "engines": { 2444 | "node": ">=10" 2445 | } 2446 | }, 2447 | "node_modules/@solana/spl-token-registry/node_modules/cross-fetch": { 2448 | "version": "3.0.6", 2449 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", 2450 | "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", 2451 | "dependencies": { 2452 | "node-fetch": "2.6.1" 2453 | } 2454 | }, 2455 | "node_modules/@solana/spl-token-registry/node_modules/node-fetch": { 2456 | "version": "2.6.1", 2457 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 2458 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 2459 | "engines": { 2460 | "node": "4.x || >=6.0.0" 2461 | } 2462 | }, 2463 | "node_modules/@solana/spl-token/node_modules/dotenv": { 2464 | "version": "10.0.0", 2465 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", 2466 | "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", 2467 | "engines": { 2468 | "node": ">=10" 2469 | } 2470 | }, 2471 | "node_modules/@solana/spl-type-length-value": { 2472 | "version": "0.1.0", 2473 | "resolved": "https://registry.npmjs.org/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz", 2474 | "integrity": "sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==", 2475 | "dependencies": { 2476 | "buffer": "^6.0.3" 2477 | }, 2478 | "engines": { 2479 | "node": ">=16" 2480 | } 2481 | }, 2482 | "node_modules/@solana/web3.js": { 2483 | "version": "1.91.1", 2484 | "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.91.1.tgz", 2485 | "integrity": "sha512-cPgjZXm688oM9cULvJ8u2VH6Qp5rvptE1N1VODVxn2mAbpZsWrvWNPjmASkMYT/HzyrtqFkPvFdSHg8Xjt7aQA==", 2486 | "dependencies": { 2487 | "@babel/runtime": "^7.23.4", 2488 | "@noble/curves": "^1.2.0", 2489 | "@noble/hashes": "^1.3.3", 2490 | "@solana/buffer-layout": "^4.0.1", 2491 | "agentkeepalive": "^4.5.0", 2492 | "bigint-buffer": "^1.1.5", 2493 | "bn.js": "^5.2.1", 2494 | "borsh": "^0.7.0", 2495 | "bs58": "^4.0.1", 2496 | "buffer": "6.0.3", 2497 | "fast-stable-stringify": "^1.0.0", 2498 | "jayson": "^4.1.0", 2499 | "node-fetch": "^2.7.0", 2500 | "rpc-websockets": "^7.5.1", 2501 | "superstruct": "^0.14.2" 2502 | } 2503 | }, 2504 | "node_modules/@solana/web3.js/node_modules/@noble/hashes": { 2505 | "version": "1.4.0", 2506 | "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", 2507 | "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", 2508 | "engines": { 2509 | "node": ">= 16" 2510 | }, 2511 | "funding": { 2512 | "url": "https://paulmillr.com/funding/" 2513 | } 2514 | }, 2515 | "node_modules/@solana/web3.js/node_modules/base-x": { 2516 | "version": "3.0.9", 2517 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 2518 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 2519 | "dependencies": { 2520 | "safe-buffer": "^5.0.1" 2521 | } 2522 | }, 2523 | "node_modules/@solana/web3.js/node_modules/bs58": { 2524 | "version": "4.0.1", 2525 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 2526 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 2527 | "dependencies": { 2528 | "base-x": "^3.0.2" 2529 | } 2530 | }, 2531 | "node_modules/@solana/web3.js/node_modules/superstruct": { 2532 | "version": "0.14.2", 2533 | "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", 2534 | "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" 2535 | }, 2536 | "node_modules/@types/big.js": { 2537 | "version": "6.2.2", 2538 | "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz", 2539 | "integrity": "sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==" 2540 | }, 2541 | "node_modules/@types/bn.js": { 2542 | "version": "4.11.6", 2543 | "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", 2544 | "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", 2545 | "dependencies": { 2546 | "@types/node": "*" 2547 | } 2548 | }, 2549 | "node_modules/@types/connect": { 2550 | "version": "3.4.38", 2551 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", 2552 | "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", 2553 | "dependencies": { 2554 | "@types/node": "*" 2555 | } 2556 | }, 2557 | "node_modules/@types/node": { 2558 | "version": "18.19.26", 2559 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.26.tgz", 2560 | "integrity": "sha512-+wiMJsIwLOYCvUqSdKTrfkS8mpTp+MPINe6+Np4TAGFWWRWiBQ5kSq9nZGCSPkzx9mvT+uEukzpX4MOSCydcvw==", 2561 | "dependencies": { 2562 | "undici-types": "~5.26.4" 2563 | } 2564 | }, 2565 | "node_modules/@types/promise-retry": { 2566 | "version": "1.1.6", 2567 | "resolved": "https://registry.npmjs.org/@types/promise-retry/-/promise-retry-1.1.6.tgz", 2568 | "integrity": "sha512-EC1+OMXV0PZb0pf+cmyxc43MEP2CDumZe4AfuxWboxxEixztIebknpJPZAX5XlodGF1OY+C1E/RAeNGzxf+bJA==", 2569 | "dependencies": { 2570 | "@types/retry": "*" 2571 | } 2572 | }, 2573 | "node_modules/@types/retry": { 2574 | "version": "0.12.5", 2575 | "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", 2576 | "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==" 2577 | }, 2578 | "node_modules/@types/ws": { 2579 | "version": "7.4.7", 2580 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", 2581 | "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", 2582 | "dependencies": { 2583 | "@types/node": "*" 2584 | } 2585 | }, 2586 | "node_modules/@ubeswap/token-math": { 2587 | "version": "5.2.1", 2588 | "resolved": "https://registry.npmjs.org/@ubeswap/token-math/-/token-math-5.2.1.tgz", 2589 | "integrity": "sha512-wkIKDKIl6rml4CVK3fvjjLVk55Z8qEYTgjxZx7MnrTwECazyhiDuekb9WAaDPXcW5QNffCu8uv4Ba8wE96CJsg==", 2590 | "dependencies": { 2591 | "@types/big.js": "^6.1.6", 2592 | "big.js": "^6.2.1", 2593 | "decimal.js-light": "^2.5.1", 2594 | "tiny-invariant": "^1.2.0", 2595 | "tslib": "^2.4.0" 2596 | }, 2597 | "engines": { 2598 | "node": ">=10" 2599 | }, 2600 | "peerDependencies": { 2601 | "jsbi": "^3 || ^4" 2602 | } 2603 | }, 2604 | "node_modules/@ubeswap/token-math/node_modules/big.js": { 2605 | "version": "6.2.1", 2606 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", 2607 | "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==", 2608 | "engines": { 2609 | "node": "*" 2610 | }, 2611 | "funding": { 2612 | "type": "opencollective", 2613 | "url": "https://opencollective.com/bigjs" 2614 | } 2615 | }, 2616 | "node_modules/agentkeepalive": { 2617 | "version": "4.5.0", 2618 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", 2619 | "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", 2620 | "dependencies": { 2621 | "humanize-ms": "^1.2.1" 2622 | }, 2623 | "engines": { 2624 | "node": ">= 8.0.0" 2625 | } 2626 | }, 2627 | "node_modules/ansi-regex": { 2628 | "version": "5.0.1", 2629 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2630 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2631 | "engines": { 2632 | "node": ">=8" 2633 | } 2634 | }, 2635 | "node_modules/ansi-styles": { 2636 | "version": "4.3.0", 2637 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2638 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2639 | "dependencies": { 2640 | "color-convert": "^2.0.1" 2641 | }, 2642 | "engines": { 2643 | "node": ">=8" 2644 | }, 2645 | "funding": { 2646 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2647 | } 2648 | }, 2649 | "node_modules/arg": { 2650 | "version": "5.0.2", 2651 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 2652 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 2653 | }, 2654 | "node_modules/asynckit": { 2655 | "version": "0.4.0", 2656 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 2657 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 2658 | }, 2659 | "node_modules/axios": { 2660 | "version": "0.27.2", 2661 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", 2662 | "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", 2663 | "dependencies": { 2664 | "follow-redirects": "^1.14.9", 2665 | "form-data": "^4.0.0" 2666 | } 2667 | }, 2668 | "node_modules/base-x": { 2669 | "version": "4.0.0", 2670 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", 2671 | "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" 2672 | }, 2673 | "node_modules/base64-js": { 2674 | "version": "1.5.1", 2675 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 2676 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 2677 | "funding": [ 2678 | { 2679 | "type": "github", 2680 | "url": "https://github.com/sponsors/feross" 2681 | }, 2682 | { 2683 | "type": "patreon", 2684 | "url": "https://www.patreon.com/feross" 2685 | }, 2686 | { 2687 | "type": "consulting", 2688 | "url": "https://feross.org/support" 2689 | } 2690 | ] 2691 | }, 2692 | "node_modules/big.js": { 2693 | "version": "5.2.2", 2694 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 2695 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", 2696 | "engines": { 2697 | "node": "*" 2698 | } 2699 | }, 2700 | "node_modules/bigint-buffer": { 2701 | "version": "1.1.5", 2702 | "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", 2703 | "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", 2704 | "hasInstallScript": true, 2705 | "dependencies": { 2706 | "bindings": "^1.3.0" 2707 | }, 2708 | "engines": { 2709 | "node": ">= 10.0.0" 2710 | } 2711 | }, 2712 | "node_modules/bignumber.js": { 2713 | "version": "9.1.0", 2714 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", 2715 | "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", 2716 | "engines": { 2717 | "node": "*" 2718 | } 2719 | }, 2720 | "node_modules/bindings": { 2721 | "version": "1.5.0", 2722 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 2723 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 2724 | "dependencies": { 2725 | "file-uri-to-path": "1.0.0" 2726 | } 2727 | }, 2728 | "node_modules/bluebird": { 2729 | "version": "3.7.2", 2730 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 2731 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 2732 | }, 2733 | "node_modules/bn-sqrt": { 2734 | "version": "1.0.0", 2735 | "resolved": "https://registry.npmjs.org/bn-sqrt/-/bn-sqrt-1.0.0.tgz", 2736 | "integrity": "sha512-XdCMQ7tfEF/f7nrQgnrJ+DLQBwQzSQyPOKIXdUOTcGEvsRKBcIsdfORp7B5H8DWo8FOzZ4+a2TjSZzaqKgzicg==", 2737 | "dependencies": { 2738 | "bn.js": "^5.2.0" 2739 | } 2740 | }, 2741 | "node_modules/bn.js": { 2742 | "version": "5.2.1", 2743 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", 2744 | "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" 2745 | }, 2746 | "node_modules/borsh": { 2747 | "version": "0.7.0", 2748 | "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", 2749 | "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", 2750 | "dependencies": { 2751 | "bn.js": "^5.2.0", 2752 | "bs58": "^4.0.0", 2753 | "text-encoding-utf-8": "^1.0.2" 2754 | } 2755 | }, 2756 | "node_modules/borsh/node_modules/base-x": { 2757 | "version": "3.0.9", 2758 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 2759 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 2760 | "dependencies": { 2761 | "safe-buffer": "^5.0.1" 2762 | } 2763 | }, 2764 | "node_modules/borsh/node_modules/bs58": { 2765 | "version": "4.0.1", 2766 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 2767 | "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", 2768 | "dependencies": { 2769 | "base-x": "^3.0.2" 2770 | } 2771 | }, 2772 | "node_modules/brorand": { 2773 | "version": "1.1.0", 2774 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 2775 | "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" 2776 | }, 2777 | "node_modules/bs58": { 2778 | "version": "5.0.0", 2779 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", 2780 | "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", 2781 | "dependencies": { 2782 | "base-x": "^4.0.0" 2783 | } 2784 | }, 2785 | "node_modules/buffer": { 2786 | "version": "6.0.3", 2787 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 2788 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 2789 | "funding": [ 2790 | { 2791 | "type": "github", 2792 | "url": "https://github.com/sponsors/feross" 2793 | }, 2794 | { 2795 | "type": "patreon", 2796 | "url": "https://www.patreon.com/feross" 2797 | }, 2798 | { 2799 | "type": "consulting", 2800 | "url": "https://feross.org/support" 2801 | } 2802 | ], 2803 | "dependencies": { 2804 | "base64-js": "^1.3.1", 2805 | "ieee754": "^1.2.1" 2806 | } 2807 | }, 2808 | "node_modules/buffer-layout": { 2809 | "version": "1.2.2", 2810 | "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", 2811 | "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==", 2812 | "engines": { 2813 | "node": ">=4.5" 2814 | } 2815 | }, 2816 | "node_modules/bufferutil": { 2817 | "version": "4.0.8", 2818 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", 2819 | "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", 2820 | "hasInstallScript": true, 2821 | "optional": true, 2822 | "dependencies": { 2823 | "node-gyp-build": "^4.3.0" 2824 | }, 2825 | "engines": { 2826 | "node": ">=6.14.2" 2827 | } 2828 | }, 2829 | "node_modules/camelcase": { 2830 | "version": "6.3.0", 2831 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 2832 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 2833 | "engines": { 2834 | "node": ">=10" 2835 | }, 2836 | "funding": { 2837 | "url": "https://github.com/sponsors/sindresorhus" 2838 | } 2839 | }, 2840 | "node_modules/check-more-types": { 2841 | "version": "2.24.0", 2842 | "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", 2843 | "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", 2844 | "engines": { 2845 | "node": ">= 0.8.0" 2846 | } 2847 | }, 2848 | "node_modules/cliui": { 2849 | "version": "8.0.1", 2850 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 2851 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 2852 | "dependencies": { 2853 | "string-width": "^4.2.0", 2854 | "strip-ansi": "^6.0.1", 2855 | "wrap-ansi": "^7.0.0" 2856 | }, 2857 | "engines": { 2858 | "node": ">=12" 2859 | } 2860 | }, 2861 | "node_modules/color-convert": { 2862 | "version": "2.0.1", 2863 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2864 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2865 | "dependencies": { 2866 | "color-name": "~1.1.4" 2867 | }, 2868 | "engines": { 2869 | "node": ">=7.0.0" 2870 | } 2871 | }, 2872 | "node_modules/color-name": { 2873 | "version": "1.1.4", 2874 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2875 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2876 | }, 2877 | "node_modules/combined-stream": { 2878 | "version": "1.0.8", 2879 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 2880 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 2881 | "dependencies": { 2882 | "delayed-stream": "~1.0.0" 2883 | }, 2884 | "engines": { 2885 | "node": ">= 0.8" 2886 | } 2887 | }, 2888 | "node_modules/commander": { 2889 | "version": "2.20.3", 2890 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 2891 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 2892 | }, 2893 | "node_modules/cross-fetch": { 2894 | "version": "4.0.0", 2895 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", 2896 | "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", 2897 | "dependencies": { 2898 | "node-fetch": "^2.6.12" 2899 | } 2900 | }, 2901 | "node_modules/cross-spawn": { 2902 | "version": "7.0.3", 2903 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 2904 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 2905 | "dependencies": { 2906 | "path-key": "^3.1.0", 2907 | "shebang-command": "^2.0.0", 2908 | "which": "^2.0.1" 2909 | }, 2910 | "engines": { 2911 | "node": ">= 8" 2912 | } 2913 | }, 2914 | "node_modules/crypto-hash": { 2915 | "version": "1.3.0", 2916 | "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", 2917 | "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==", 2918 | "engines": { 2919 | "node": ">=8" 2920 | }, 2921 | "funding": { 2922 | "url": "https://github.com/sponsors/sindresorhus" 2923 | } 2924 | }, 2925 | "node_modules/debug": { 2926 | "version": "4.3.4", 2927 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2928 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2929 | "dependencies": { 2930 | "ms": "2.1.2" 2931 | }, 2932 | "engines": { 2933 | "node": ">=6.0" 2934 | }, 2935 | "peerDependenciesMeta": { 2936 | "supports-color": { 2937 | "optional": true 2938 | } 2939 | } 2940 | }, 2941 | "node_modules/decimal.js": { 2942 | "version": "10.4.2", 2943 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", 2944 | "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==" 2945 | }, 2946 | "node_modules/decimal.js-light": { 2947 | "version": "2.5.1", 2948 | "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", 2949 | "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" 2950 | }, 2951 | "node_modules/delay": { 2952 | "version": "5.0.0", 2953 | "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", 2954 | "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", 2955 | "engines": { 2956 | "node": ">=10" 2957 | }, 2958 | "funding": { 2959 | "url": "https://github.com/sponsors/sindresorhus" 2960 | } 2961 | }, 2962 | "node_modules/delayed-stream": { 2963 | "version": "1.0.0", 2964 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 2965 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 2966 | "engines": { 2967 | "node": ">=0.4.0" 2968 | } 2969 | }, 2970 | "node_modules/dot-case": { 2971 | "version": "3.0.4", 2972 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", 2973 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", 2974 | "dependencies": { 2975 | "no-case": "^3.0.4", 2976 | "tslib": "^2.0.3" 2977 | } 2978 | }, 2979 | "node_modules/dotenv": { 2980 | "version": "16.4.5", 2981 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", 2982 | "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", 2983 | "engines": { 2984 | "node": ">=12" 2985 | }, 2986 | "funding": { 2987 | "url": "https://dotenvx.com" 2988 | } 2989 | }, 2990 | "node_modules/duplexer": { 2991 | "version": "0.1.2", 2992 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", 2993 | "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" 2994 | }, 2995 | "node_modules/elliptic": { 2996 | "version": "6.5.5", 2997 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", 2998 | "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", 2999 | "dependencies": { 3000 | "bn.js": "^4.11.9", 3001 | "brorand": "^1.1.0", 3002 | "hash.js": "^1.0.0", 3003 | "hmac-drbg": "^1.0.1", 3004 | "inherits": "^2.0.4", 3005 | "minimalistic-assert": "^1.0.1", 3006 | "minimalistic-crypto-utils": "^1.0.1" 3007 | } 3008 | }, 3009 | "node_modules/elliptic/node_modules/bn.js": { 3010 | "version": "4.12.0", 3011 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 3012 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 3013 | }, 3014 | "node_modules/emoji-regex": { 3015 | "version": "8.0.0", 3016 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3017 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 3018 | }, 3019 | "node_modules/err-code": { 3020 | "version": "2.0.3", 3021 | "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", 3022 | "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" 3023 | }, 3024 | "node_modules/es6-promise": { 3025 | "version": "4.2.8", 3026 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 3027 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" 3028 | }, 3029 | "node_modules/es6-promisify": { 3030 | "version": "5.0.0", 3031 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 3032 | "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", 3033 | "dependencies": { 3034 | "es6-promise": "^4.0.3" 3035 | } 3036 | }, 3037 | "node_modules/escalade": { 3038 | "version": "3.1.2", 3039 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 3040 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 3041 | "engines": { 3042 | "node": ">=6" 3043 | } 3044 | }, 3045 | "node_modules/event-stream": { 3046 | "version": "3.3.4", 3047 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 3048 | "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", 3049 | "dependencies": { 3050 | "duplexer": "~0.1.1", 3051 | "from": "~0", 3052 | "map-stream": "~0.1.0", 3053 | "pause-stream": "0.0.11", 3054 | "split": "0.3", 3055 | "stream-combiner": "~0.0.4", 3056 | "through": "~2.3.1" 3057 | } 3058 | }, 3059 | "node_modules/eventemitter3": { 3060 | "version": "4.0.7", 3061 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 3062 | "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" 3063 | }, 3064 | "node_modules/execa": { 3065 | "version": "5.1.1", 3066 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 3067 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 3068 | "dependencies": { 3069 | "cross-spawn": "^7.0.3", 3070 | "get-stream": "^6.0.0", 3071 | "human-signals": "^2.1.0", 3072 | "is-stream": "^2.0.0", 3073 | "merge-stream": "^2.0.0", 3074 | "npm-run-path": "^4.0.1", 3075 | "onetime": "^5.1.2", 3076 | "signal-exit": "^3.0.3", 3077 | "strip-final-newline": "^2.0.0" 3078 | }, 3079 | "engines": { 3080 | "node": ">=10" 3081 | }, 3082 | "funding": { 3083 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 3084 | } 3085 | }, 3086 | "node_modules/eyes": { 3087 | "version": "0.1.8", 3088 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 3089 | "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", 3090 | "engines": { 3091 | "node": "> 0.1.90" 3092 | } 3093 | }, 3094 | "node_modules/fast-stable-stringify": { 3095 | "version": "1.0.0", 3096 | "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", 3097 | "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" 3098 | }, 3099 | "node_modules/fastestsmallesttextencoderdecoder": { 3100 | "version": "1.0.22", 3101 | "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", 3102 | "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", 3103 | "peer": true 3104 | }, 3105 | "node_modules/file-uri-to-path": { 3106 | "version": "1.0.0", 3107 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 3108 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 3109 | }, 3110 | "node_modules/find": { 3111 | "version": "0.3.0", 3112 | "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", 3113 | "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", 3114 | "dependencies": { 3115 | "traverse-chain": "~0.1.0" 3116 | } 3117 | }, 3118 | "node_modules/follow-redirects": { 3119 | "version": "1.15.6", 3120 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", 3121 | "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", 3122 | "funding": [ 3123 | { 3124 | "type": "individual", 3125 | "url": "https://github.com/sponsors/RubenVerborgh" 3126 | } 3127 | ], 3128 | "engines": { 3129 | "node": ">=4.0" 3130 | }, 3131 | "peerDependenciesMeta": { 3132 | "debug": { 3133 | "optional": true 3134 | } 3135 | } 3136 | }, 3137 | "node_modules/form-data": { 3138 | "version": "4.0.0", 3139 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 3140 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 3141 | "dependencies": { 3142 | "asynckit": "^0.4.0", 3143 | "combined-stream": "^1.0.8", 3144 | "mime-types": "^2.1.12" 3145 | }, 3146 | "engines": { 3147 | "node": ">= 6" 3148 | } 3149 | }, 3150 | "node_modules/from": { 3151 | "version": "0.1.7", 3152 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 3153 | "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" 3154 | }, 3155 | "node_modules/fzstd": { 3156 | "version": "0.0.4", 3157 | "resolved": "https://registry.npmjs.org/fzstd/-/fzstd-0.0.4.tgz", 3158 | "integrity": "sha512-GNZEyoB2+mGNGhBBdRiPF1WE3xRK5VTOXFNiM8YqUmo5Lo/XeyvLtSSrWLN3NS7JRnwolabqsmE970MiqI69Ug==" 3159 | }, 3160 | "node_modules/get-caller-file": { 3161 | "version": "2.0.5", 3162 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 3163 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 3164 | "engines": { 3165 | "node": "6.* || 8.* || >= 10.*" 3166 | } 3167 | }, 3168 | "node_modules/get-stream": { 3169 | "version": "6.0.1", 3170 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 3171 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 3172 | "engines": { 3173 | "node": ">=10" 3174 | }, 3175 | "funding": { 3176 | "url": "https://github.com/sponsors/sindresorhus" 3177 | } 3178 | }, 3179 | "node_modules/hash.js": { 3180 | "version": "1.1.7", 3181 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 3182 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 3183 | "dependencies": { 3184 | "inherits": "^2.0.3", 3185 | "minimalistic-assert": "^1.0.1" 3186 | } 3187 | }, 3188 | "node_modules/hmac-drbg": { 3189 | "version": "1.0.1", 3190 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 3191 | "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", 3192 | "dependencies": { 3193 | "hash.js": "^1.0.3", 3194 | "minimalistic-assert": "^1.0.0", 3195 | "minimalistic-crypto-utils": "^1.0.1" 3196 | } 3197 | }, 3198 | "node_modules/human-signals": { 3199 | "version": "2.1.0", 3200 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 3201 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 3202 | "engines": { 3203 | "node": ">=10.17.0" 3204 | } 3205 | }, 3206 | "node_modules/humanize-ms": { 3207 | "version": "1.2.1", 3208 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 3209 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 3210 | "dependencies": { 3211 | "ms": "^2.0.0" 3212 | } 3213 | }, 3214 | "node_modules/ieee754": { 3215 | "version": "1.2.1", 3216 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 3217 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 3218 | "funding": [ 3219 | { 3220 | "type": "github", 3221 | "url": "https://github.com/sponsors/feross" 3222 | }, 3223 | { 3224 | "type": "patreon", 3225 | "url": "https://www.patreon.com/feross" 3226 | }, 3227 | { 3228 | "type": "consulting", 3229 | "url": "https://feross.org/support" 3230 | } 3231 | ] 3232 | }, 3233 | "node_modules/inherits": { 3234 | "version": "2.0.4", 3235 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3236 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 3237 | }, 3238 | "node_modules/invariant": { 3239 | "version": "2.2.4", 3240 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 3241 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 3242 | "dependencies": { 3243 | "loose-envify": "^1.0.0" 3244 | } 3245 | }, 3246 | "node_modules/is-fullwidth-code-point": { 3247 | "version": "3.0.0", 3248 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3249 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3250 | "engines": { 3251 | "node": ">=8" 3252 | } 3253 | }, 3254 | "node_modules/is-stream": { 3255 | "version": "2.0.1", 3256 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 3257 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 3258 | "engines": { 3259 | "node": ">=8" 3260 | }, 3261 | "funding": { 3262 | "url": "https://github.com/sponsors/sindresorhus" 3263 | } 3264 | }, 3265 | "node_modules/isexe": { 3266 | "version": "2.0.0", 3267 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3268 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 3269 | }, 3270 | "node_modules/isomorphic-ws": { 3271 | "version": "4.0.1", 3272 | "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", 3273 | "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", 3274 | "peerDependencies": { 3275 | "ws": "*" 3276 | } 3277 | }, 3278 | "node_modules/jayson": { 3279 | "version": "4.1.0", 3280 | "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz", 3281 | "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==", 3282 | "dependencies": { 3283 | "@types/connect": "^3.4.33", 3284 | "@types/node": "^12.12.54", 3285 | "@types/ws": "^7.4.4", 3286 | "commander": "^2.20.3", 3287 | "delay": "^5.0.0", 3288 | "es6-promisify": "^5.0.0", 3289 | "eyes": "^0.1.8", 3290 | "isomorphic-ws": "^4.0.1", 3291 | "json-stringify-safe": "^5.0.1", 3292 | "JSONStream": "^1.3.5", 3293 | "uuid": "^8.3.2", 3294 | "ws": "^7.4.5" 3295 | }, 3296 | "bin": { 3297 | "jayson": "bin/jayson.js" 3298 | }, 3299 | "engines": { 3300 | "node": ">=8" 3301 | } 3302 | }, 3303 | "node_modules/jayson/node_modules/@types/node": { 3304 | "version": "12.20.55", 3305 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", 3306 | "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" 3307 | }, 3308 | "node_modules/joi": { 3309 | "version": "17.12.2", 3310 | "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.2.tgz", 3311 | "integrity": "sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==", 3312 | "dependencies": { 3313 | "@hapi/hoek": "^9.3.0", 3314 | "@hapi/topo": "^5.1.0", 3315 | "@sideway/address": "^4.1.5", 3316 | "@sideway/formula": "^3.0.1", 3317 | "@sideway/pinpoint": "^2.0.0" 3318 | } 3319 | }, 3320 | "node_modules/js-sha256": { 3321 | "version": "0.9.0", 3322 | "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", 3323 | "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" 3324 | }, 3325 | "node_modules/js-sha3": { 3326 | "version": "0.8.0", 3327 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", 3328 | "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" 3329 | }, 3330 | "node_modules/js-tokens": { 3331 | "version": "4.0.0", 3332 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3333 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 3334 | }, 3335 | "node_modules/jsbi": { 3336 | "version": "4.3.0", 3337 | "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", 3338 | "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" 3339 | }, 3340 | "node_modules/json-stringify-safe": { 3341 | "version": "5.0.1", 3342 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 3343 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" 3344 | }, 3345 | "node_modules/jsonparse": { 3346 | "version": "1.3.1", 3347 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 3348 | "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", 3349 | "engines": [ 3350 | "node >= 0.2.0" 3351 | ] 3352 | }, 3353 | "node_modules/JSONStream": { 3354 | "version": "1.3.5", 3355 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 3356 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 3357 | "dependencies": { 3358 | "jsonparse": "^1.2.0", 3359 | "through": ">=2.2.7 <3" 3360 | }, 3361 | "bin": { 3362 | "JSONStream": "bin.js" 3363 | }, 3364 | "engines": { 3365 | "node": "*" 3366 | } 3367 | }, 3368 | "node_modules/lazy-ass": { 3369 | "version": "1.6.0", 3370 | "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", 3371 | "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", 3372 | "engines": { 3373 | "node": "> 0.8" 3374 | } 3375 | }, 3376 | "node_modules/lodash": { 3377 | "version": "4.17.21", 3378 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 3379 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 3380 | }, 3381 | "node_modules/lodash.camelcase": { 3382 | "version": "4.3.0", 3383 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 3384 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" 3385 | }, 3386 | "node_modules/lodash.mapvalues": { 3387 | "version": "4.6.0", 3388 | "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", 3389 | "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" 3390 | }, 3391 | "node_modules/loose-envify": { 3392 | "version": "1.4.0", 3393 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 3394 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 3395 | "dependencies": { 3396 | "js-tokens": "^3.0.0 || ^4.0.0" 3397 | }, 3398 | "bin": { 3399 | "loose-envify": "cli.js" 3400 | } 3401 | }, 3402 | "node_modules/lower-case": { 3403 | "version": "2.0.2", 3404 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 3405 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 3406 | "dependencies": { 3407 | "tslib": "^2.0.3" 3408 | } 3409 | }, 3410 | "node_modules/map-stream": { 3411 | "version": "0.1.0", 3412 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 3413 | "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" 3414 | }, 3415 | "node_modules/merge-stream": { 3416 | "version": "2.0.0", 3417 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 3418 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" 3419 | }, 3420 | "node_modules/mime-db": { 3421 | "version": "1.52.0", 3422 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 3423 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 3424 | "engines": { 3425 | "node": ">= 0.6" 3426 | } 3427 | }, 3428 | "node_modules/mime-types": { 3429 | "version": "2.1.35", 3430 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 3431 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 3432 | "dependencies": { 3433 | "mime-db": "1.52.0" 3434 | }, 3435 | "engines": { 3436 | "node": ">= 0.6" 3437 | } 3438 | }, 3439 | "node_modules/mimic-fn": { 3440 | "version": "2.1.0", 3441 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 3442 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 3443 | "engines": { 3444 | "node": ">=6" 3445 | } 3446 | }, 3447 | "node_modules/minimalistic-assert": { 3448 | "version": "1.0.1", 3449 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 3450 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 3451 | }, 3452 | "node_modules/minimalistic-crypto-utils": { 3453 | "version": "1.0.1", 3454 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 3455 | "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" 3456 | }, 3457 | "node_modules/minimist": { 3458 | "version": "1.2.8", 3459 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 3460 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 3461 | "funding": { 3462 | "url": "https://github.com/sponsors/ljharb" 3463 | } 3464 | }, 3465 | "node_modules/ms": { 3466 | "version": "2.1.2", 3467 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3468 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 3469 | }, 3470 | "node_modules/no-case": { 3471 | "version": "3.0.4", 3472 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 3473 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 3474 | "dependencies": { 3475 | "lower-case": "^2.0.2", 3476 | "tslib": "^2.0.3" 3477 | } 3478 | }, 3479 | "node_modules/node-addon-api": { 3480 | "version": "2.0.2", 3481 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", 3482 | "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" 3483 | }, 3484 | "node_modules/node-fetch": { 3485 | "version": "2.7.0", 3486 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 3487 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 3488 | "dependencies": { 3489 | "whatwg-url": "^5.0.0" 3490 | }, 3491 | "engines": { 3492 | "node": "4.x || >=6.0.0" 3493 | }, 3494 | "peerDependencies": { 3495 | "encoding": "^0.1.0" 3496 | }, 3497 | "peerDependenciesMeta": { 3498 | "encoding": { 3499 | "optional": true 3500 | } 3501 | } 3502 | }, 3503 | "node_modules/node-gyp-build": { 3504 | "version": "4.8.0", 3505 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", 3506 | "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", 3507 | "bin": { 3508 | "node-gyp-build": "bin.js", 3509 | "node-gyp-build-optional": "optional.js", 3510 | "node-gyp-build-test": "build-test.js" 3511 | } 3512 | }, 3513 | "node_modules/npm-run-path": { 3514 | "version": "4.0.1", 3515 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 3516 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 3517 | "dependencies": { 3518 | "path-key": "^3.0.0" 3519 | }, 3520 | "engines": { 3521 | "node": ">=8" 3522 | } 3523 | }, 3524 | "node_modules/onetime": { 3525 | "version": "5.1.2", 3526 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 3527 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 3528 | "dependencies": { 3529 | "mimic-fn": "^2.1.0" 3530 | }, 3531 | "engines": { 3532 | "node": ">=6" 3533 | }, 3534 | "funding": { 3535 | "url": "https://github.com/sponsors/sindresorhus" 3536 | } 3537 | }, 3538 | "node_modules/pako": { 3539 | "version": "2.1.0", 3540 | "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", 3541 | "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" 3542 | }, 3543 | "node_modules/path-key": { 3544 | "version": "3.1.1", 3545 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3546 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3547 | "engines": { 3548 | "node": ">=8" 3549 | } 3550 | }, 3551 | "node_modules/pause-stream": { 3552 | "version": "0.0.11", 3553 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 3554 | "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", 3555 | "dependencies": { 3556 | "through": "~2.3" 3557 | } 3558 | }, 3559 | "node_modules/promise-retry": { 3560 | "version": "2.0.1", 3561 | "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", 3562 | "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", 3563 | "dependencies": { 3564 | "err-code": "^2.0.2", 3565 | "retry": "^0.12.0" 3566 | }, 3567 | "engines": { 3568 | "node": ">=10" 3569 | } 3570 | }, 3571 | "node_modules/promise-retry/node_modules/retry": { 3572 | "version": "0.12.0", 3573 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 3574 | "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", 3575 | "engines": { 3576 | "node": ">= 4" 3577 | } 3578 | }, 3579 | "node_modules/ps-tree": { 3580 | "version": "1.2.0", 3581 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", 3582 | "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", 3583 | "dependencies": { 3584 | "event-stream": "=3.3.4" 3585 | }, 3586 | "bin": { 3587 | "ps-tree": "bin/ps-tree.js" 3588 | }, 3589 | "engines": { 3590 | "node": ">= 0.10" 3591 | } 3592 | }, 3593 | "node_modules/regenerator-runtime": { 3594 | "version": "0.14.1", 3595 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", 3596 | "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" 3597 | }, 3598 | "node_modules/require-directory": { 3599 | "version": "2.1.1", 3600 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3601 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 3602 | "engines": { 3603 | "node": ">=0.10.0" 3604 | } 3605 | }, 3606 | "node_modules/retry": { 3607 | "version": "0.13.1", 3608 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", 3609 | "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", 3610 | "engines": { 3611 | "node": ">= 4" 3612 | } 3613 | }, 3614 | "node_modules/rpc-websockets": { 3615 | "version": "7.9.0", 3616 | "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.9.0.tgz", 3617 | "integrity": "sha512-DwKewQz1IUA5wfLvgM8wDpPRcr+nWSxuFxx5CbrI2z/MyyZ4nXLM86TvIA+cI1ZAdqC8JIBR1mZR55dzaLU+Hw==", 3618 | "dependencies": { 3619 | "@babel/runtime": "^7.17.2", 3620 | "eventemitter3": "^4.0.7", 3621 | "uuid": "^8.3.2", 3622 | "ws": "^8.5.0" 3623 | }, 3624 | "funding": { 3625 | "type": "paypal", 3626 | "url": "https://paypal.me/kozjak" 3627 | }, 3628 | "optionalDependencies": { 3629 | "bufferutil": "^4.0.1", 3630 | "utf-8-validate": "^5.0.2" 3631 | } 3632 | }, 3633 | "node_modules/rpc-websockets/node_modules/ws": { 3634 | "version": "8.16.0", 3635 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", 3636 | "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", 3637 | "engines": { 3638 | "node": ">=10.0.0" 3639 | }, 3640 | "peerDependencies": { 3641 | "bufferutil": "^4.0.1", 3642 | "utf-8-validate": ">=5.0.2" 3643 | }, 3644 | "peerDependenciesMeta": { 3645 | "bufferutil": { 3646 | "optional": true 3647 | }, 3648 | "utf-8-validate": { 3649 | "optional": true 3650 | } 3651 | } 3652 | }, 3653 | "node_modules/rxjs": { 3654 | "version": "7.8.1", 3655 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", 3656 | "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", 3657 | "dependencies": { 3658 | "tslib": "^2.1.0" 3659 | } 3660 | }, 3661 | "node_modules/safe-buffer": { 3662 | "version": "5.2.1", 3663 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 3664 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 3665 | "funding": [ 3666 | { 3667 | "type": "github", 3668 | "url": "https://github.com/sponsors/feross" 3669 | }, 3670 | { 3671 | "type": "patreon", 3672 | "url": "https://www.patreon.com/feross" 3673 | }, 3674 | { 3675 | "type": "consulting", 3676 | "url": "https://feross.org/support" 3677 | } 3678 | ] 3679 | }, 3680 | "node_modules/secp256k1": { 3681 | "version": "4.0.3", 3682 | "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", 3683 | "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", 3684 | "hasInstallScript": true, 3685 | "dependencies": { 3686 | "elliptic": "^6.5.4", 3687 | "node-addon-api": "^2.0.0", 3688 | "node-gyp-build": "^4.2.0" 3689 | }, 3690 | "engines": { 3691 | "node": ">=10.0.0" 3692 | } 3693 | }, 3694 | "node_modules/shebang-command": { 3695 | "version": "2.0.0", 3696 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3697 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3698 | "dependencies": { 3699 | "shebang-regex": "^3.0.0" 3700 | }, 3701 | "engines": { 3702 | "node": ">=8" 3703 | } 3704 | }, 3705 | "node_modules/shebang-regex": { 3706 | "version": "3.0.0", 3707 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3708 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3709 | "engines": { 3710 | "node": ">=8" 3711 | } 3712 | }, 3713 | "node_modules/signal-exit": { 3714 | "version": "3.0.7", 3715 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 3716 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 3717 | }, 3718 | "node_modules/snake-case": { 3719 | "version": "3.0.4", 3720 | "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", 3721 | "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", 3722 | "dependencies": { 3723 | "dot-case": "^3.0.4", 3724 | "tslib": "^2.0.3" 3725 | } 3726 | }, 3727 | "node_modules/split": { 3728 | "version": "0.3.3", 3729 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 3730 | "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", 3731 | "dependencies": { 3732 | "through": "2" 3733 | }, 3734 | "engines": { 3735 | "node": "*" 3736 | } 3737 | }, 3738 | "node_modules/start-server-and-test": { 3739 | "version": "1.15.4", 3740 | "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.15.4.tgz", 3741 | "integrity": "sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg==", 3742 | "dependencies": { 3743 | "arg": "^5.0.2", 3744 | "bluebird": "3.7.2", 3745 | "check-more-types": "2.24.0", 3746 | "debug": "4.3.4", 3747 | "execa": "5.1.1", 3748 | "lazy-ass": "1.6.0", 3749 | "ps-tree": "1.2.0", 3750 | "wait-on": "7.0.1" 3751 | }, 3752 | "bin": { 3753 | "server-test": "src/bin/start.js", 3754 | "start-server-and-test": "src/bin/start.js", 3755 | "start-test": "src/bin/start.js" 3756 | }, 3757 | "engines": { 3758 | "node": ">=6" 3759 | } 3760 | }, 3761 | "node_modules/stream-combiner": { 3762 | "version": "0.0.4", 3763 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 3764 | "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", 3765 | "dependencies": { 3766 | "duplexer": "~0.1.1" 3767 | } 3768 | }, 3769 | "node_modules/string-width": { 3770 | "version": "4.2.3", 3771 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3772 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3773 | "dependencies": { 3774 | "emoji-regex": "^8.0.0", 3775 | "is-fullwidth-code-point": "^3.0.0", 3776 | "strip-ansi": "^6.0.1" 3777 | }, 3778 | "engines": { 3779 | "node": ">=8" 3780 | } 3781 | }, 3782 | "node_modules/strip-ansi": { 3783 | "version": "6.0.1", 3784 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3785 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3786 | "dependencies": { 3787 | "ansi-regex": "^5.0.1" 3788 | }, 3789 | "engines": { 3790 | "node": ">=8" 3791 | } 3792 | }, 3793 | "node_modules/strip-final-newline": { 3794 | "version": "2.0.0", 3795 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 3796 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 3797 | "engines": { 3798 | "node": ">=6" 3799 | } 3800 | }, 3801 | "node_modules/superstruct": { 3802 | "version": "0.15.5", 3803 | "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", 3804 | "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" 3805 | }, 3806 | "node_modules/text-encoding-utf-8": { 3807 | "version": "1.0.2", 3808 | "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", 3809 | "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" 3810 | }, 3811 | "node_modules/through": { 3812 | "version": "2.3.8", 3813 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3814 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" 3815 | }, 3816 | "node_modules/tiny-invariant": { 3817 | "version": "1.3.3", 3818 | "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", 3819 | "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" 3820 | }, 3821 | "node_modules/toformat": { 3822 | "version": "2.0.0", 3823 | "resolved": "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz", 3824 | "integrity": "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==" 3825 | }, 3826 | "node_modules/toml": { 3827 | "version": "3.0.0", 3828 | "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", 3829 | "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" 3830 | }, 3831 | "node_modules/tr46": { 3832 | "version": "0.0.3", 3833 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 3834 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 3835 | }, 3836 | "node_modules/traverse-chain": { 3837 | "version": "0.1.0", 3838 | "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", 3839 | "integrity": "sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==" 3840 | }, 3841 | "node_modules/tslib": { 3842 | "version": "2.6.2", 3843 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 3844 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" 3845 | }, 3846 | "node_modules/tweetnacl": { 3847 | "version": "1.0.3", 3848 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", 3849 | "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" 3850 | }, 3851 | "node_modules/undici-types": { 3852 | "version": "5.26.5", 3853 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 3854 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 3855 | }, 3856 | "node_modules/utf-8-validate": { 3857 | "version": "5.0.10", 3858 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", 3859 | "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", 3860 | "hasInstallScript": true, 3861 | "optional": true, 3862 | "dependencies": { 3863 | "node-gyp-build": "^4.3.0" 3864 | }, 3865 | "engines": { 3866 | "node": ">=6.14.2" 3867 | } 3868 | }, 3869 | "node_modules/uuid": { 3870 | "version": "8.3.2", 3871 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 3872 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 3873 | "bin": { 3874 | "uuid": "dist/bin/uuid" 3875 | } 3876 | }, 3877 | "node_modules/wait-on": { 3878 | "version": "7.0.1", 3879 | "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz", 3880 | "integrity": "sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==", 3881 | "dependencies": { 3882 | "axios": "^0.27.2", 3883 | "joi": "^17.7.0", 3884 | "lodash": "^4.17.21", 3885 | "minimist": "^1.2.7", 3886 | "rxjs": "^7.8.0" 3887 | }, 3888 | "bin": { 3889 | "wait-on": "bin/wait-on" 3890 | }, 3891 | "engines": { 3892 | "node": ">=12.0.0" 3893 | } 3894 | }, 3895 | "node_modules/webidl-conversions": { 3896 | "version": "3.0.1", 3897 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 3898 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 3899 | }, 3900 | "node_modules/whatwg-url": { 3901 | "version": "5.0.0", 3902 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 3903 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 3904 | "dependencies": { 3905 | "tr46": "~0.0.3", 3906 | "webidl-conversions": "^3.0.0" 3907 | } 3908 | }, 3909 | "node_modules/which": { 3910 | "version": "2.0.2", 3911 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3912 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3913 | "dependencies": { 3914 | "isexe": "^2.0.0" 3915 | }, 3916 | "bin": { 3917 | "node-which": "bin/node-which" 3918 | }, 3919 | "engines": { 3920 | "node": ">= 8" 3921 | } 3922 | }, 3923 | "node_modules/wrap-ansi": { 3924 | "version": "7.0.0", 3925 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3926 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3927 | "dependencies": { 3928 | "ansi-styles": "^4.0.0", 3929 | "string-width": "^4.1.0", 3930 | "strip-ansi": "^6.0.0" 3931 | }, 3932 | "engines": { 3933 | "node": ">=10" 3934 | }, 3935 | "funding": { 3936 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3937 | } 3938 | }, 3939 | "node_modules/ws": { 3940 | "version": "7.5.9", 3941 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 3942 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 3943 | "engines": { 3944 | "node": ">=8.3.0" 3945 | }, 3946 | "peerDependencies": { 3947 | "bufferutil": "^4.0.1", 3948 | "utf-8-validate": "^5.0.2" 3949 | }, 3950 | "peerDependenciesMeta": { 3951 | "bufferutil": { 3952 | "optional": true 3953 | }, 3954 | "utf-8-validate": { 3955 | "optional": true 3956 | } 3957 | } 3958 | }, 3959 | "node_modules/y18n": { 3960 | "version": "5.0.8", 3961 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3962 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3963 | "engines": { 3964 | "node": ">=10" 3965 | } 3966 | }, 3967 | "node_modules/yargs": { 3968 | "version": "17.7.2", 3969 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 3970 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 3971 | "dependencies": { 3972 | "cliui": "^8.0.1", 3973 | "escalade": "^3.1.1", 3974 | "get-caller-file": "^2.0.5", 3975 | "require-directory": "^2.1.1", 3976 | "string-width": "^4.2.3", 3977 | "y18n": "^5.0.5", 3978 | "yargs-parser": "^21.1.1" 3979 | }, 3980 | "engines": { 3981 | "node": ">=12" 3982 | } 3983 | }, 3984 | "node_modules/yargs-parser": { 3985 | "version": "21.1.1", 3986 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 3987 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 3988 | "engines": { 3989 | "node": ">=12" 3990 | } 3991 | } 3992 | } 3993 | } 3994 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tradingbot", 3 | "version": "1.0.0", 4 | "description": "", 5 | "scripts": { 6 | "start": "node dist/main.js", 7 | "dev": "ts-node src/main.ts", 8 | "build": "tsc" 9 | }, 10 | "keywords": [ 11 | "solana", 12 | "trading", 13 | "bot" 14 | ], 15 | "author": "gianlucamazza", 16 | "license": "ISC", 17 | "dependencies": { 18 | "@jup-ag/api": "^6.0.11", 19 | "@jup-ag/core": "^4.0.0-beta.21", 20 | "@project-serum/anchor": "^0.26.0", 21 | "@solana/spl-token-registry": "^0.2.4574", 22 | "@solana/web3.js": "^1.90.0", 23 | "bs58": "^5.0.0", 24 | "cross-fetch": "^4.0.0", 25 | "dotenv": "^16.4.4", 26 | "jsbi": "^4.3.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/api/jupiter.ts: -------------------------------------------------------------------------------- 1 | import { Connection, Keypair, VersionedTransaction, BlockhashWithExpiryBlockHeight } from '@solana/web3.js'; 2 | import fetch from 'cross-fetch'; 3 | import { transactionSenderAndConfirmationWaiter } from '../utils/transactionSender'; 4 | 5 | /** 6 | * Class for interacting with the Jupiter API to perform token swaps on the Solana blockchain. 7 | */ 8 | export class JupiterClient { 9 | baseUri: string; 10 | 11 | /** 12 | * Constructs a JupiterClient instance. 13 | * @param connection The Solana connection object. 14 | * @param userKeypair The user's Solana Keypair. 15 | */ 16 | constructor(private connection: Connection, private userKeypair: Keypair) { 17 | this.baseUri = 'https://quote-api.jup.ag/v6'; 18 | } 19 | 20 | /** 21 | * Get the Solana connection. 22 | * @returns The Solana connection. 23 | */ 24 | public getConnection(): Connection { 25 | return this.connection; 26 | } 27 | 28 | /** 29 | * Get the user keypair. 30 | * @returns The user keypair. 31 | */ 32 | getUserKeypair(): Keypair { 33 | return this.userKeypair; 34 | } 35 | 36 | /** 37 | * Retrieves a swap quote from the Jupiter API. 38 | * @param inputMint The address of the input token mint. 39 | * @param outputMint The address of the output token mint. 40 | * @param amount The amount of input tokens to swap. 41 | * @param slippageBps The maximum slippage allowed, in basis points. 42 | * @returns A promise that resolves to the swap quote. 43 | */ 44 | async getQuote(inputMint: string, outputMint: string, amount: string, slippageBps: number): Promise { 45 | console.log(`Getting quote for ${amount} ${inputMint} -> ${outputMint}`); 46 | const response = await fetch( 47 | `${this.baseUri}/quote?inputMint=${inputMint}&outputMint=${outputMint}&amount=${amount}&slippageBps=${slippageBps}` 48 | ); 49 | const quoteResponse = await response.json(); 50 | if (!response.ok) { 51 | console.error('Failed to get quote:', quoteResponse.error); 52 | throw new Error(`Failed to get quote: ${quoteResponse.error}`); 53 | } 54 | return quoteResponse; 55 | } 56 | 57 | /** 58 | * Retrieves a swap transaction from the Jupiter API. 59 | * @param quoteResponse The response from the getQuote method. 60 | * @param wrapAndUnwrapSol Whether to wrap and unwrap SOL if necessary. 61 | * @param feeAccount An optional fee account address. 62 | * @param priorityFees An optional priority fee amount in lamports (default in Solana : 100000). 63 | * @returns A promise that resolves to the swap transaction. 64 | */ 65 | async getSwapTransaction(quoteResponse: any, wrapAndUnwrapSol: boolean = true, priorityFees = 200000, feeAccount?: string): Promise { 66 | const body = { 67 | quoteResponse, 68 | userPublicKey: this.userKeypair.publicKey.toString(), 69 | wrapAndUnwrapSol, 70 | ...(feeAccount && { feeAccount }), 71 | ...(priorityFees !== undefined && { prioritizationFeeLamports: priorityFees }), 72 | ...(priorityFees !== undefined && { dynamicComputeUnitLimit: true }) 73 | }; 74 | 75 | const response = await fetch(`${this.baseUri}/swap`, { 76 | method: 'POST', 77 | headers: { 'Content-Type': 'application/json' }, 78 | body: JSON.stringify(body) 79 | }); 80 | 81 | if (!response.ok) { 82 | throw new Error('Failed to get swap transaction'); 83 | } 84 | 85 | const { swapTransaction } = await response.json(); 86 | return swapTransaction; 87 | } 88 | 89 | /** 90 | * Executes a swap transaction on the Solana blockchain. 91 | * @param swapTransaction The swap transaction obtained from getSwapTransaction, encoded in base64. 92 | * @returns A promise that resolves to a boolean indicating whether the transaction was successfully confirmed. 93 | */ 94 | async executeSwap(swapTransaction: any): Promise { 95 | try { 96 | const swapTransactionBuf = Buffer.from(swapTransaction, 'base64'); 97 | let transaction = VersionedTransaction.deserialize(swapTransactionBuf); 98 | transaction.sign([this.userKeypair]); 99 | 100 | const connection = this.getConnection(); 101 | 102 | // Retrieving the necessary data for `transactionSenderAndConfirmationWaiter` 103 | const latestBlockhash = await connection.getLatestBlockhash(); 104 | const blockhashWithExpiryBlockHeight: BlockhashWithExpiryBlockHeight = { 105 | blockhash: latestBlockhash.blockhash, 106 | lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, 107 | }; 108 | 109 | const serializedTransaction = Buffer.from(transaction.serialize()); 110 | 111 | // Sending the transaction using `transactionSenderAndConfirmationWaiter` 112 | const confirmation = await transactionSenderAndConfirmationWaiter({ 113 | connection, 114 | serializedTransaction, 115 | blockhashWithExpiryBlockHeight, 116 | }); 117 | 118 | if (!confirmation) { 119 | console.error("Swap transaction expired or failed."); 120 | return false; 121 | } else if (confirmation.meta && confirmation.meta.err) { 122 | console.error("Swap transaction failed with error:", confirmation.meta.err); 123 | return false; 124 | } 125 | 126 | console.log('Swap transaction confirmed'); 127 | return true; 128 | } catch (err) { 129 | console.error('Failed to send swap transaction:', err); 130 | return false; 131 | } 132 | } 133 | 134 | /** 135 | * Waits for a transaction to be confirmed on the Solana blockchain. 136 | * @param txId The ID of the transaction to wait for. 137 | * @param timeout The maximum time to wait for confirmation, in milliseconds. Defaults to 60000 ms. 138 | * @returns A promise that resolves to a boolean indicating whether the transaction was confirmed within the timeout period. 139 | */ 140 | async waitForTransactionConfirmation(txId: string, timeout = 60000): Promise { 141 | const startTime = Date.now(); 142 | while (Date.now() - startTime < timeout) { 143 | const status = await this.connection.getSignatureStatus(txId); 144 | if (status && status.value && status.value.confirmationStatus === 'finalized') { 145 | return true; 146 | } 147 | await new Promise(resolve => setTimeout(resolve, 2000)); 148 | } 149 | return false; 150 | } 151 | } -------------------------------------------------------------------------------- /src/api/solana.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import bs58 from 'bs58'; 3 | import { Keypair } from '@solana/web3.js'; 4 | import { Connection } from '@solana/web3.js'; 5 | /** 6 | * Setup connection to Solana RPC endpoint 7 | * @param {string} endpoint - RPC endpoint 8 | * @returns {Connection} - Connection object 9 | */ 10 | export function setupSolanaConnection(endpoint: string): Connection { 11 | return new Connection(endpoint, 'confirmed'); 12 | } 13 | 14 | /** 15 | * Get user keypair from private key 16 | * @param {string} privateKey - User private key 17 | * @returns {Keypair} - User keypair 18 | */ 19 | export function getUserKeypair(filePath: string): Keypair { 20 | const secretKeyString = fs.readFileSync(filePath, { encoding: 'utf8' }); 21 | console.log(secretKeyString); 22 | const secretKey = bs58.decode(secretKeyString); 23 | return Keypair.fromSecretKey(secretKey); 24 | } -------------------------------------------------------------------------------- /src/constants/constants.ts: -------------------------------------------------------------------------------- 1 | import { Cluster } from "@solana/web3.js"; 2 | 3 | // Endpoints, connection 4 | export const ENV: Cluster = (process.env.CLUSTER as Cluster) || "mainnet-beta"; 5 | 6 | export const MBC_MINT_ADDRESS = "4s41P39cBUsBbVzEuf6TTLsdJGniuLfjKyR4ZEBgNKba" 7 | export const USDC_MINT_ADDRESS = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" 8 | export const SOL_MINT_ADDRESS = "So11111111111111111111111111111111111111112" 9 | 10 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import dotenv from 'dotenv'; 2 | import { JupiterClient } from './api/jupiter'; 3 | import { setupSolanaConnection } from './api/solana'; 4 | import { MarketMaker } from './strategies/basicMM'; 5 | import { loadKeypair } from './wallet'; 6 | 7 | async function main() { 8 | dotenv.config(); 9 | 10 | if (!process.env.SOLANA_RPC_ENDPOINT) { 11 | throw new Error('SOLANA_RPC_ENDPOINT is not set'); 12 | } 13 | 14 | if (!process.env.USER_KEYPAIR) { 15 | throw new Error('USER_KEYPAIR is not set'); 16 | } 17 | 18 | if (!process.env.ENABLE_TRADING) { 19 | console.warn('ENABLE_TRADING is not set. Defaulting to false'); 20 | } 21 | 22 | const connection = setupSolanaConnection(process.env.SOLANA_RPC_ENDPOINT); 23 | console.log(`Network: ${connection.rpcEndpoint}`); 24 | const userKeypair = loadKeypair(); 25 | console.log('MarketMaker PubKey:', userKeypair.publicKey.toBase58()); 26 | const jupiterClient = new JupiterClient(connection, userKeypair); 27 | 28 | const enabled = process.env.ENABLE_TRADING === 'true'; 29 | const marketMaker = new MarketMaker(); 30 | await marketMaker.runMM(jupiterClient, enabled); 31 | } 32 | 33 | 34 | main().catch((err) => console.error(err)) -------------------------------------------------------------------------------- /src/strategies/basicMM.ts: -------------------------------------------------------------------------------- 1 | import { JupiterClient } from '../api/jupiter'; 2 | import { SOL_MINT_ADDRESS, MBC_MINT_ADDRESS, USDC_MINT_ADDRESS } from '../constants/constants'; 3 | import { TOKEN_PROGRAM_ID } from '@solana/spl-token'; 4 | import Decimal from 'decimal.js'; 5 | import { fromNumberToLamports } from '../utils/convert'; 6 | import { Connection, PublicKey } from '@solana/web3.js'; 7 | import { sleep } from '../utils/sleep'; 8 | 9 | /** 10 | * Class for market making basic strategy 11 | */ 12 | export class MarketMaker { 13 | mcbToken: { address: string, symbol: string, decimals: number } 14 | solToken: { address: string, symbol: string, decimals: number } 15 | usdcToken: { address: string, symbol: string, decimals: number } 16 | waitTime: number 17 | slippageBps: number 18 | priceTolerance: number 19 | rebalancePercentage: number 20 | 21 | /** 22 | * Initializes a new instance of the MarketMaker class with default properties. 23 | */ 24 | constructor() { 25 | // Read decimals from the token mint addresses 26 | this.mcbToken = { address: MBC_MINT_ADDRESS, symbol: 'MBC', decimals: 9 }; 27 | this.solToken = { address: SOL_MINT_ADDRESS, symbol: 'SOL', decimals: 9 }; 28 | this.usdcToken = { address: USDC_MINT_ADDRESS, symbol: 'USDC', decimals: 6 }; 29 | this.waitTime = 60000; // 1 minute 30 | this.slippageBps = 50; // 0.5% 31 | this.priceTolerance = 0.02; // 2% 32 | this.rebalancePercentage = 0.5; // 50% 33 | } 34 | 35 | /** 36 | * Run market making strategy 37 | * @param {JupiterClient} jupiterClient - JupiterClient object 38 | * @param {boolean} enableTrading - Enable trading 39 | * @returns {Promise} - Promise object 40 | */ 41 | async runMM(jupiterClient: JupiterClient, enableTrading: Boolean = false): Promise { 42 | const tradePairs = [{ token0: this.solToken, token1: this.mcbToken }]; 43 | 44 | while (true) { 45 | for (const pair of tradePairs) { 46 | await this.evaluateAndExecuteTrade(jupiterClient, pair, enableTrading); 47 | } 48 | 49 | console.log(`Waiting for ${this.waitTime / 1000} seconds...`); 50 | await sleep(this.waitTime); 51 | } 52 | } 53 | 54 | /** 55 | * Evaluate and execute trade 56 | * @param {JupiterClient} jupiterClient - JupiterClient object 57 | * @param {any} pair - Pair object 58 | * @param {boolean} enableTrading - Enable trading 59 | * @returns {Promise} - Promise object 60 | * 61 | **/ 62 | async evaluateAndExecuteTrade(jupiterClient: JupiterClient, pair: any, enableTrading: Boolean): Promise { 63 | const token0Balance = await this.fetchTokenBalance(jupiterClient, pair.token0); // SOL balance 64 | const token1Balance = await this.fetchTokenBalance(jupiterClient, pair.token1); // MBC balance 65 | 66 | // Log current token balances 67 | console.log(`Token0 balance (in ${pair.token0.symbol}): ${token0Balance.toString()}`); 68 | console.log(`Token1 balance (in ${pair.token1.symbol}): ${token1Balance.toString()}`); 69 | 70 | // Get USD value for both tokens 71 | const tradeNecessity = await this.determineTradeNecessity(jupiterClient, pair, token0Balance, token1Balance); 72 | const { tradeNeeded, solAmountToTrade, mbcAmountToTrade } = tradeNecessity!; 73 | 74 | if (tradeNeeded) { 75 | console.log('Trade needed'); 76 | if (solAmountToTrade.gt(0)) { 77 | console.log(`Trading ${solAmountToTrade.toString()} SOL for MBC...`); 78 | const lamportsAsString = fromNumberToLamports(solAmountToTrade.toNumber(), pair.token0.decimals).toString(); 79 | const quote = await jupiterClient.getQuote(pair.token0.address, pair.token1.address, lamportsAsString, this.slippageBps); 80 | const swapTransaction = await jupiterClient.getSwapTransaction(quote); 81 | if (enableTrading) await jupiterClient.executeSwap(swapTransaction); 82 | else console.log('Trading disabled'); 83 | } else if (mbcAmountToTrade.gt(0)) { 84 | console.log(`Trading ${mbcAmountToTrade.toString()} MBC for SOL...`); 85 | const lamportsAsString = fromNumberToLamports(mbcAmountToTrade.toNumber(), pair.token1.decimals).toString(); 86 | const quote = await jupiterClient.getQuote(pair.token1.address, pair.token0.address, lamportsAsString, this.slippageBps); 87 | const swapTransaction = await jupiterClient.getSwapTransaction(quote); 88 | if (enableTrading) await jupiterClient.executeSwap(swapTransaction); 89 | else console.log('Trading disabled'); 90 | } 91 | } else { 92 | console.log('No trade needed'); 93 | } 94 | } 95 | 96 | /** 97 | * Determines the necessity of a trade based on the current balance of two tokens and their USD values. 98 | * The goal is to maintain a 50/50 ratio of the total USD value of each token. 99 | * 100 | * @param jupiterClient An instance of JupiterClient used to fetch USD values of tokens. 101 | * @param pair An object representing the token pair to be evaluated, containing `token0` and `token1` properties. 102 | * @param token0Balance The current balance of `token0`. 103 | * @param token1Balance The current balance of `token1`. 104 | * @returns A promise that resolves to an object indicating whether a trade is needed and the amount of each token to trade. 105 | */ 106 | async determineTradeNecessity(jupiterClient: JupiterClient, pair: any, token0Balance: Decimal, token1Balance: Decimal) { 107 | const token0Price = await this.getUSDValue(jupiterClient, pair.token0); 108 | const token1Price = await this.getUSDValue(jupiterClient, pair.token1); 109 | 110 | const token0Value = token0Balance.mul(token0Price); 111 | const token1Value = token1Balance.mul(token1Price); 112 | 113 | const totalPortfolioValue = token0Value.add(token1Value); 114 | const targetValuePerToken = totalPortfolioValue.div(new Decimal(2)); 115 | 116 | 117 | let solAmountToTrade = new Decimal(0); 118 | let mbcAmountToTrade = new Decimal(0); 119 | let tradeNeeded = false; 120 | 121 | console.log(`${pair.token0.symbol} value: ${token0Value.toString()}`); 122 | console.log(`${pair.token1.symbol} value: ${token1Value.toString()}`); 123 | 124 | if (token0Value.gt(targetValuePerToken)) { 125 | // If token0's value exceeds the maximum tolerated value, trade some of it for token1 126 | const valueDiff = token0Value.sub(targetValuePerToken); 127 | solAmountToTrade = valueDiff.div(token0Price); 128 | tradeNeeded = true; 129 | } else if (token1Value.gt(targetValuePerToken)) { 130 | // If token0's value is below the minimum tolerated value, trade some token1 for it 131 | const valueDiff = token1Value.sub(targetValuePerToken); 132 | mbcAmountToTrade = valueDiff.div(token1Price); 133 | tradeNeeded = true; 134 | } 135 | 136 | const minimumTradeAmount = new Decimal(0.01); 137 | if (solAmountToTrade.lt(minimumTradeAmount) && mbcAmountToTrade.lt(minimumTradeAmount)) { 138 | tradeNeeded = false; 139 | } 140 | 141 | return { tradeNeeded, solAmountToTrade, mbcAmountToTrade }; 142 | } 143 | 144 | /** 145 | * Fetch token balance 146 | * @param {JupiterClient} jupiterClient - JupiterClient object 147 | * @param {any} token - Token object 148 | * @returns {Promise} - Token balance 149 | */ 150 | async fetchTokenBalance(jupiterClient: JupiterClient, token: { address: string; symbol: string; decimals: number; }): Promise { 151 | const connection = jupiterClient.getConnection(); 152 | const publicKey = jupiterClient.getUserKeypair().publicKey; 153 | 154 | let balance = token.address === SOL_MINT_ADDRESS 155 | ? await connection.getBalance(publicKey) 156 | : await this.getSPLTokenBalance(connection, publicKey, new PublicKey(token.address)); 157 | 158 | return new Decimal(balance).div(new Decimal(10).pow(token.decimals)); 159 | } 160 | 161 | /** 162 | * Get SPL token balance. 163 | * @param connection Solana connection object. 164 | * @param walletAddress Wallet public key. 165 | * @param tokenMintAddress Token mint public key. 166 | * @returns Token balance as a Decimal. 167 | */ 168 | async getSPLTokenBalance(connection: Connection, walletAddress: PublicKey, tokenMintAddress: PublicKey): Promise { 169 | const accounts = await connection.getParsedTokenAccountsByOwner(walletAddress, { programId: TOKEN_PROGRAM_ID }); 170 | const accountInfo = accounts.value.find((account: any) => account.account.data.parsed.info.mint === tokenMintAddress.toBase58()); 171 | return accountInfo ? new Decimal(accountInfo.account.data.parsed.info.tokenAmount.amount) : new Decimal(0); 172 | } 173 | 174 | /** 175 | * Get USD value of a token. 176 | * @param jupiterClient JupiterClient object. 177 | * @param token Token object. 178 | * @returns USD value of the token as a Decimal. 179 | */ 180 | async getUSDValue(jupiterClient: JupiterClient, token: any): Promise { 181 | const quote = await jupiterClient.getQuote(token.address, this.usdcToken.address, fromNumberToLamports(1, token.decimals).toString(), this.slippageBps); 182 | return new Decimal(quote.outAmount).div(new Decimal(10).pow(this.usdcToken.decimals)); 183 | } 184 | } 185 | -------------------------------------------------------------------------------- /src/utils/convert.ts: -------------------------------------------------------------------------------- 1 | // src/utils/convert.ts 2 | import Decimal from 'decimal.js'; 3 | 4 | /** 5 | * Converts a readable number of tokens to the smallest unit (e.g., lamports for SOL). 6 | * @param {number} value - The amount in readable units. 7 | * @param {number} decimals - The number of decimals the token uses. 8 | * @returns {number} - The amount in the smallest unit. 9 | */ 10 | export function fromNumberToLamports(value: number, decimals: number): number { 11 | const result = value * Math.pow(10, decimals); 12 | const roundedResult = result.toFixed(0); 13 | return parseInt(roundedResult); 14 | } 15 | 16 | /** 17 | * Converts the smallest unit of tokens (e.g., lamports for SOL) to a readable number. 18 | * @param {number} value - The amount in the smallest unit. 19 | * @param {number} decimals - The number of decimals the token uses. 20 | * @returns {number} - The readable amount. 21 | */ 22 | export function fromLamportsToNumber(value: number, decimals: number): number { 23 | const result = value / Math.pow(10, decimals); 24 | const roundedResult = result.toFixed(0); 25 | return parseInt(roundedResult); 26 | } 27 | 28 | /** 29 | * Converts a readable number of tokens to the smallest unit (e.g., lamports for SOL). 30 | * @param {number} value - The amount in readable units. 31 | * @param {number} decimals - The number of decimals the token uses. 32 | * @returns {Decimal} - The amount in the smallest unit. 33 | */ 34 | export function fromNumberToMinorUnits(value: number, decimals: number): Decimal { 35 | return new Decimal(value).mul(new Decimal(10).pow(decimals)); 36 | } 37 | 38 | /** 39 | * Converts the smallest unit of tokens (e.g., lamports for SOL) to a readable number. 40 | * @param {Decimal} value - The amount in the smallest unit. 41 | * @param {number} decimals - The number of decimals the token uses. 42 | * @returns {Decimal} - The readable amount. 43 | */ 44 | export function fromMinorUnitsToNumber(value: Decimal, decimals: number): Decimal { 45 | return value.div(new Decimal(10).pow(decimals)); 46 | } -------------------------------------------------------------------------------- /src/utils/getSignature.ts: -------------------------------------------------------------------------------- 1 | import bs58 from "bs58"; 2 | import { Transaction, VersionedTransaction } from "@solana/web3.js"; 3 | 4 | export function getSignature( 5 | transaction: Transaction | VersionedTransaction 6 | ): string { 7 | const signature = 8 | "signature" in transaction 9 | ? transaction.signature 10 | : transaction.signatures[0]; 11 | if (!signature) { 12 | throw new Error( 13 | "Missing transaction signature, the transaction was not signed by the fee payer" 14 | ); 15 | } 16 | return bs58.encode(signature); 17 | } -------------------------------------------------------------------------------- /src/utils/sleep.ts: -------------------------------------------------------------------------------- 1 | export function sleep(ms: number) { 2 | return new Promise((resolve) => setTimeout(resolve, ms)); 3 | } -------------------------------------------------------------------------------- /src/utils/transactionSender.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BlockhashWithExpiryBlockHeight, 3 | Connection, 4 | TransactionExpiredBlockheightExceededError, 5 | VersionedTransactionResponse, 6 | } from "@solana/web3.js"; 7 | import promiseRetry from "promise-retry"; 8 | import { sleep } from "./sleep"; 9 | 10 | type TransactionSenderAndConfirmationWaiterArgs = { 11 | connection: Connection; 12 | serializedTransaction: Buffer; 13 | blockhashWithExpiryBlockHeight: BlockhashWithExpiryBlockHeight; 14 | }; 15 | 16 | const SEND_OPTIONS = { 17 | skipPreflight: true, 18 | }; 19 | 20 | const MAX_PROCESS_DURATION_MS = 60000; // 60 seconds 21 | 22 | export async function transactionSenderAndConfirmationWaiter({ 23 | connection, 24 | serializedTransaction, 25 | blockhashWithExpiryBlockHeight, 26 | }: TransactionSenderAndConfirmationWaiterArgs): Promise { 27 | const txid = await connection.sendRawTransaction( 28 | serializedTransaction, 29 | SEND_OPTIONS 30 | ); 31 | 32 | const controller = new AbortController(); 33 | const abortSignal = controller.signal; 34 | 35 | const startTime = Date.now(); // Start the global process timer 36 | 37 | try { 38 | // Check if the transaction is immediately confirmed 39 | const immediateConfirmation = await connection.confirmTransaction( 40 | { 41 | ...blockhashWithExpiryBlockHeight, 42 | signature: txid, 43 | }, 44 | "finalized" 45 | ); 46 | 47 | if (immediateConfirmation.value.err) { 48 | console.error("Transaction failed immediately:", immediateConfirmation.value.err); 49 | return null; 50 | } 51 | 52 | // If the transaction is immediately confirmed, return the response 53 | const response = await connection.getTransaction(txid, { 54 | commitment: "finalized", 55 | maxSupportedTransactionVersion: 0, 56 | }); 57 | 58 | if (response) { 59 | return response; 60 | } 61 | 62 | // If the transaction is not immediately confirmed, start retrying 63 | const abortableResender = async () => { 64 | while (true) { 65 | await sleep(2_000); 66 | if (abortSignal.aborted) return; 67 | try { 68 | await connection.sendRawTransaction(serializedTransaction, SEND_OPTIONS); 69 | } catch (e) { 70 | console.warn(`Failed to resend transaction: ${e}`); 71 | } 72 | } 73 | }; 74 | 75 | abortableResender(); 76 | 77 | const lastValidBlockHeight = 78 | blockhashWithExpiryBlockHeight.lastValidBlockHeight - 150; 79 | 80 | await Promise.race([ 81 | connection.confirmTransaction( 82 | { 83 | ...blockhashWithExpiryBlockHeight, 84 | lastValidBlockHeight, 85 | signature: txid, 86 | abortSignal, 87 | }, 88 | "finalized" 89 | ), 90 | new Promise(async (resolve) => { 91 | while (!abortSignal.aborted) { 92 | await sleep(5_000); 93 | const elapsedTime = Date.now() - startTime; 94 | if (elapsedTime > MAX_PROCESS_DURATION_MS) { 95 | console.warn("Total process time exceeded"); 96 | break; // Stop the loop if the maximum duration is reached 97 | } 98 | const tx = await connection.getSignatureStatus(txid, { 99 | searchTransactionHistory: false, 100 | }); 101 | if (tx?.value?.confirmationStatus === "finalized") { 102 | resolve(tx); 103 | break; // Stop the loop if the transaction is finalized 104 | } 105 | } 106 | }), 107 | ]); 108 | } catch (e) { 109 | if (e instanceof TransactionExpiredBlockheightExceededError) { 110 | return null; // Return null if the transaction has expired 111 | } else { 112 | throw e; // Throw an exception for other errors 113 | } 114 | } finally { 115 | controller.abort(); 116 | } 117 | 118 | // Retrieve the final response after confirmation 119 | const response = await promiseRetry( 120 | async (retry) => { 121 | const elapsedTime = Date.now() - startTime; 122 | if (elapsedTime > MAX_PROCESS_DURATION_MS) { 123 | throw new Error("Maximum process duration exceeded during retry"); 124 | } 125 | const response = await connection.getTransaction(txid, { 126 | commitment: "finalized", 127 | maxSupportedTransactionVersion: 0, 128 | }); 129 | if (!response) { 130 | retry(response); 131 | } 132 | return response; 133 | }, 134 | { 135 | retries: 5, 136 | minTimeout: 3e3, 137 | } 138 | ); 139 | 140 | return response; 141 | } -------------------------------------------------------------------------------- /src/wallet.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import { Keypair } from '@solana/web3.js'; 3 | import { derivePath } from 'ed25519-hd-key'; 4 | import * as bip39 from 'bip39'; 5 | import * as nacl from 'tweetnacl'; 6 | import { homedir } from 'os'; 7 | import * as path from 'path'; 8 | 9 | const USER_HOME = homedir(); 10 | const USER_KEYPAIR_PATH = path.join(USER_HOME, '.config/solana/id.json'); 11 | 12 | // Load keypair from file 13 | function loadKeypairFromFile(filePath: string): Keypair { 14 | try { 15 | const fileContent = fs.readFileSync(filePath, { encoding: 'utf8' }); 16 | const secretKeyArray = JSON.parse(fileContent); 17 | return Keypair.fromSecretKey(Uint8Array.from(secretKeyArray)); 18 | } catch (error) { 19 | console.error(`Errore durante il caricamento della chiave privata da ${filePath}:`, error); 20 | process.exit(1); 21 | } 22 | } 23 | 24 | // Derive keypair from seed and derivation path 25 | function deriveKeypairFromSeed(seed: Buffer, derivationPath: string): Keypair { 26 | console.log('Derivation path:', derivationPath); 27 | const derivedSeed = derivePath(derivationPath, seed.toString('hex')).key; 28 | console.log('Derived seed:', derivedSeed); 29 | const keypair = nacl.sign.keyPair.fromSeed(derivedSeed); 30 | return Keypair.fromSecretKey(new Uint8Array([...keypair.secretKey])); 31 | } 32 | 33 | // Load keypair from mnemonic 34 | function loadKeypairFromMnemonic(mnemonic: string, derivationPath: string = "m/44'/501'/0'/0'"): Keypair { 35 | console.log('Mnemonic:', mnemonic); 36 | const seed = bip39.mnemonicToSeedSync(mnemonic); 37 | return deriveKeypairFromSeed(seed, derivationPath); 38 | } 39 | 40 | // Get user keypair, optionally using a derivation path 41 | export function getUserKeypair(derivationPath?: string): Keypair { 42 | const keypair = loadKeypairFromFile(USER_KEYPAIR_PATH); 43 | if (derivationPath) { 44 | const seed = keypair.secretKey.slice(0, 32); // Assume the seed is the first 32 bytes of the secret key 45 | return deriveKeypairFromSeed(Buffer.from(seed), derivationPath); 46 | } 47 | return keypair; 48 | } 49 | 50 | // Main function to load keypair 51 | export function loadKeypair(): Keypair { 52 | if (process.env.SOLANA_MNEMONIC) { 53 | return loadKeypairFromMnemonic(process.env.SOLANA_MNEMONIC); 54 | } else if (fs.existsSync(USER_KEYPAIR_PATH)) { 55 | return getUserKeypair(); 56 | } else { 57 | console.error('Private key file or mnemonic not found'); 58 | console.error('Please set SOLANA_MNEMONIC environment variable or create a private key file at', USER_KEYPAIR_PATH); 59 | process.exit(1); 60 | } 61 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "strict": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "outDir": "dist", 9 | "rootDir": "src", 10 | "resolveJsonModule": true, 11 | "skipLibCheck": true, 12 | "lib": [ 13 | "es6", 14 | "dom" 15 | ], 16 | "sourceMap": true, 17 | "declaration": true, 18 | }, 19 | "include": [ 20 | "src/**/*.ts", 21 | "types/**/*.d.ts" 22 | ], 23 | "exclude": [ 24 | "node_modules" 25 | ] 26 | } -------------------------------------------------------------------------------- /types/solana-web3.d.ts: -------------------------------------------------------------------------------- 1 | // solana-web3.d.ts 2 | declare module '@solana/web3.js' { 3 | import { Buffer } from 'buffer'; 4 | 5 | export class PublicKey { 6 | constructor(value: string | Buffer | Uint8Array | Array); 7 | static isPublicKey(value: any): value is PublicKey; 8 | toBase58(): string; 9 | toBuffer(): Buffer; 10 | } 11 | 12 | export class Keypair { 13 | constructor(); 14 | publicKey: PublicKey; 15 | secretKey: Uint8Array; 16 | } 17 | 18 | export type Commitment = 'processed' | 'confirmed' | 'finalized'; 19 | 20 | export class Connection { 21 | constructor(endpoint: string, commitment?: Commitment); 22 | getBalance(publicKey: PublicKey, commitment?: Commitment): Promise; 23 | 24 | } 25 | 26 | export class Transaction { 27 | constructor(); 28 | sign(...signers: Array): void; 29 | } 30 | } --------------------------------------------------------------------------------