diff --git a/README.md b/README.md index 848249f5..0346f7ce 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ See the [Program documentation](/programs/solauto/README.md) for more info on th - PNPM ``` -crate install shank-idl +cargo install shank-cli rustup component add rustfmt pnpm install -g ts-node ``` @@ -64,6 +64,7 @@ pnpm add @haven-fi/solauto-sdk ```typescript import { PublicKey } from "@solana/web3.js"; +import { NATIVE_MINT } from "@solana/spl-token"; import * as solauto from "@haven-fi/solauto-sdk"; // Create new Solauto client @@ -73,8 +74,8 @@ const client = solauto.getClient(solauto.LendingPlatform.MARGINFI, { }); // Initialize the client -const supplyMint = new PublicKey(NATIVE_MINT); -const debtMint = new PublicKey(USDC); +const supplyMint = NATIVE_MINT; +const debtMint = new PublicKey(solauto.USDC); await client.initializeNewSolautoPosition({ positionId: 1, lpPoolAccount: solauto.getMarginfiAccounts().defaultGroup, @@ -133,7 +134,6 @@ const statuses = txManager.send(transactionItems); ## Rebalancing an existing position ```typescript -import { PublicKey } from "@solana/web3.js"; import * as solauto from "@haven-fi/solauto-sdk"; // Create new Solauto client diff --git a/generateClients.cjs b/generateClients.cjs index bb81b02c..73edb58c 100644 --- a/generateClients.cjs +++ b/generateClients.cjs @@ -28,6 +28,49 @@ function fixAnchorIDL(idlFilename, programId) { origin: "anchor", address: programId, }; + + function flattenDefined(data) { + if (typeof data === "object" && data !== null) { + if (Array.isArray(data)) { + return data.map(flattenDefined); + } else if (data.defined && typeof data.defined === "object") { + return { ...data, defined: data.defined.name }; + } else { + return Object.keys(data).reduce((acc, key) => { + acc[key] = flattenDefined(data[key]); + return acc; + }, {}); + } + } + return data; + } + + data = flattenDefined(data); + + function replacePubkeyWithPublicKey(data) { + if (typeof data === "object" && data !== null) { + if (Array.isArray(data)) { + return data.map(replacePubkeyWithPublicKey); + } else { + return Object.keys(data).reduce((acc, key) => { + if (key === "pubkey") { + acc["publicKey"] = data[key]; + } else if (typeof data[key] === "string" && data[key] === "pubkey") { + acc[key] = "publicKey"; + } else { + acc[key] = replacePubkeyWithPublicKey(data[key]); + } + return acc; + }, {}); + } + } else if (data === "pubkey") { + return "publicKey"; + } + return data; + } + + data = replacePubkeyWithPublicKey(data); + fs.writeFileSync(idlFilePath, JSON.stringify(data, null, 2), "utf8"); } @@ -50,7 +93,9 @@ function generateTypescriptSDKForAnchorIDL(sdkDirName, idlFilename, programId) { const kinobi = k.createFromIdls([idlFilePath]); kinobi.accept( - new k.renderJavaScriptVisitor(path.join(typescriptSdkDir, sdkDirName)) + new k.renderJavaScriptVisitor( + path.join(typescriptSdkDir, "externalSdks", sdkDirName) + ) ); } @@ -92,16 +137,16 @@ async function cleanJupiterTsSDK(exclusions = []) { generateSolautoSDK(); -// generateRustSDKForAnchorIDL( -// "marginfi-sdk", -// "marginfi.json", -// "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" -// ); -// generateTypescriptSDKForAnchorIDL( -// "marginfi-sdk", -// "marginfi.json", -// "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" -// ); +generateRustSDKForAnchorIDL( + "marginfi-sdk", + "marginfi.json", + "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" +); +generateTypescriptSDKForAnchorIDL( + "marginfi", + "marginfi.json", + "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" +); // generateRustSDKForAnchorIDL( // "jupiter-sdk", @@ -109,12 +154,12 @@ generateSolautoSDK(); // "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" // ); // generateTypescriptSDKForAnchorIDL( -// "jupiter-sdk", +// "jupiter", // "jupiter.json", // "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" // ); // generateTypescriptSDKForAnchorIDL( -// "pyth-sdk", +// "pyth", // "pyth.json", // "pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" // ); diff --git a/idls/marginfi.json b/idls/marginfi.json index ce043b18..b0775aa3 100644 --- a/idls/marginfi.json +++ b/idls/marginfi.json @@ -883,7 +883,7 @@ "accounts": [ { "name": "marginfiGroup", - "isMut": false, + "isMut": true, "isSigner": false }, { diff --git a/idls/solauto.json b/idls/solauto.json index eff84e1c..2a0c6270 100644 --- a/idls/solauto.json +++ b/idls/solauto.json @@ -559,7 +559,7 @@ }, { "name": "marginfiGroup", - "isMut": false, + "isMut": true, "isSigner": false }, { @@ -697,7 +697,7 @@ }, { "name": "marginfiGroup", - "isMut": false, + "isMut": true, "isSigner": false }, { diff --git a/package.json b/package.json index 1095f5da..4c03ec4e 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "push": "git add . && git commit -m 'wip' && git push", "format:rust": "find ./programs/* -name '*.rs' -exec rustfmt {} +", "build:rs:local": "cargo build-sbf -- --package solauto --features local", + "build:rs:staging": "cargo build-sbf -- --package solauto --features \"test staging\"", "build:rs:test": "cargo build-sbf -- --package solauto --features test", "build:rs:prod": "solana-verify build --library-name solauto --base-image solanafoundation/solana-verifiable-build@sha256:f3d3a4adaa8008644fc4535373c6818275c7e35a0b07660890b4a95ef434221e", "build:ts": "cd solauto-sdk && npm run build", @@ -25,6 +26,7 @@ "sandbox": "cd solauto-sdk && npx ts-node local/txSandbox.ts", "update-lut:solauto": "cd solauto-sdk && npx ts-node local/updateSolautoLUT.ts", "update-lut:marginfi": "cd solauto-sdk && npx ts-node local/updateMarginfiLUT.ts", + "patch-lut": "cd solauto-sdk && npx ts-node local/patchLUT.ts", "create-token-accounts": "cd solauto-sdk && npx ts-node local/createTokenAccounts.ts", "prepare-accounts": "pnpm create-token-accounts && pnpm update-lut:solauto && pnpm update-lut:marginfi", "log-pos": "cd solauto-sdk && npx ts-node local/logPositions.ts", @@ -34,7 +36,8 @@ "@metaplex-foundation/kinobi": "^0.18.5", "@mrgnlabs/marginfi-client-v2": "^6.0.1", "@mrgnlabs/mrgn-common": "^2.0.2", - "borsh": "^2.0.0" + "borsh": "^2.0.0", + "cross-env": "^10.0.0" }, "devDependencies": { "solauto-sdk": "file:solauto-sdk", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a9acb1a..b2f2475b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,66 +1,1029 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@metaplex-foundation/kinobi': - specifier: ^0.18.5 - version: 0.18.5(fastestsmallesttextencoderdecoder@1.0.22) - '@mrgnlabs/marginfi-client-v2': - specifier: ^6.0.1 - version: 6.0.1 - '@mrgnlabs/mrgn-common': - specifier: ^2.0.2 - version: 2.0.2 - borsh: - specifier: ^2.0.0 - version: 2.0.0 - -devDependencies: - solauto-sdk: - specifier: file:solauto-sdk - version: file:solauto-sdk(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - typescript: - specifier: ^4.9.5 - version: 4.9.5 +importers: + + .: + dependencies: + '@metaplex-foundation/kinobi': + specifier: ^0.18.5 + version: 0.18.5(fastestsmallesttextencoderdecoder@1.0.22) + '@mrgnlabs/marginfi-client-v2': + specifier: ^6.0.1 + version: 6.1.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@mrgnlabs/mrgn-common': + specifier: ^2.0.2 + version: 2.0.3(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + borsh: + specifier: ^2.0.0 + version: 2.0.0 + cross-env: + specifier: ^10.0.0 + version: 10.0.0 + devDependencies: + solauto-sdk: + specifier: file:solauto-sdk + version: '@haven-fi/solauto-sdk@file:solauto-sdk(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)' + typescript: + specifier: ^4.9.5 + version: 4.9.5 packages: - /@babel/runtime@7.25.7: - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + '@babel/runtime@7.27.6': + resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - /@brokerloop/ttlcache@3.2.3: - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + '@brokerloop/ttlcache@3.2.3': + resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} + + '@common.js/quick-lru@7.0.0': + resolution: {integrity: sha512-DO3vApnH1vLizdWRSqzhg+S956vptHhtO+vw6PP6StJGDtaAGyfKSSPPGYWguJZu/Jlti6l6m6jB8NrKEQexLg==} + engines: {node: '>=18'} + + '@coral-xyz/anchor-errors@0.30.1': + resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + engines: {node: '>=10'} + + '@coral-xyz/anchor@0.29.0': + resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==} + engines: {node: '>=11'} + + '@coral-xyz/anchor@0.30.1': + resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.29.0': + resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@coral-xyz/borsh@0.30.1': + resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@epic-web/invariant@1.0.0': + resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} + + '@grpc/grpc-js@1.13.4': + resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.15': + resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + engines: {node: '>=6'} + hasBin: true + + '@haven-fi/solauto-sdk@file:solauto-sdk': + resolution: {directory: solauto-sdk, type: directory} + + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@jup-ag/api@6.0.24': + resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} + + '@metaplex-foundation/kinobi@0.18.5': + resolution: {integrity: sha512-qh4h4xGB+PHR5o4rcZki+wsIeZYi6R9SRV5UMqGi/rfDJXk0ckAZ+fxdam+mCc4N8HWLLWmEJbF5gx8E5K0fOA==} + + '@metaplex-foundation/umi-bundle-defaults@0.9.2': + resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-downloader-http@0.9.2': + resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-eddsa-web3js@0.9.2': + resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-http-fetch@0.9.2': + resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-options@0.8.9': + resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} + + '@metaplex-foundation/umi-program-repository@0.9.2': + resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-public-keys@0.8.9': + resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} + + '@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2': + resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-rpc-web3js@0.9.2': + resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-serializer-data-view@0.9.2': + resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + + '@metaplex-foundation/umi-serializers-core@0.8.9': + resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} + + '@metaplex-foundation/umi-serializers-encodings@0.8.9': + resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} + + '@metaplex-foundation/umi-serializers-numbers@0.8.9': + resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} + + '@metaplex-foundation/umi-serializers@0.9.0': + resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} + + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2': + resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2': + resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi-web3js-adapters@0.9.2': + resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} + peerDependencies: + '@metaplex-foundation/umi': ^0.9.2 + '@solana/web3.js': ^1.72.0 + + '@metaplex-foundation/umi@0.9.2': + resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} + + '@mrgnlabs/marginfi-client-v2@6.1.0': + resolution: {integrity: sha512-8T93tWsp6BbFyKocQBTxaJ1RhslnseNtMO+TWPySpr8iNaUmFax15fuA6Ml/q/wgjZHu2sqNPy501UeDnCb/kw==} + + '@mrgnlabs/mrgn-common@2.0.3': + resolution: {integrity: sha512-OrCvFJv2mCHVqTDhVRRacLO8e1yHSXP1+PrQEAuxGHTnP8qQE51yFwRR+Ne8Gz6VMaD50BxWqsgBlT8/6hOStw==} + + '@noble/curves@1.9.4': + resolution: {integrity: sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/ed25519@1.7.5': + resolution: {integrity: sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA==} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@prettier/sync@0.5.5': + resolution: {integrity: sha512-6BMtNr7aQhyNcGzmumkL0tgr1YQGfm9d7ZdmRpWqWuqpc9vZBind4xMe5NMiRECOhjuSiWHfBWLBnXkpeE90bw==} + peerDependencies: + prettier: '*' + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@pythnetwork/price-service-sdk@1.8.0': + resolution: {integrity: sha512-tFZ1thj3Zja06DzPIX2dEWSi7kIfIyqreoywvw5NQ3Z1pl5OJHQGMEhxt6Li3UCGSp2ooYZS9wl8/8XfrfrNSA==} + + '@pythnetwork/pyth-solana-receiver@0.8.2': + resolution: {integrity: sha512-WrrdwwhSYvvB5vJEL+SfPnfuxgkRKMeKdZvGFFwe6ENrMhrQCM05oDkvNNYfXATLcpQGRAyBu9l1xIxUxixpqw==} + + '@pythnetwork/solana-utils@0.4.2': + resolution: {integrity: sha512-hKo7Bcs/kDWA5Fnqhg9zJSB94NMoUDIDjHjSi/uvZOzwizISUQI6oY3LWd2CXzNh4f8djjY2BS5iNHaM4cm8Bw==} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.1': + resolution: {integrity: sha512-0y3kgFSJAOApNGefEOgLRMiXOHVmcF29Xw3zmR4LDUABvytG3ecKMXGz5oLt3vdaU2CyN3tuUVeGmQjrd0U1kw==} + + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.0.0-preview.1': + resolution: {integrity: sha512-NFA8itgcYUY3hkWMBpVRozd2poy1zfOvkIWZKx/D69oIMUtQTBpKrodRVBuhlBkAv12vDNkFljqVySpcMZMl7A==} + + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@2.0.0-preview.1': + resolution: {integrity: sha512-kBAxE9ZD5/c8j9CkPxqc55dbo7R50Re3k94SXR+k13DZCCs37Fyn0/mAkw/S95fofbi/zsi4jSfmsT5vCZD75A==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.0.0-preview.1': + resolution: {integrity: sha512-mnBWfLVwMH4hxwb4sWZ7G7djQCMsyymjysvUPDiF89LueTBm1hfdxUv8Cy1uUCGsJ3jO3scdPwB4noOgr0rG/g==} + hasBin: true + + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.1.8': + resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} + engines: {node: '>= 10'} + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-token@0.4.13': + resolution: {integrity: sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + + '@solana/wallet-adapter-base@0.9.27': + resolution: {integrity: sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==} + engines: {node: '>=20'} + peerDependencies: + '@solana/web3.js': ^1.98.0 + + '@solana/wallet-standard-features@1.3.0': + resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} + engines: {node: '>=16'} + + '@solana/web3.js@1.77.4': + resolution: {integrity: sha512-XdN0Lh4jdY7J8FYMyucxCwzn6Ga2Sr1DHDWRbqVzk7ZPmmpSPOVWHzO67X1cVT+jNi1D6gZi2tgjHgDPuj6e9Q==} + + '@solana/web3.js@1.95.8': + resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + + '@solana/web3.js@1.98.2': + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + + '@solworks/soltoolkit-sdk@0.0.23': + resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + + '@soncodi/signal@2.0.7': + resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@switchboard-xyz/common@2.5.19': + resolution: {integrity: sha512-Bzj1bu2U69YRh2OoNjkrafdREeB1KH+wmeFkBsASDjlhy/xXjey2Ry2HUTAIzdg2DMtfP6DoCW2Nn9ZQD5IO+Q==} + engines: {node: '>=12'} + + '@switchboard-xyz/common@3.0.12': + resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} + engines: {node: '>=20'} + + '@switchboard-xyz/common@3.4.1': + resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} + engines: {node: '>=20'} + + '@switchboard-xyz/on-demand@1.2.51': + resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} + engines: {node: '>= 18'} + deprecated: deprecated in favor of 2.x.x + + '@switchboard-xyz/on-demand@1.2.67': + resolution: {integrity: sha512-rtGA+9tQHb/xQnUFgVzyaOs2uKgnwP7OqYQLEOjTDdNTEEgU8OTR72ujluOEYB9LMByb7h9SRuOR353vxYQhYA==} + engines: {node: '>= 18'} + deprecated: deprecated in favor of 2.x.x + + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@18.19.119': + resolution: {integrity: sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg==} + + '@types/node@24.0.14': + resolution: {integrity: sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@wallet-standard/base@1.1.0': + resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} + engines: {node: '>=16'} + + '@wallet-standard/features@1.1.0': + resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} + engines: {node: '>=16'} + + '@zod/core@0.11.6': + resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} + + a-sync-waterfall@1.0.1: + resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + + base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + borsh@2.0.0: + resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + cron-validator@1.4.0: + resolution: {integrity: sha512-wGcJ9FCy65iaU6egSH8b5dZYJF7GU/3Jh06wzaT9lsa5dbqExjljmu+0cJ8cpKn+vUyZa/EM4WAxeLR6SypJXw==} + + cross-env@10.0.0: + resolution: {integrity: sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==} + engines: {node: '>=20'} + hasBin: true + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + crypto-hash@3.1.0: + resolution: {integrity: sha512-HR8JlZ+Dn54Lc5gGWZJxJitWbOCUzWb9/AlyONGecBnYZ+n/ONvt0gQnEzDNpJMYeRrYO7KogQ4qwyTPKnWKEw==} + engines: {node: '>=18'} + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + jito-ts@3.0.1: + resolution: {integrity: sha512-TSofF7KqcwyaWGjPaSYC8RDoNBY1TPRNBHdrw24bdIi7mQ5bFEDdYK3D//llw/ml8YDvcZlgd644WxhjLTS9yg==} + + js-sha256@0.11.1: + resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stable-stringify@1.3.0: + resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} + engines: {node: '>= 0.4'} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-synchronized@0.4.2: + resolution: {integrity: sha512-EwEJSg8gSGLicKXp/VzNi1tvzhdmNBxOzslkkJSoNUCQFZKH/NIUIp7xlfN+noaHrz4BJDN73gne8IHnjl/F/A==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + numeral@2.0.6: + resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} + + nunjucks@3.2.4: + resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} + engines: {node: '>= 6.9.0'} + hasBin: true + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + protobufjs@7.5.3: + resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} + engines: {node: '>=12.0.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + deprecated: deprecate 7.11.0 + + rpc-websockets@7.11.2: + resolution: {integrity: sha512-pL9r5N6AVHlMN/vT98+fcO+5+/UcPLf/4tq+WUaid/PPUGS/ttJ3y8e9IqmaWKtShNAysMSjkczuEA49NuV7UQ==} + + rpc-websockets@9.1.1: + resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + superstruct@1.0.4: + resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} + engines: {node: '>=14.0.0'} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + zod@4.0.0-beta.20250505T195954: + resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} + +snapshots: + + '@babel/runtime@7.27.6': {} + + '@brokerloop/ttlcache@3.2.3': dependencies: '@soncodi/signal': 2.0.7 - dev: true - /@common.js/quick-lru@7.0.0: - resolution: {integrity: sha512-DO3vApnH1vLizdWRSqzhg+S956vptHhtO+vw6PP6StJGDtaAGyfKSSPPGYWguJZu/Jlti6l6m6jB8NrKEQexLg==} - engines: {node: '>=18'} - dev: false + '@common.js/quick-lru@7.0.0': {} - /@coral-xyz/anchor-errors@0.30.1: - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} - engines: {node: '>=10'} + '@coral-xyz/anchor-errors@0.30.1': {} - /@coral-xyz/anchor@0.29.0: - resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==} - engines: {node: '>=11'} + '@coral-xyz/anchor@0.29.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.95.4) - '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.8.0 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.2 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 - cross-fetch: 3.1.8 + cross-fetch: 3.2.0 crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 @@ -70,22 +1033,20 @@ packages: transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@coral-xyz/anchor@0.30.1: - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} + '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.4) - '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.8.0 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + bn.js: 5.2.2 bs58: 4.0.1 buffer-layout: 1.2.2 camelcase: 6.3.0 - cross-fetch: 3.1.8 + cross-fetch: 3.2.0 crypto-hash: 1.3.0 eventemitter3: 4.0.7 pako: 2.1.0 @@ -97,540 +1058,356 @@ packages: - encoding - utf-8-validate - /@coral-xyz/borsh@0.29.0(@solana/web3.js@1.95.4): - resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 + '@coral-xyz/borsh@0.29.0(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))': dependencies: - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.2 buffer-layout: 1.2.2 - dev: false - /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.4): - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 + '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + bn.js: 5.2.2 buffer-layout: 1.2.2 - /@grpc/grpc-js@1.13.2: - resolution: {integrity: sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==} - engines: {node: '>=12.10.0'} + '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.2 + buffer-layout: 1.2.2 + + '@epic-web/invariant@1.0.0': {} + + '@grpc/grpc-js@1.13.4': dependencies: - '@grpc/proto-loader': 0.7.13 + '@grpc/proto-loader': 0.7.15 '@js-sdsl/ordered-map': 4.4.2 - dev: false - /@grpc/proto-loader@0.7.13: - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} - engines: {node: '>=6'} - hasBin: true + '@grpc/proto-loader@0.7.15': dependencies: lodash.camelcase: 4.3.0 - long: 5.2.3 - protobufjs: 7.4.0 + long: 5.3.2 + protobufjs: 7.5.3 yargs: 17.7.2 - dev: false - - /@js-sdsl/ordered-map@4.4.2: - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - dev: false - - /@jup-ag/api@6.0.24: - resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} - dev: true - /@metaplex-foundation/beet-solana@0.4.0: - resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==} + '@haven-fi/solauto-sdk@file:solauto-sdk(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@solana/web3.js': 1.95.3 + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@jup-ag/api': 6.0.24 + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-bundle-defaults': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-signer-wallet-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/spl-token': 0.4.13(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': 3.0.12(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@switchboard-xyz/on-demand': 1.2.51(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + axios: 1.10.0 + big.js: 6.2.2 bs58: 5.0.0 - debug: 4.3.7 + cross-fetch: 4.1.0 + dotenv: 16.6.1 + rpc-websockets: 7.11.0 transitivePeerDependencies: - bufferutil + - debug - encoding - - supports-color + - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate - dev: true - /@metaplex-foundation/beet@0.7.1: - resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==} - dependencies: - ansicolors: 0.3.2 - bn.js: 5.2.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - dev: true + '@js-sdsl/ordered-map@4.4.2': {} - /@metaplex-foundation/cusper@0.0.2: - resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} - dev: true + '@jup-ag/api@6.0.24': {} - /@metaplex-foundation/kinobi@0.18.5(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-qh4h4xGB+PHR5o4rcZki+wsIeZYi6R9SRV5UMqGi/rfDJXk0ckAZ+fxdam+mCc4N8HWLLWmEJbF5gx8E5K0fOA==} + '@metaplex-foundation/kinobi@0.18.5(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: - '@noble/hashes': 1.5.0 - '@prettier/sync': 0.5.2(prettier@3.3.3) + '@noble/hashes': 1.8.0 + '@prettier/sync': 0.5.5(prettier@3.6.2) '@solana/codecs-strings': 2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22) chalk: 4.1.2 - json-stable-stringify: 1.1.1 + json-stable-stringify: 1.3.0 nunjucks: 3.2.4 - prettier: 3.3.3 + prettier: 3.6.2 transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder - dev: false - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - encoding - dev: true - /@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: true - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@noble/curves': 1.6.0 - '@solana/web3.js': 1.95.8 - dev: true + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@noble/curves': 1.9.4 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /@metaplex-foundation/umi-options@0.8.9: - resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} - dev: true + '@metaplex-foundation/umi-options@0.8.9': {} - /@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: true - /@metaplex-foundation/umi-public-keys@0.8.9: - resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} + '@metaplex-foundation/umi-public-keys@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-encodings': 0.8.9 - dev: true - /@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: true - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: true + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): - resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 + '@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: '@metaplex-foundation/umi': 0.9.2 - dev: true - /@metaplex-foundation/umi-serializers-core@0.8.9: - resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} - dev: true + '@metaplex-foundation/umi-serializers-core@0.8.9': {} - /@metaplex-foundation/umi-serializers-encodings@0.8.9: - resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} + '@metaplex-foundation/umi-serializers-encodings@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: true - /@metaplex-foundation/umi-serializers-numbers@0.8.9: - resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} + '@metaplex-foundation/umi-serializers-numbers@0.8.9': dependencies: '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: true - /@metaplex-foundation/umi-serializers@0.9.0: - resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} + '@metaplex-foundation/umi-serializers@0.9.0': dependencies: '@metaplex-foundation/umi-options': 0.8.9 '@metaplex-foundation/umi-public-keys': 0.8.9 '@metaplex-foundation/umi-serializers-core': 0.8.9 '@metaplex-foundation/umi-serializers-encodings': 0.8.9 '@metaplex-foundation/umi-serializers-numbers': 0.8.9 - dev: true - /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: true + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: true + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} - peerDependencies: - '@metaplex-foundation/umi': ^0.9.2 - '@solana/web3.js': ^1.72.0 + '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 - dev: true - /@metaplex-foundation/umi@0.9.2: - resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} + '@metaplex-foundation/umi@0.9.2': dependencies: '@metaplex-foundation/umi-options': 0.8.9 '@metaplex-foundation/umi-public-keys': 0.8.9 '@metaplex-foundation/umi-serializers': 0.9.0 - dev: true - - /@mrgnlabs/marginfi-client-v2@6.0.1: - resolution: {integrity: sha512-I4IdrS+fAIhkcgqXmRfwsuZDRgzSipy1Ok8L8Wm3NGgw6JFvTje6qYJ2rNKdZOpZaTDl2q+kZc/GD5EhJkQrLA==} - dependencies: - '@coral-xyz/anchor': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.4) - '@mrgnlabs/mrgn-common': 2.0.2 - '@pythnetwork/pyth-solana-receiver': 0.8.2 - '@solana/spl-token': 0.1.8 - '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.95.4) - '@solana/web3.js': 1.95.4 - '@switchboard-xyz/on-demand': 1.2.67 - bignumber.js: 9.1.2 + + '@mrgnlabs/marginfi-client-v2@6.1.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@mrgnlabs/mrgn-common': 2.0.3(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@pythnetwork/pyth-solana-receiver': 0.8.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.1.8(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@switchboard-xyz/on-demand': 1.2.67(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bignumber.js: 9.3.1 borsh: 2.0.0 bs58: 6.0.0 crypto-hash: 3.1.0 - decimal.js: 10.4.3 + decimal.js: 10.6.0 superstruct: 1.0.4 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@mrgnlabs/mrgn-common@2.0.2: - resolution: {integrity: sha512-PypRjfnLPN4HPLz6VOyq7FpcbZPvG1CsZzBX7YMTBBiIZElt8NVk9cMZvTjZS7FzjgBdli0l8L60gt1ZdV2jvg==} + '@mrgnlabs/mrgn-common@2.0.3(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/anchor': 0.30.1 + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.95.4) - '@solana/web3.js': 1.95.4 - bignumber.js: 9.1.2 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bignumber.js: 9.3.1 bs58: 6.0.0 - decimal.js: 10.4.3 + decimal.js: 10.6.0 numeral: 2.0.6 superstruct: 1.0.4 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@noble/curves@1.6.0: - resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} - engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.9.4': dependencies: - '@noble/hashes': 1.5.0 + '@noble/hashes': 1.8.0 - /@noble/ed25519@1.7.3: - resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} - dev: false + '@noble/ed25519@1.7.5': {} - /@noble/hashes@1.5.0: - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} - engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.8.0': {} - /@prettier/sync@0.5.2(prettier@3.3.3): - resolution: {integrity: sha512-Yb569su456XNx5BsH/Vyem7xD6g/y9iLmLUzRKM1a/dhU/D7HqqvkAG72znulXlMXztbV0iiu9O5AL8K98TzZQ==} - peerDependencies: - prettier: '*' + '@prettier/sync@0.5.5(prettier@3.6.2)': dependencies: - make-synchronized: 0.2.9 - prettier: 3.3.3 - dev: false + make-synchronized: 0.4.2 + prettier: 3.6.2 - /@protobufjs/aspromise@1.1.2: - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + '@protobufjs/aspromise@1.1.2': {} - /@protobufjs/base64@1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + '@protobufjs/base64@1.1.2': {} - /@protobufjs/codegen@2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + '@protobufjs/codegen@2.0.4': {} - /@protobufjs/eventemitter@1.1.0: - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + '@protobufjs/eventemitter@1.1.0': {} - /@protobufjs/fetch@1.1.0: - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + '@protobufjs/fetch@1.1.0': dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 - /@protobufjs/float@1.0.2: - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + '@protobufjs/float@1.0.2': {} - /@protobufjs/inquire@1.1.0: - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + '@protobufjs/inquire@1.1.0': {} - /@protobufjs/path@1.1.2: - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + '@protobufjs/path@1.1.2': {} - /@protobufjs/pool@1.1.0: - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + '@protobufjs/pool@1.1.0': {} - /@protobufjs/utf8@1.1.0: - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@protobufjs/utf8@1.1.0': {} - /@pythnetwork/price-service-sdk@1.8.0: - resolution: {integrity: sha512-tFZ1thj3Zja06DzPIX2dEWSi7kIfIyqreoywvw5NQ3Z1pl5OJHQGMEhxt6Li3UCGSp2ooYZS9wl8/8XfrfrNSA==} + '@pythnetwork/price-service-sdk@1.8.0': dependencies: - bn.js: 5.2.1 - dev: false + bn.js: 5.2.2 - /@pythnetwork/pyth-solana-receiver@0.8.2: - resolution: {integrity: sha512-WrrdwwhSYvvB5vJEL+SfPnfuxgkRKMeKdZvGFFwe6ENrMhrQCM05oDkvNNYfXATLcpQGRAyBu9l1xIxUxixpqw==} + '@pythnetwork/pyth-solana-receiver@0.8.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/anchor': 0.29.0 - '@noble/hashes': 1.5.0 + '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@noble/hashes': 1.8.0 '@pythnetwork/price-service-sdk': 1.8.0 - '@pythnetwork/solana-utils': 0.4.2 - '@solana/web3.js': 1.95.4 + '@pythnetwork/solana-utils': 0.4.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@pythnetwork/solana-utils@0.4.2: - resolution: {integrity: sha512-hKo7Bcs/kDWA5Fnqhg9zJSB94NMoUDIDjHjSi/uvZOzwizISUQI6oY3LWd2CXzNh4f8djjY2BS5iNHaM4cm8Bw==} + '@pythnetwork/solana-utils@0.4.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@coral-xyz/anchor': 0.29.0 - '@solana/web3.js': 1.95.4 + '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) bs58: 5.0.0 - jito-ts: 3.0.1 + jito-ts: 3.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - /@solana/buffer-layout-utils@0.2.0: - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) bigint-buffer: 1.1.5 - bignumber.js: 9.1.2 + bignumber.js: 9.3.1 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} + '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 - /@solana/codecs-core@2.0.0-preview.1: - resolution: {integrity: sha512-0y3kgFSJAOApNGefEOgLRMiXOHVmcF29Xw3zmR4LDUABvytG3ecKMXGz5oLt3vdaU2CyN3tuUVeGmQjrd0U1kw==} + '@solana/codecs-core@2.0.0-preview.1': dependencies: '@solana/errors': 2.0.0-preview.1 - dev: false - - /@solana/codecs-core@2.0.0-preview.4(typescript@4.9.5): - resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) - typescript: 4.9.5 - dev: true - /@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5)': dependencies: '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.9.5): - resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.3.0(typescript@4.9.5)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) + '@solana/errors': 2.3.0(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-numbers@2.0.0-preview.1: - resolution: {integrity: sha512-NFA8itgcYUY3hkWMBpVRozd2poy1zfOvkIWZKx/D69oIMUtQTBpKrodRVBuhlBkAv12vDNkFljqVySpcMZMl7A==} + '@solana/codecs-numbers@2.0.0-preview.1': dependencies: '@solana/codecs-core': 2.0.0-preview.1 '@solana/errors': 2.0.0-preview.1 - dev: false - /@solana/codecs-numbers@2.0.0-preview.4(typescript@4.9.5): - resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) + '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) + '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-numbers@2.3.0(typescript@4.9.5)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) + '@solana/codecs-core': 2.3.0(typescript@4.9.5) + '@solana/errors': 2.3.0(typescript@4.9.5) typescript: 4.9.5 - dev: true - /@solana/codecs-strings@2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-kBAxE9ZD5/c8j9CkPxqc55dbo7R50Re3k94SXR+k13DZCCs37Fyn0/mAkw/S95fofbi/zsi4jSfmsT5vCZD75A==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 + '@solana/codecs-strings@2.0.0-preview.1(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs-core': 2.0.0-preview.1 '@solana/codecs-numbers': 2.0.0-preview.1 '@solana/errors': 2.0.0-preview.1 fastestsmallesttextencoderdecoder: 1.0.22 - dev: false - - /@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.9.5 - dev: true - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) fastestsmallesttextencoderdecoder: 1.0.22 typescript: 4.9.5 - dev: true - /@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} - peerDependencies: - typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) @@ -640,57 +1417,25 @@ packages: typescript: 4.9.5 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: true - - /@solana/errors@2.0.0-preview.1: - resolution: {integrity: sha512-mnBWfLVwMH4hxwb4sWZ7G7djQCMsyymjysvUPDiF89LueTBm1hfdxUv8Cy1uUCGsJ3jO3scdPwB4noOgr0rG/g==} - hasBin: true - dependencies: - chalk: 5.3.0 - commander: 12.1.0 - dev: false - /@solana/errors@2.0.0-preview.4(typescript@4.9.5): - resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/errors@2.0.0-preview.1': dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 - typescript: 4.9.5 - dev: true - /@solana/errors@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/errors@2.0.0-rc.1(typescript@4.9.5)': dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 typescript: 4.9.5 - dev: true - /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} - peerDependencies: - typescript: '>=5' + '@solana/errors@2.3.0(typescript@4.9.5)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/errors': 2.0.0-preview.4(typescript@4.9.5) + chalk: 5.4.1 + commander: 14.0.0 typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: true - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) @@ -700,95 +1445,43 @@ packages: typescript: 4.9.5 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: true - - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 - dependencies: - '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: true - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.3 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - dev: true - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - dev: true - /@solana/spl-token@0.1.8: - resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} - engines: {node: '>= 10'} + '@solana/spl-token@0.1.8(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@solana/web3.js': 1.95.4 - bn.js: 5.2.1 + '@babel/runtime': 7.27.6 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.2 buffer: 6.0.3 buffer-layout: 1.2.2 dotenv: 10.0.0 transitivePeerDependencies: - bufferutil - encoding - - utf-8-validate - dev: false - - /@solana/spl-token@0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.3 - buffer: 6.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - dev: true - /@solana/spl-token@0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 + '@solana/spl-token@0.3.11(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -796,19 +1489,14 @@ packages: - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - dev: true - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 + '@solana/spl-token@0.4.13(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -816,300 +1504,193 @@ packages: - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - dev: true - /@solana/spl-type-length-value@0.1.0: - resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} - engines: {node: '>=16'} - dependencies: - buffer: 6.0.3 - dev: true - - /@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.95.4): - resolution: {integrity: sha512-f3kwHF/2Lx3YgcO37B45MM46YLFy4QkdLemZ+N/0SwLAnSfhq3+Vb9bC5vuoupMJ/onos09TIDeIxRdg/+51kw==} - engines: {node: '>=20'} - peerDependencies: - '@solana/web3.js': ^1.77.3 + '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))': dependencies: '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.95.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 - eventemitter3: 4.0.7 - dev: false + eventemitter3: 5.0.1 - /@solana/wallet-standard-features@1.3.0: - resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} - engines: {node: '>=16'} + '@solana/wallet-standard-features@1.3.0': dependencies: '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 - dev: false - /@solana/web3.js@1.77.4: - resolution: {integrity: sha512-XdN0Lh4jdY7J8FYMyucxCwzn6Ga2Sr1DHDWRbqVzk7ZPmmpSPOVWHzO67X1cVT+jNi1D6gZi2tgjHgDPuj6e9Q==} + '@solana/web3.js@1.77.4(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 + agentkeepalive: 4.6.0 bigint-buffer: 1.1.5 - bn.js: 5.2.1 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 7.11.0 + rpc-websockets: 7.11.2 superstruct: 0.14.2 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - dev: false - - /@solana/web3.js@1.95.3: - resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==} - dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@solana/web3.js@1.95.4: - resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==} - dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - /@solana/web3.js@1.95.8: - resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + '@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 + agentkeepalive: 4.6.0 bigint-buffer: 1.1.5 - bn.js: 5.2.1 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 9.0.4 + rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - dev: true - /@solana/web3.js@1.98.0: - resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 + '@solana/codecs-numbers': 2.3.0(typescript@4.9.5) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 9.0.4 + rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} + '@solworks/soltoolkit-sdk@0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 - '@types/bn.js': 5.1.6 - '@types/node': 18.19.67 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@types/bn.js': 5.2.0 + '@types/node': 18.19.119 '@types/node-fetch': 2.6.12 - bn.js: 5.2.1 - decimal.js: 10.4.3 + bn.js: 5.2.2 + decimal.js: 10.6.0 typescript: 4.9.5 transitivePeerDependencies: - bufferutil - encoding - fastestsmallesttextencoderdecoder - utf-8-validate - dev: true - /@soncodi/signal@2.0.7: - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - dev: true - - /@sqds/multisig@2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-WOiL7La+RSiJsz7jVO85yhSiiSvNMUthiWuLPeWVOoD6IYa34BEAzanF1RdXRWGglSbRFYCTkyr+Ay1WmXmSRQ==} - engines: {node: '>=14'} - dependencies: - '@metaplex-foundation/beet': 0.7.1 - '@metaplex-foundation/beet-solana': 0.4.0 - '@metaplex-foundation/cusper': 0.0.2 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.3)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.3 - '@types/bn.js': 5.1.6 - assert: 2.1.0 - bn.js: 5.2.1 - buffer: 6.0.3 - invariant: 2.2.4 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - supports-color - - typescript - - utf-8-validate - dev: true + '@soncodi/signal@2.0.7': {} - /@swc/helpers@0.5.13: - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@swc/helpers@0.5.17': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 - /@switchboard-xyz/common@2.5.5: - resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} - engines: {node: '>=12'} + '@switchboard-xyz/common@2.5.19(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.95.8 - axios: 1.7.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 5.0.0 - cron-validator: 1.3.1 - decimal.js: 10.4.3 - js-sha256: 0.11.0 + bn.js: 5.2.2 + bs58: 6.0.0 + cron-validator: 1.4.0 + decimal.js: 10.6.0 + js-sha256: 0.11.1 lodash: 4.17.21 - protobufjs: 7.4.0 - yaml: 2.6.1 + protobufjs: 7.5.3 + yaml: 2.8.0 transitivePeerDependencies: - bufferutil - debug - encoding - utf-8-validate - dev: true - /@switchboard-xyz/common@3.0.12: - resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} - engines: {node: '>=20'} + '@switchboard-xyz/common@3.0.12(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 6.0.0 buffer: 6.0.3 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - protobufjs: 7.4.0 - yaml: 2.6.1 + decimal.js: 10.6.0 + js-sha256: 0.11.1 + protobufjs: 7.5.3 + yaml: 2.8.0 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: true - /@switchboard-xyz/common@3.0.13: - resolution: {integrity: sha512-I+18pvqh6Oajz9bYvAJ/swz+XUqRbz7i3dgz/BzasDyxpI4pzIsG4qsnVfIpAnTGsgzhq61Q6W721SnnyFdKuw==} - engines: {node: '>=20'} + '@switchboard-xyz/common@3.4.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 6.0.0 buffer: 6.0.3 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - protobufjs: 7.4.0 - yaml: 2.6.1 + decimal.js: 10.6.0 + js-sha256: 0.11.1 + protobufjs: 7.5.3 + yaml: 2.8.0 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} - engines: {node: '>= 18'} + '@switchboard-xyz/on-demand@1.2.51(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': dependencies: '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@solana/web3.js': 1.95.8 - '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) - '@switchboard-xyz/common': 2.5.5 - axios: 1.7.8 + '@coral-xyz/anchor-30': '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)' + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solworks/soltoolkit-sdk': 0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': 2.5.19(bufferutil@4.0.9)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 bs58: 5.0.0 js-yaml: 4.1.0 - protobufjs: 7.4.0 + protobufjs: 7.5.3 transitivePeerDependencies: - bufferutil - debug - encoding - fastestsmallesttextencoderdecoder - utf-8-validate - dev: true - /@switchboard-xyz/on-demand@1.2.67: - resolution: {integrity: sha512-rtGA+9tQHb/xQnUFgVzyaOs2uKgnwP7OqYQLEOjTDdNTEEgU8OTR72ujluOEYB9LMByb7h9SRuOR353vxYQhYA==} - engines: {node: '>= 18'} - deprecated: deprecated in favor of 2.x.x + '@switchboard-xyz/on-demand@1.2.67(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': dependencies: '@common.js/quick-lru': 7.0.0 - '@coral-xyz/anchor': 0.30.1 - '@switchboard-xyz/common': 3.0.13 - axios: 1.7.8 + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': 3.4.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + axios: 1.10.0 bs58: 6.0.0 buffer: 6.0.3 js-yaml: 4.1.0 @@ -1117,754 +1698,443 @@ packages: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@types/bn.js@5.1.6: - resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + '@types/bn.js@5.2.0': dependencies: - '@types/node': 20.16.11 - dev: true + '@types/node': 18.19.119 - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: - '@types/node': 20.16.11 + '@types/node': 12.20.55 - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.12': dependencies: - '@types/node': 20.16.11 - form-data: 4.0.1 - dev: true + '@types/node': 18.19.119 + form-data: 4.0.4 - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@12.20.55': {} - /@types/node@18.19.67: - resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} + '@types/node@18.19.119': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@20.16.11: - resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + '@types/node@24.0.14': dependencies: - undici-types: 6.19.8 + undici-types: 7.8.0 - /@types/uuid@8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + '@types/uuid@8.3.4': {} - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@7.4.7': dependencies: - '@types/node': 20.16.11 + '@types/node': 12.20.55 - /@types/ws@8.5.12: - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.18.1': dependencies: - '@types/node': 20.16.11 + '@types/node': 24.0.14 - /@wallet-standard/base@1.1.0: - resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} - engines: {node: '>=16'} - dev: false + '@wallet-standard/base@1.1.0': {} - /@wallet-standard/features@1.1.0: - resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} - engines: {node: '>=16'} + '@wallet-standard/features@1.1.0': dependencies: '@wallet-standard/base': 1.1.0 - dev: false - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 + '@zod/core@0.11.6': {} - /a-sync-waterfall@1.0.1: - resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} - dev: false + a-sync-waterfall@1.0.1: {} - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: false + ansi-regex@5.0.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: false - /ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - dev: true + argparse@2.0.1: {} - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false - - /assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - dependencies: - call-bind: 1.0.7 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.5 - util: 0.12.5 - dev: true - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: true + asap@2.0.6: {} - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug + asynckit@0.4.0: {} - /axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + axios@1.10.0: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.1 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - /base-x@3.0.10: - resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + base-x@3.0.11: dependencies: safe-buffer: 5.2.1 - /base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + base-x@4.0.1: {} - /base-x@5.0.1: - resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + base-x@5.0.1: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + base64-js@1.5.1: {} - /big.js@6.2.2: - resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + big.js@6.2.2: {} - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true + bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + bignumber.js@9.3.1: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + bn.js@5.2.2: {} - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + borsh@0.7.0: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - /borsh@2.0.0: - resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==} - dev: false + borsh@2.0.0: {} - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@4.0.1: dependencies: - base-x: 3.0.10 + base-x: 3.0.11 - /bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + bs58@5.0.0: dependencies: - base-x: 4.0.0 + base-x: 4.0.1 - /bs58@6.0.0: - resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + bs58@6.0.0: dependencies: base-x: 5.0.1 - /buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} + buffer-layout@1.2.2: {} - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true + bufferutil@4.0.9: dependencies: - node-gyp-build: 4.8.2 + node-gyp-build: 4.8.4 + optional: true - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind-apply-helpers@1.0.2: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + camelcase@6.3.0: {} + + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: false - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.4.1: {} - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: false - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: false - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + color-name@1.1.4: {} + + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} + commander@12.1.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@14.0.0: {} - /commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: false + commander@2.20.3: {} + + commander@5.1.0: {} + + cron-validator@1.4.0: {} - /cron-validator@1.3.1: - resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} - dev: true + cross-env@10.0.0: + dependencies: + '@epic-web/invariant': 1.0.0 + cross-spawn: 7.0.6 - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - /cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + cross-fetch@4.1.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - /crypto-hash@3.1.0: - resolution: {integrity: sha512-HR8JlZ+Dn54Lc5gGWZJxJitWbOCUzWb9/AlyONGecBnYZ+n/ONvt0gQnEzDNpJMYeRrYO7KogQ4qwyTPKnWKEw==} - engines: {node: '>=18'} - dev: false + crypto-hash@1.3.0: {} - /debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true + crypto-hash@3.1.0: {} - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + decimal.js@10.6.0: {} - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + delay@5.0.0: {} + + delayed-stream@1.0.0: {} + + dot-case@3.0.4: dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true + no-case: 3.0.4 + tslib: 2.8.1 - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} + dotenv@10.0.0: {} - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + dotenv@16.6.1: {} - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dunder-proto@1.0.1: dependencies: - no-case: 3.0.4 - tslib: 2.7.0 + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - /dotenv@10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: false + emoji-regex@8.0.0: {} - /dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} + es-define-property@1.0.1: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false + es-errors@1.3.0: {} - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: dependencies: - get-intrinsic: 1.2.4 + es-errors: 1.3.0 - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + es6-promise@4.2.8: {} - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: false - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + escalade@3.2.0: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + eventemitter3@4.0.7: {} - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} + eventemitter3@5.0.1: {} - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + eyes@0.1.8: {} - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fast-stable-stringify@1.0.0: {} - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fastestsmallesttextencoderdecoder@1.0.22: {} - /follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true + file-uri-to-path@1.0.0: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true + follow-redirects@1.15.9: {} - /form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-bind@1.1.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: false + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.1.0 - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + get-proto@1.0.1: dependencies: - get-intrinsic: 1.2.4 + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: false + gopd@1.2.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - dependencies: - es-define-property: 1.0.0 + has-flag@4.0.0: {} - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + has-symbols@1.1.0: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 - dev: true + has-symbols: 1.1.0 - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - dependencies: - loose-envify: 1.4.0 - dev: true - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true + ieee754@1.2.1: {} - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.15 - dev: true + isarray@2.0.5: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: false + isexe@2.0.0: {} - /isomorphic-ws@4.0.1(ws@7.5.10): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /jayson@4.1.2: - resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} - engines: {node: '>=8'} - hasBin: true + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/connect': 3.4.38 '@types/node': 12.20.55 '@types/ws': 7.4.7 - JSONStream: 1.3.5 commander: 2.20.3 delay: 5.0.0 es6-promisify: 5.0.0 eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10) + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) json-stringify-safe: 5.0.1 + stream-json: 1.9.1 uuid: 8.3.2 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - /jito-ts@3.0.1: - resolution: {integrity: sha512-TSofF7KqcwyaWGjPaSYC8RDoNBY1TPRNBHdrw24bdIi7mQ5bFEDdYK3D//llw/ml8YDvcZlgd644WxhjLTS9yg==} + jito-ts@3.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: - '@grpc/grpc-js': 1.13.2 - '@noble/ed25519': 1.7.3 - '@solana/web3.js': 1.77.4 - agentkeepalive: 4.5.0 - dotenv: 16.4.7 - jayson: 4.1.2 + '@grpc/grpc-js': 1.13.4 + '@noble/ed25519': 1.7.5 + '@solana/web3.js': 1.77.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + agentkeepalive: 4.6.0 + dotenv: 16.6.1 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 superstruct: 1.0.4 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - dev: false - - /js-sha256@0.11.0: - resolution: {integrity: sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q==} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-sha256@0.11.1: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - /json-stable-stringify@1.1.1: - resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} - engines: {node: '>= 0.4'} + json-stable-stringify@1.3.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 isarray: 2.0.5 jsonify: 0.0.1 object-keys: 1.1.1 - dev: false - - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - /jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - dev: false + json-stringify-safe@5.0.1: {} - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} + jsonify@0.0.1: {} - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: false + lodash.camelcase@4.3.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + long@5.3.2: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + lower-case@2.0.2: dependencies: - js-tokens: 4.0.0 - dev: true + tslib: 2.8.1 - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.7.0 + make-synchronized@0.4.2: {} - /make-synchronized@0.2.9: - resolution: {integrity: sha512-4wczOs8SLuEdpEvp3vGo83wh8rjJ78UsIk7DIX5fxdfmfMJGog4bQzxfvOwq7Q3yCHLC4jp1urPHIxRS/A93gA==} - dev: false + math-intrinsics@1.1.0: {} - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.3: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.7.0 + tslib: 2.8.1 - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - /node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} - hasBin: true - requiresBuild: true + node-gyp-build@4.8.4: + optional: true - /numeral@2.0.6: - resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} - dev: false + numeral@2.0.6: {} - /nunjucks@3.2.4: - resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} - engines: {node: '>= 6.9.0'} - hasBin: true - peerDependencies: - chokidar: ^3.3.0 - peerDependenciesMeta: - chokidar: - optional: true + nunjucks@3.2.4: dependencies: a-sync-waterfall: 1.0.1 asap: 2.0.6 commander: 5.1.0 - dev: false - - /object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true + object-keys@1.1.1: {} - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + pako@2.1.0: {} - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + path-key@3.1.1: {} - /prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - dev: false + prettier@3.6.2: {} - /protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - requiresBuild: true + protobufjs@7.5.3: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -1876,227 +2146,149 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.16.11 - long: 5.2.3 + '@types/node': 24.0.14 + long: 5.3.2 - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@1.1.0: {} - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + require-directory@2.1.1: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: false + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - /rpc-websockets@7.11.0: - resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} - deprecated: deprecate 7.11.0 + rpc-websockets@7.11.2: dependencies: eventemitter3: 4.0.7 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.8 + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - /rpc-websockets@9.0.4: - resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==} + rpc-websockets@9.1.1: dependencies: - '@swc/helpers': 0.5.13 + '@swc/helpers': 0.5.17 '@types/uuid': 8.3.4 - '@types/ws': 8.5.12 + '@types/ws': 8.18.1 buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.8 + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: false - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: false - /superstruct@0.14.2: - resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} - dev: false + superstruct@0.14.2: {} - /superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + superstruct@0.15.5: {} - /superstruct@1.0.4: - resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} - engines: {node: '>=14.0.0'} - dev: false + superstruct@1.0.4: {} - /superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} + superstruct@2.0.2: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: false - - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + text-encoding-utf-8@1.0.2: {} - /toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + toml@3.0.0: {} - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tr46@0.0.3: {} - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + tslib@2.8.1: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + typescript@4.9.5: {} - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@5.26.5: {} - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.2 + undici-types@7.8.0: {} - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utf-8-validate@5.0.10: dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 - dev: true + node-gyp-build: 4.8.4 + optional: true - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true + uuid@8.3.2: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@3.0.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + which@2.0.2: dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true + isexe: 2.0.0 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - bufferutil: 4.0.8 + ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: false + y18n@5.0.8: {} - /yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true + yaml@2.8.0: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: false + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -2105,35 +2297,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: false - file:solauto-sdk(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {directory: solauto-sdk, type: directory} - id: file:solauto-sdk - name: '@haven-fi/solauto-sdk' + zod@4.0.0-beta.20250505T195954: dependencies: - '@coral-xyz/anchor': 0.30.1 - '@jup-ag/api': 6.0.24 - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-bundle-defaults': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-signer-wallet-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/spl-token': 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.95.8 - '@sqds/multisig': 2.1.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@switchboard-xyz/common': 3.0.12 - '@switchboard-xyz/on-demand': 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) - '@types/node': 20.16.11 - axios: 1.7.8 - bs58: 5.0.0 - cross-fetch: 4.0.0 - dotenv: 16.4.7 - rpc-websockets: 7.11.0 - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - dev: true + '@zod/core': 0.11.6 diff --git a/programs/marginfi-sdk/Cargo.toml b/programs/marginfi-sdk/Cargo.toml index b4eb34c2..02b0bc4e 100644 --- a/programs/marginfi-sdk/Cargo.toml +++ b/programs/marginfi-sdk/Cargo.toml @@ -3,6 +3,11 @@ name = "marginfi-sdk" version = "0.1.0" edition = "2021" +[features] +default = [] +test = [] +staging = [] + [dependencies] solana-program = ">=1.16" borsh = "^0.10" diff --git a/programs/marginfi-sdk/src/generated/instructions/lending_account_withdraw.rs b/programs/marginfi-sdk/src/generated/instructions/lending_account_withdraw.rs index 5ee5c446..040c74ea 100644 --- a/programs/marginfi-sdk/src/generated/instructions/lending_account_withdraw.rs +++ b/programs/marginfi-sdk/src/generated/instructions/lending_account_withdraw.rs @@ -41,7 +41,7 @@ impl LendingAccountWithdraw { remaining_accounts: &[solana_program::instruction::AccountMeta], ) -> solana_program::instruction::Instruction { let mut accounts = Vec::with_capacity(8 + remaining_accounts.len()); - accounts.push(solana_program::instruction::AccountMeta::new_readonly( + accounts.push(solana_program::instruction::AccountMeta::new( self.marginfi_group, false, )); @@ -111,7 +111,7 @@ pub struct LendingAccountWithdrawInstructionArgs { /// /// ### Accounts: /// -/// 0. `[]` marginfi_group +/// 0. `[writable]` marginfi_group /// 1. `[writable]` marginfi_account /// 2. `[signer]` signer /// 3. `[writable]` bank @@ -345,7 +345,7 @@ impl<'a, 'b> LendingAccountWithdrawCpi<'a, 'b> { )], ) -> solana_program::entrypoint::ProgramResult { let mut accounts = Vec::with_capacity(8 + remaining_accounts.len()); - accounts.push(solana_program::instruction::AccountMeta::new_readonly( + accounts.push(solana_program::instruction::AccountMeta::new( *self.marginfi_group.key, false, )); @@ -421,7 +421,7 @@ impl<'a, 'b> LendingAccountWithdrawCpi<'a, 'b> { /// /// ### Accounts: /// -/// 0. `[]` marginfi_group +/// 0. `[writable]` marginfi_group /// 1. `[writable]` marginfi_account /// 2. `[signer]` signer /// 3. `[writable]` bank diff --git a/programs/marginfi-sdk/src/generated/programs.rs b/programs/marginfi-sdk/src/generated/programs.rs index bd4b2e1e..fa7763f8 100644 --- a/programs/marginfi-sdk/src/generated/programs.rs +++ b/programs/marginfi-sdk/src/generated/programs.rs @@ -5,7 +5,10 @@ //! [https://github.com/metaplex-foundation/kinobi] //! -use solana_program::{pubkey, pubkey::Pubkey}; +use solana_program::{ pubkey, pubkey::Pubkey }; -/// `marginfi` program ID. +#[cfg(feature = "staging")] +pub const MARGINFI_ID: Pubkey = pubkey!("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct"); + +#[cfg(not(feature = "staging"))] pub const MARGINFI_ID: Pubkey = pubkey!("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"); diff --git a/programs/solauto/Cargo.toml b/programs/solauto/Cargo.toml index bdb23caa..c2ea350e 100644 --- a/programs/solauto/Cargo.toml +++ b/programs/solauto/Cargo.toml @@ -14,8 +14,8 @@ no-idl = [] no-log-ix-name = [] cpi = ["no-entrypoint"] default = [] -test = [] -local = [] +test = ["marginfi-sdk/test"] +staging = ["marginfi-sdk/staging"] [net] git-fetch-with-cli = true diff --git a/programs/solauto/src/clients/marginfi.rs b/programs/solauto/src/clients/marginfi.rs index 18c24126..e676253a 100644 --- a/programs/solauto/src/clients/marginfi.rs +++ b/programs/solauto/src/clients/marginfi.rs @@ -1,20 +1,22 @@ use borsh::BorshDeserialize; use fixed::types::I80F48; use marginfi_sdk::generated::{ - accounts::{Bank, MarginfiAccount}, + accounts::{ Bank, MarginfiAccount }, instructions::*, - types::{Balance, OracleSetup}, + types::{ Balance, OracleSetup }, }; use pyth_sdk_solana::state::SolanaPriceAccount; -use pyth_solana_receiver_sdk::price_update::{PriceUpdateV2, VerificationLevel}; +use pyth_solana_receiver_sdk::price_update::PriceUpdateV2; use solana_program::{ - account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, - program_error::ProgramError, pubkey::Pubkey, sysvar::Sysvar, -}; -use std::{ - cmp::min, - ops::{Div, Mul, Sub}, + account_info::AccountInfo, + clock::Clock, + entrypoint::ProgramResult, + msg, + program_error::ProgramError, + pubkey::Pubkey, + sysvar::Sysvar, }; +use std::{ cmp::min, ops::{ Div, Mul, Sub } }; use switchboard_on_demand::PullFeedAccountData; use switchboard_v2::AggregatorAccountData; @@ -23,16 +25,21 @@ use crate::{ types::{ errors::SolautoError, instruction::{ - accounts::{Context, MarginfiOpenPositionAccounts}, + accounts::{ Context, MarginfiOpenPositionAccounts }, SolautoStandardAccounts, }, - lending_protocol::{LendingProtocolClient, LendingProtocolTokenAccounts}, + lending_protocol::{ LendingProtocolClient, LendingProtocolTokenAccounts }, shared::{ - DeserializedAccount, PriceType, RefreshStateProps, RefreshedTokenState, - TokenBalanceAmount, TokenType, + AccountMetaFlags, + DeserializedAccount, + PriceType, + RefreshStateProps, + RefreshedTokenState, + TokenBalanceAmount, + TokenType, }, }, - utils::{math_utils::*, solana_utils::*, solauto_utils::*, validation_utils::*}, + utils::{ math_utils::*, solana_utils::*, solauto_utils::*, validation_utils::* }, }; const CONF_INTERVAL_MULTIPLE: f64 = 2.12; @@ -57,7 +64,7 @@ pub struct MarginfiClient<'a> { impl<'a> MarginfiClient<'a> { pub fn initialize<'c>( ctx: &'c Context<'a, MarginfiOpenPositionAccounts<'a>>, - solauto_position: &'c DeserializedAccount<'a, SolautoPosition>, + solauto_position: &'c DeserializedAccount<'a, SolautoPosition> ) -> ProgramResult { if account_has_data(ctx.accounts.marginfi_account) { return Ok(()); @@ -72,22 +79,26 @@ impl<'a> MarginfiClient<'a> { authority: marginfi_account_owner, fee_payer: ctx.accounts.signer, system_program: ctx.accounts.system_program, - }, + } ); if marginfi_account_owner.key == solauto_position.account_info.key { let mut marginfi_account_seeds = vec![ solauto_position.account_info.key.as_ref(), - ctx.accounts.marginfi_group.key.as_ref(), + ctx.accounts.marginfi_group.key.as_ref() ]; - let (_, bump) = - Pubkey::find_program_address(marginfi_account_seeds.as_slice(), &crate::ID); + let (_, bump) = Pubkey::find_program_address( + marginfi_account_seeds.as_slice(), + &crate::ID + ); let binding = [bump]; marginfi_account_seeds.push(&binding); - cpi.invoke_signed(&[ - solauto_position.data.seeds_with_bump().as_slice(), - marginfi_account_seeds.as_slice(), - ]) + cpi.invoke_signed( + &[ + solauto_position.data.seeds_with_bump().as_slice(), + marginfi_account_seeds.as_slice(), + ] + ) } else { cpi.invoke() } @@ -105,7 +116,7 @@ impl<'a> MarginfiClient<'a> { debt_bank: &'a AccountInfo<'a>, debt_price_oracle: Option<&'a AccountInfo<'a>>, debt_tas: LendingProtocolTokenAccounts<'a>, - debt_vault_authority: Option<&'a AccountInfo<'a>>, + debt_vault_authority: Option<&'a AccountInfo<'a>> ) -> Result { let supply = MarginfiBankAccounts { bank: DeserializedAccount::::zerocopy(Some(supply_bank))?.unwrap(), @@ -134,7 +145,7 @@ impl<'a> MarginfiClient<'a> { fn get_account_balance( account_balances: &[Balance], bank: &DeserializedAccount, - is_supply: bool, + is_supply: bool ) -> Option { account_balances.iter().find_map(|balance| { if &balance.bank_pk == bank.account_info.key { @@ -152,24 +163,22 @@ impl<'a> MarginfiClient<'a> { pub fn get_max_ltv_and_liq_threshold( supply_bank: &'a AccountInfo<'a>, - debt_bank: &'a AccountInfo<'a>, + debt_bank: &'a AccountInfo<'a> ) -> Result<(f64, f64), ProgramError> { let supply_bank = DeserializedAccount::::zerocopy(Some(supply_bank))?.unwrap(); let debt_bank = DeserializedAccount::::zerocopy(Some(debt_bank))?.unwrap(); - let max_ltv = i80f48_to_f64(I80F48::from_le_bytes( - supply_bank.data.config.asset_weight_init.value, - )) - .div(i80f48_to_f64(I80F48::from_le_bytes( - debt_bank.data.config.liability_weight_init.value, - ))); + let max_ltv = i80f48_to_f64( + I80F48::from_le_bytes(supply_bank.data.config.asset_weight_init.value) + ).div( + i80f48_to_f64(I80F48::from_le_bytes(debt_bank.data.config.liability_weight_init.value)) + ); - let liq_threshold = i80f48_to_f64(I80F48::from_le_bytes( - supply_bank.data.config.asset_weight_maint.value, - )) - .div(i80f48_to_f64(I80F48::from_le_bytes( - debt_bank.data.config.liability_weight_maint.value, - ))); + let liq_threshold = i80f48_to_f64( + I80F48::from_le_bytes(supply_bank.data.config.asset_weight_maint.value) + ).div( + i80f48_to_f64(I80F48::from_le_bytes(debt_bank.data.config.liability_weight_maint.value)) + ); Ok((max_ltv, liq_threshold)) } @@ -179,14 +188,18 @@ impl<'a> MarginfiClient<'a> { supply_bank: &'a AccountInfo<'a>, price_oracle: &'a AccountInfo<'a>, price_type: PriceType, - mut max_ltv: f64, + mut max_ltv: f64 ) -> Result<(RefreshedTokenState, f64), ProgramError> { let bank = DeserializedAccount::::zerocopy(Some(supply_bank))?.unwrap(); let asset_share_value = I80F48::from_le_bytes(bank.data.asset_share_value.value); - let market_price = - MarginfiClient::load_price(&bank, price_oracle, price_type, TokenType::Supply)?; + let market_price = MarginfiClient::load_price( + &bank, + price_oracle, + price_type, + TokenType::Supply + )?; let supply_shares = MarginfiClient::get_account_balance(account_balances, &bank, true); let base_unit_account_deposits = if supply_shares.is_some() { @@ -195,19 +208,24 @@ impl<'a> MarginfiClient<'a> { 0 }; - let total_deposited = - I80F48::from_le_bytes(bank.data.total_asset_shares.value).mul(asset_share_value); - let base_unit_deposit_room_available = - I80F48::from(bank.data.config.deposit_limit).sub(total_deposited); + let total_deposited = I80F48::from_le_bytes(bank.data.total_asset_shares.value).mul( + asset_share_value + ); + let base_unit_deposit_room_available = I80F48::from(bank.data.config.deposit_limit).sub( + total_deposited + ); - let bank_deposits_usd_value = - from_base_unit::(i80f48_to_f64(total_deposited), bank.data.mint_decimals) - .mul(market_price); - if bank.data.config.total_asset_value_init_limit != 0 - && bank_deposits_usd_value > (bank.data.config.total_asset_value_init_limit as f64) + let bank_deposits_usd_value = from_base_unit::( + i80f48_to_f64(total_deposited), + bank.data.mint_decimals + ).mul(market_price); + if + bank.data.config.total_asset_value_init_limit != 0 && + bank_deposits_usd_value > (bank.data.config.total_asset_value_init_limit as f64) { - let discount_factor = - (bank.data.config.total_asset_value_init_limit as f64).div(bank_deposits_usd_value); + let discount_factor = (bank.data.config.total_asset_value_init_limit as f64).div( + bank_deposits_usd_value + ); max_ltv = max_ltv * discount_factor; } @@ -228,14 +246,18 @@ impl<'a> MarginfiClient<'a> { account_balances: &[Balance], debt_bank: &'a AccountInfo<'a>, price_oracle: &'a AccountInfo<'a>, - price_type: PriceType, + price_type: PriceType ) -> Result { let bank = DeserializedAccount::::zerocopy(Some(debt_bank))?.unwrap(); let liability_share_value = I80F48::from_le_bytes(bank.data.liability_share_value.value); - let market_price = - MarginfiClient::load_price(&bank, price_oracle, price_type, TokenType::Debt)?; + let market_price = MarginfiClient::load_price( + &bank, + price_oracle, + price_type, + TokenType::Debt + )?; let debt_shares = MarginfiClient::get_account_balance(account_balances, &bank, false); let base_unit_account_debt = if debt_shares.is_some() { @@ -244,29 +266,26 @@ impl<'a> MarginfiClient<'a> { 0 }; - let total_deposited = I80F48::from_le_bytes(bank.data.total_asset_shares.value) - .mul(I80F48::from_le_bytes(bank.data.asset_share_value.value)); - let total_borrows = I80F48::from_le_bytes(bank.data.total_liability_shares.value) - .mul(liability_share_value); + let total_deposited = I80F48::from_le_bytes(bank.data.total_asset_shares.value).mul( + I80F48::from_le_bytes(bank.data.asset_share_value.value) + ); + let total_borrows = I80F48::from_le_bytes(bank.data.total_liability_shares.value).mul( + liability_share_value + ); let base_unit_supply_available = total_deposited.sub(total_borrows); let amount_can_be_used = min( - bank.data - .config - .borrow_limit - .saturating_sub(i80f48_to_u64(total_borrows)), - i80f48_to_u64(base_unit_supply_available), + bank.data.config.borrow_limit.saturating_sub(i80f48_to_u64(total_borrows)), + i80f48_to_u64(base_unit_supply_available) ); - let borrow_fee_bps = i80f48_to_f64(I80F48::from_le_bytes( - bank.data - .config - .interest_rate_config - .protocol_origination_fee - .value, - )) - .mul(10_000.0) - .round() as u16; + let borrow_fee_bps = i80f48_to_f64( + I80F48::from_le_bytes( + bank.data.config.interest_rate_config.protocol_origination_fee.value + ) + ) + .mul(10_000.0) + .round() as u16; Ok(RefreshedTokenState { mint: bank.data.mint, @@ -284,17 +303,19 @@ impl<'a> MarginfiClient<'a> { supply_price_oracle: &'a AccountInfo<'a>, debt_bank: &'a AccountInfo<'a>, debt_price_oracle: &'a AccountInfo<'a>, - price_type: PriceType, + price_type: PriceType ) -> Result { - let (max_ltv, liq_threshold) = - MarginfiClient::get_max_ltv_and_liq_threshold(supply_bank, debt_bank)?; + let (max_ltv, liq_threshold) = MarginfiClient::get_max_ltv_and_liq_threshold( + supply_bank, + debt_bank + )?; let account_balances = &marginfi_account.data.lending_account.balances[..2]; let debt = MarginfiClient::get_debt_token_usage( account_balances, debt_bank, debt_price_oracle, - price_type, + price_type )?; let (supply, max_ltv) = MarginfiClient::get_supply_token_usage( @@ -302,7 +323,7 @@ impl<'a> MarginfiClient<'a> { supply_bank, supply_price_oracle, price_type, - max_ltv, + max_ltv )?; Ok(RefreshStateProps { @@ -317,7 +338,7 @@ impl<'a> MarginfiClient<'a> { bank: &DeserializedAccount, price_oracle: &AccountInfo, price_type: PriceType, - token_type: TokenType, + token_type: TokenType ) -> Result { let clock = Clock::get()?; let max_price_age = 120; // Default used by Marginfi is 60 @@ -334,14 +355,10 @@ impl<'a> MarginfiClient<'a> { let price_feed = SolanaPriceAccount::account_info_to_feed(price_oracle)?; let price = if price_type == PriceType::Ema { - let price_result = price_feed - .get_price_no_older_than(clock.unix_timestamp, max_price_age) - .unwrap(); + let price_result = price_feed.get_price_unchecked(); derive_value(price_result.price, price_result.expo) } else { - let price_result = price_feed - .get_price_no_older_than(clock.unix_timestamp, max_price_age) - .unwrap(); + let price_result = price_feed.get_price_unchecked(); derive_value(price_result.price, price_result.expo) }; @@ -351,38 +368,27 @@ impl<'a> MarginfiClient<'a> { let price_feed_data = price_oracle.try_borrow_data()?; let price_feed = PriceUpdateV2::deserialize(&mut &price_feed_data.as_ref()[8..])?; - let (price, conf_interval) = if price_type == PriceType::Ema { - let ema_price = price_feed.price_message.ema_price; - let conf = price_feed.price_message.ema_conf; - let exponent = price_feed.price_message.exponent; + let (price, conf, exponent) = if price_type == PriceType::Ema { ( - derive_value(ema_price, exponent), - derive_value(conf as i64, exponent), + price_feed.price_message.ema_price, + price_feed.price_message.ema_conf, + price_feed.price_message.exponent, ) } else { - let feed_id = &bank.data.config.oracle_keys[0].to_bytes(); - let price_result = price_feed - .get_price_no_older_than_with_custom_verification_level( - &clock, - max_price_age, - feed_id, - VerificationLevel::Full, - ) - .map_err(|e| { - msg!("Pyth push oracle error: {:?}", e); - ProgramError::Custom(0) - })?; ( - derive_value(price_result.price, price_result.exponent), - derive_value(price_result.conf as i64, price_result.exponent), + price_feed.price_message.price, + price_feed.price_message.conf, + price_feed.price_message.exponent, ) }; - Ok(with_conf_interval( - price, - conf_interval.mul(CONF_INTERVAL_MULTIPLE), - token_type, - )) + Ok( + with_conf_interval( + derive_value(price, exponent), + derive_value(conf as i64, exponent).mul(CONF_INTERVAL_MULTIPLE), + token_type + ) + ) } OracleSetup::SwitchboardLegacy => { let data = price_oracle.data.borrow(); @@ -400,8 +406,9 @@ impl<'a> MarginfiClient<'a> { } OracleSetup::SwitchboardPull => { let data = price_oracle.data.borrow(); - let feed = PullFeedAccountData::parse(data) - .map_err(|_| SolautoError::IncorrectAccounts)?; + let feed = PullFeedAccountData::parse(data).map_err( + |_| SolautoError::IncorrectAccounts + )?; let price = (feed.result.value as f64) // 10^18 @@ -419,17 +426,33 @@ impl<'a> MarginfiClient<'a> { pub fn refresh_bank( program: &'a AccountInfo<'a>, marginfi_group: &'a AccountInfo<'a>, - bank: &'a AccountInfo<'a>, + bank: &'a AccountInfo<'a> ) -> ProgramResult { let cpi = LendingPoolAccrueBankInterestCpi::new( program, LendingPoolAccrueBankInterestCpiAccounts { marginfi_group, bank, - }, + } ); cpi.invoke() } + + pub fn compose_remaining_accounts(accounts: Vec) -> Vec { + let mut banks_and_oracles: Vec<(AccountMetaFlags, AccountMetaFlags)> = accounts + .chunks(2) + .filter_map(|chunk| { + if chunk.len() == 2 { Some((chunk[0], chunk[1])) } else { None } + }) + .collect(); + + banks_and_oracles.sort_by(|a, b| b.0.0.key.to_string().cmp(&a.0.0.key.to_string())); + + banks_and_oracles + .into_iter() + .flat_map(|(a, b)| vec![a, b]) + .collect() + } } impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { @@ -437,12 +460,12 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { validate_token_accounts( &std_accounts.solauto_position, self.supply.token_accounts.position_ta, - self.debt.token_accounts.position_ta, + self.debt.token_accounts.position_ta )?; validate_token_accounts( &std_accounts.solauto_position, self.supply.token_accounts.authority_ta, - self.debt.token_accounts.authority_ta, + self.debt.token_accounts.authority_ta )?; Ok(()) } @@ -450,7 +473,7 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { fn deposit<'c>( &self, base_unit_amount: u64, - std_accounts: &'c Box>, + std_accounts: &'c Box> ) -> ProgramResult { let authority = get_owner(&std_accounts.solauto_position, self.signer); @@ -474,15 +497,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { LendingAccountDepositInstructionArgs { amount: base_unit_amount, deposit_up_to_limit: Some(true), - }, + } ); if !std_accounts.solauto_position.data.self_managed.val { - cpi.invoke_signed(&[std_accounts - .solauto_position - .data - .seeds_with_bump() - .as_slice()]) + cpi.invoke_signed(&[std_accounts.solauto_position.data.seeds_with_bump().as_slice()]) } else { cpi.invoke() } @@ -492,15 +511,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { &self, amount: TokenBalanceAmount, destination: &'a AccountInfo<'a>, - std_accounts: &'c Box>, + std_accounts: &'c Box> ) -> ProgramResult { let authority = get_owner(&std_accounts.solauto_position, self.signer); - let base_unit_amount = if let TokenBalanceAmount::Some(num) = amount { - num - } else { - 0 - }; + let base_unit_amount = if let TokenBalanceAmount::Some(num) = amount { num } else { 0 }; let cpi = LendingAccountWithdrawCpi::new( self.program, @@ -517,17 +532,14 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { LendingAccountWithdrawInstructionArgs { amount: base_unit_amount, withdraw_all: Some(amount == TokenBalanceAmount::All), - }, + } ); - let marginfi_account_data = - DeserializedAccount::::zerocopy(Some(self.marginfi_account))? - .unwrap() - .data; + let marginfi_account_data = DeserializedAccount:: + ::zerocopy(Some(self.marginfi_account))? + .unwrap().data; - let active_balances = marginfi_account_data - .lending_account - .balances + let active_balances = marginfi_account_data.lending_account.balances .iter() .filter(|balance| balance.active == 1) .collect::>(); @@ -537,9 +549,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { let mut withdrawing_all = amount == TokenBalanceAmount::All; if !withdrawing_all && active_balances.len() == 1 { let asset_shares = I80F48::from_le_bytes(active_balances[0].asset_shares.value); - let supply_balance = i80f48_to_u64(asset_shares.mul(I80F48::from_le_bytes( - self.supply.bank.data.asset_share_value.value, - ))); + let supply_balance = i80f48_to_u64( + asset_shares.mul( + I80F48::from_le_bytes(self.supply.bank.data.asset_share_value.value) + ) + ); let TokenBalanceAmount::Some(withdraw_amount) = amount else { panic!("Unexpected amount type"); }; @@ -558,15 +572,13 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { if !std_accounts.solauto_position.data.self_managed.val { cpi.invoke_signed_with_remaining_accounts( - &[std_accounts - .solauto_position - .data - .seeds_with_bump() - .as_slice()], - remaining_accounts.as_slice(), + &[std_accounts.solauto_position.data.seeds_with_bump().as_slice()], + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice() ) } else { - cpi.invoke_with_remaining_accounts(remaining_accounts.as_slice()) + cpi.invoke_with_remaining_accounts( + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice() + ) } } @@ -574,7 +586,7 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { &self, base_unit_amount: u64, destination: &'a AccountInfo<'a>, - std_accounts: &'c Box>, + std_accounts: &'c Box> ) -> ProgramResult { let authority = get_owner(&std_accounts.solauto_position, self.signer); @@ -592,10 +604,12 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { }, LendingAccountBorrowInstructionArgs { amount: base_unit_amount, - }, + } ); - let mut remaining_accounts = Vec::with_capacity(4); + let mut remaining_accounts: Vec = Vec::::with_capacity( + 4 + ); remaining_accounts.push((self.supply.bank.account_info, false, false)); remaining_accounts.push((self.supply.price_oracle.unwrap(), false, false)); remaining_accounts.push((self.debt.bank.account_info, false, true)); @@ -603,30 +617,24 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { if !std_accounts.solauto_position.data.self_managed.val { cpi.invoke_signed_with_remaining_accounts( - &[std_accounts - .solauto_position - .data - .seeds_with_bump() - .as_slice()], - remaining_accounts.as_slice(), + &[std_accounts.solauto_position.data.seeds_with_bump().as_slice()], + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice() ) } else { - cpi.invoke_with_remaining_accounts(remaining_accounts.as_slice()) + cpi.invoke_with_remaining_accounts( + MarginfiClient::compose_remaining_accounts(remaining_accounts).as_slice() + ) } } fn repay<'c>( &self, amount: TokenBalanceAmount, - std_accounts: &'c Box>, + std_accounts: &'c Box> ) -> ProgramResult { let authority = get_owner(&std_accounts.solauto_position, self.signer); - let base_unit_amount = if let TokenBalanceAmount::Some(num) = amount { - num - } else { - 0 - }; + let base_unit_amount = if let TokenBalanceAmount::Some(num) = amount { num } else { 0 }; let signer_token_account = if !std_accounts.solauto_position.data.self_managed.val { self.debt.token_accounts.position_ta.as_ref().unwrap() @@ -648,15 +656,11 @@ impl<'a> LendingProtocolClient<'a> for MarginfiClient<'a> { LendingAccountRepayInstructionArgs { amount: base_unit_amount, repay_all: Some(amount == TokenBalanceAmount::All), - }, + } ); if !std_accounts.solauto_position.data.self_managed.val { - cpi.invoke_signed(&[std_accounts - .solauto_position - .data - .seeds_with_bump() - .as_slice()]) + cpi.invoke_signed(&[std_accounts.solauto_position.data.seeds_with_bump().as_slice()]) } else { cpi.invoke() } diff --git a/programs/solauto/src/constants.rs b/programs/solauto/src/constants.rs index 2e36b314..d8681b25 100644 --- a/programs/solauto/src/constants.rs +++ b/programs/solauto/src/constants.rs @@ -17,4 +17,4 @@ pub const MAX_BASIS_POINTS: u16 = 10000; pub const REFERRER_PERCENTAGE: f64 = 0.15; -pub const OFFSET_FROM_MAX_LTV: f64 = 0.005; +pub const OFFSET_FROM_MAX_LTV: f64 = 0.005; \ No newline at end of file diff --git a/programs/solauto/src/instructions/rebalance.rs b/programs/solauto/src/instructions/rebalance.rs index 0ca6fe95..ee0534ae 100644 --- a/programs/solauto/src/instructions/rebalance.rs +++ b/programs/solauto/src/instructions/rebalance.rs @@ -71,7 +71,7 @@ pub fn marginfi_rebalance<'a>( if rebalance_step == RebalanceStep::PreSwap || rebalance_type == SolautoRebalanceType::FLSwapThenRebalance { - if needs_refresh(&std_accounts.solauto_position, &args)? { + if needs_refresh(&std_accounts.solauto_position)? { refresh::marginfi_refresh_accounts( ctx.accounts.marginfi_program, ctx.accounts.marginfi_group, @@ -131,7 +131,6 @@ fn update_token_prices<'a>( fn needs_refresh( solauto_position: &DeserializedAccount, - args: &RebalanceSettings, ) -> Result { if solauto_position.data.self_managed.val { return Ok(true); @@ -144,12 +143,6 @@ fn needs_refresh( return Ok(false); } - if args.target_liq_utilization_rate_bps.is_some() - && args.target_liq_utilization_rate_bps.unwrap() == 0 - { - return Ok(true); - } - Ok(false) } @@ -169,6 +162,7 @@ fn rebalance<'a>( std_accounts.authority_referral_state.is_some(), SolautoError::IncorrectAccounts ); + #[cfg(not(feature = "test"))] check!( args.flash_loan_fee_bps.unwrap_or(0) <= 150, SolautoError::IncorrectInstructions diff --git a/programs/solauto/src/processors/position.rs b/programs/solauto/src/processors/position.rs index ffc9cba8..d7fa466a 100644 --- a/programs/solauto/src/processors/position.rs +++ b/programs/solauto/src/processors/position.rs @@ -1,18 +1,16 @@ use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, msg}; use crate::{ - check, instructions::{close_position, update_position}, state::solauto_position::SolautoPosition, types::{ - errors::SolautoError, instruction::{ - accounts::{CancelDCAAccounts, ClosePositionAccounts, UpdatePositionAccounts}, + accounts::{ClosePositionAccounts, UpdatePositionAccounts}, UpdatePositionData, }, shared::DeserializedAccount, }, - utils::{ix_utils, solauto_utils, validation_utils}, + utils::validation_utils, }; pub fn process_update_position_instruction<'a>( diff --git a/programs/solauto/src/rebalance/rebalancer.rs b/programs/solauto/src/rebalance/rebalancer.rs index b6981768..565390d5 100644 --- a/programs/solauto/src/rebalance/rebalancer.rs +++ b/programs/solauto/src/rebalance/rebalancer.rs @@ -3,11 +3,10 @@ use std::{ ops::{Add, Mul}, }; -use solana_program::{entrypoint::ProgramResult, msg, program_error::ProgramError, pubkey::Pubkey}; +use solana_program::{entrypoint::ProgramResult, program_error::ProgramError}; use crate::{ check, - constants::SOLAUTO_FEES_WALLET, state::solauto_position::{ PositionTokenState, RebalanceData, SolautoPosition, TokenBalanceChangeType, }, @@ -15,17 +14,16 @@ use crate::{ errors::SolautoError, instruction::RebalanceSettings, shared::{ - BareSplTokenTransferArgs, RebalanceDirection, RebalanceStep, SolautoRebalanceType, - SwapType, TokenBalanceAmount, + RebalanceDirection, RebalanceStep, SolautoRebalanceType, SwapType, TokenBalanceAmount, }, - solauto::{FromLendingPlatformAction, SolautoCpiAction}, - }, - utils::{ - math_utils::{calc_fee_amount, from_bps, from_rounded_usd_value, usd_value_to_base_unit}, - validation_utils::{ - correct_token_account, value_gte_with_threshold, value_lte_with_threshold, + solauto::{ + FromLendingPlatformAction, SolautoAccount, SolautoCpiAction, + SolautoSplTokenTransferArgs, }, }, + utils::math_utils::{ + calc_fee_amount, from_bps, from_rounded_usd_value, usd_value_to_base_unit, + }, }; use super::{ @@ -34,15 +32,14 @@ use super::{ }; pub struct TokenAccountData { - pub pk: Pubkey, pub balance: u64, } impl TokenAccountData { - pub fn from(pk: Pubkey, balance: u64) -> Self { - Self { pk, balance } + pub fn from(balance: u64) -> Self { + Self { balance } } - pub fn without_balance(pk: Pubkey) -> Self { - Self { pk, balance: 0 } + pub fn new() -> Self { + Self { balance: 0 } } } @@ -55,13 +52,8 @@ pub struct SolautoPositionData<'a> { pub struct RebalancerData<'a> { pub rebalance_args: RebalanceSettings, pub solauto_position: SolautoPositionData<'a>, - pub intermediary_ta: TokenAccountData, - pub authority_supply_ta: Option, - pub authority_debt_ta: Option, pub solauto_fees_bps: SolautoFeesBps, - pub solauto_fees_ta: Option, - pub referred_by_state: Option, - pub referred_by_ta: Option, + pub referred_by: bool, } pub struct RebalanceResult { @@ -151,38 +143,50 @@ impl<'a> Rebalancer<'a> { } } - fn get_dynamic_balance(&self) -> (u64, &TokenAccountData) { - let ta = if self.is_boost() { - self.position_supply_ta() + fn get_dynamic_balance(&self) -> (u64, SolautoAccount) { + let (ta, account) = if self.is_boost() { + ( + self.position_supply_ta(), + SolautoAccount::SolautoPositionSupplyTa, + ) } else { - self.position_debt_ta() + ( + self.position_debt_ta(), + SolautoAccount::SolautoPositionDebtTa, + ) }; let balance = ta.balance; // Subtract current balances that are attributed to DCA / limit order in - (balance, ta) + (balance, account) } fn transfer_to_authority_if_needed(&mut self, base_unit_amount: u64) { if self.position_data().self_managed.val { let (solauto_position_ta, authority_ta) = if self.is_boost() { - (self.position_supply_ta().pk, &self.data.authority_supply_ta) + ( + SolautoAccount::SolautoPositionSupplyTa, + SolautoAccount::AuthoritySupplyTa, + ) } else { - (self.position_debt_ta().pk, &self.data.authority_debt_ta) + ( + SolautoAccount::SolautoPositionDebtTa, + SolautoAccount::AuthorityDebtTa, + ) }; self.actions.push(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { - from_wallet: self.data.solauto_position.data.pubkey(), + SolautoSplTokenTransferArgs { + from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: solauto_position_ta, - to_wallet_ta: authority_ta.as_ref().unwrap().pk, + to_wallet_ta: authority_ta, amount: base_unit_amount, }, )); } } - fn pull_liquidity_from_lp(&mut self, base_unit_amount: u64, destination_ta: Pubkey) { + fn pull_liquidity_from_lp(&mut self, base_unit_amount: u64, destination_ta: SolautoAccount) { if self.is_boost() { self.actions .push(SolautoCpiAction::Borrow(FromLendingPlatformAction { @@ -257,11 +261,11 @@ impl<'a> Rebalancer<'a> { Some(self.data.solauto_position.debt_ta.balance), ); Some(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { + SolautoSplTokenTransferArgs { amount, - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: self.position_debt_ta().pk, - to_wallet_ta: self.data.intermediary_ta.pk, + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: SolautoAccount::SolautoPositionDebtTa, + to_wallet_ta: SolautoAccount::IntermediaryTa, }, )) } @@ -272,11 +276,11 @@ impl<'a> Rebalancer<'a> { Some(self.position_supply_ta().balance), ); Some(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { + SolautoSplTokenTransferArgs { amount, - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: self.position_supply_ta().pk, - to_wallet_ta: self.data.intermediary_ta.pk, + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: SolautoAccount::SolautoPositionSupplyTa, + to_wallet_ta: SolautoAccount::IntermediaryTa, }, )) } @@ -311,11 +315,11 @@ impl<'a> Rebalancer<'a> { None, ); Some(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { + SolautoSplTokenTransferArgs { amount, - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: self.position_supply_ta().pk, - to_wallet_ta: self.data.authority_supply_ta.as_ref().unwrap().pk, // TODO: what if this is native mint + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: SolautoAccount::SolautoPositionSupplyTa, + to_wallet_ta: SolautoAccount::AuthoritySupplyTa, // TODO: what if this is native mint }, )) } @@ -326,11 +330,11 @@ impl<'a> Rebalancer<'a> { None, ); Some(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { + SolautoSplTokenTransferArgs { amount, - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: self.position_debt_ta().pk, - to_wallet_ta: self.data.authority_debt_ta.as_ref().unwrap().pk, // TODO: what if this is native mint + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: SolautoAccount::SolautoPositionDebtTa, + to_wallet_ta: SolautoAccount::AuthorityDebtTa, // TODO: what if this is native mint }, )) } @@ -348,20 +352,13 @@ impl<'a> Rebalancer<'a> { &mut self, available_balance: u64, fee_pct_bps: u16, - token_mint: Pubkey, - position_ta: Pubkey, - destination_wallet: Pubkey, - destination_ta: Pubkey, + position_ta: SolautoAccount, + destination_ta: SolautoAccount, ) -> Result { - check!( - correct_token_account(&destination_ta, &destination_wallet, &token_mint), - SolautoError::IncorrectAccounts - ); - let fee_amount = calc_fee_amount(available_balance, fee_pct_bps); self.actions.push(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { - from_wallet: self.data.solauto_position.data.pubkey(), + SolautoSplTokenTransferArgs { + from_wallet: SolautoAccount::SolautoPosition, from_wallet_ta: position_ta, to_wallet_ta: destination_ta, amount: fee_amount, @@ -373,16 +370,10 @@ impl<'a> Rebalancer<'a> { fn payout_fees(&mut self, available_balance: u64) -> Result { let rebalance_direction = &self.rebalance_data().values.rebalance_direction; - let (token_mint, position_ta) = if self.is_boost() { - ( - self.position_data().state.supply.mint, - self.position_supply_ta().pk, - ) + let position_ta = if self.is_boost() { + SolautoAccount::SolautoPositionSupplyTa } else { - ( - self.position_data().state.debt.mint, - self.position_debt_ta().pk, - ) + SolautoAccount::SolautoPositionDebtTa }; let fee_payout = self.data.solauto_fees_bps.fetch_fees(rebalance_direction); if fee_payout.total == 0 { @@ -392,22 +383,16 @@ impl<'a> Rebalancer<'a> { let solauto_fees = self.payout_fee( available_balance, fee_payout.solauto, - token_mint, position_ta, - SOLAUTO_FEES_WALLET, - self.data.solauto_fees_ta.unwrap(), + SolautoAccount::SolautoFeesTa, )?; - let referrer_fees = if self.data.referred_by_state.is_some() - && self.data.referred_by_state.unwrap() != Pubkey::default() - { + let referrer_fees = if self.data.referred_by { self.payout_fee( available_balance, fee_payout.referrer, - token_mint, position_ta, - self.data.referred_by_state.unwrap(), - self.data.referred_by_ta.unwrap(), + SolautoAccount::ReferredByTa, )? } else { 0 @@ -437,7 +422,7 @@ impl<'a> Rebalancer<'a> { ) }; - self.pull_liquidity_from_lp(fl_repay_amount, self.data.intermediary_ta.pk); + self.pull_liquidity_from_lp(fl_repay_amount, SolautoAccount::IntermediaryTa); } Ok(()) @@ -462,7 +447,7 @@ impl<'a> Rebalancer<'a> { Ok(RebalanceResult { finished: true }) } else { let amount_to_pull_from_lp = amount_to_swap - additional_amount_to_swap; - self.pull_liquidity_from_lp(amount_to_pull_from_lp, self.data.intermediary_ta.pk); + self.pull_liquidity_from_lp(amount_to_pull_from_lp, SolautoAccount::IntermediaryTa); Ok(RebalanceResult { finished: false }) } } @@ -476,10 +461,10 @@ impl<'a> Rebalancer<'a> { if self.rebalance_data().ixs.swap_type == SwapType::ExactOut { self.actions.push(SolautoCpiAction::SplTokenTransfer( - BareSplTokenTransferArgs { - from_wallet: self.data.solauto_position.data.pubkey(), - from_wallet_ta: balance_ta.pk, - to_wallet_ta: self.data.intermediary_ta.pk, + SolautoSplTokenTransferArgs { + from_wallet: SolautoAccount::SolautoPosition, + from_wallet_ta: balance_ta, + to_wallet_ta: SolautoAccount::IntermediaryTa, amount: balance_leftover, }, )); diff --git a/programs/solauto/src/rebalance/rebalancer_tests.rs b/programs/solauto/src/rebalance/rebalancer_tests.rs index 9c836585..ed315258 100644 --- a/programs/solauto/src/rebalance/rebalancer_tests.rs +++ b/programs/solauto/src/rebalance/rebalancer_tests.rs @@ -1,10 +1,8 @@ use std::ops::{Div, Mul}; use solana_program::pubkey::Pubkey; -use spl_associated_token_account::get_associated_token_address; use crate::{ - constants::SOLAUTO_FEES_WALLET, state::solauto_position::{ PositionData, PositionState, RebalanceData, SolautoPosition, SolautoSettingsParameters, SolautoSettingsParametersInp, @@ -15,7 +13,7 @@ use crate::{ PodBool, PositionType, RebalanceDirection, RefreshedTokenState, SwapType, TokenBalanceAmount, }, - solauto::{PositionValues, SolautoCpiAction}, + solauto::{PositionValues, SolautoAccount, SolautoCpiAction}, }, utils::{ math_utils::{ @@ -117,53 +115,28 @@ fn create_rebalancer<'a>( data.pos.rebalance.ixs.active = PodBool::new(true); data.pos.rebalance.ixs.swap_type = rebalance_args.swap_type.unwrap_or(SwapType::default()); - let position_supply_ta = - get_associated_token_address(&data.pos.pubkey(), &data.pos.state.supply.mint); - let position_debt_ta = - get_associated_token_address(&data.pos.pubkey(), &data.pos.state.debt.mint); - let position_authority_supply_ta = - get_associated_token_address(&data.pos.authority, &data.pos.state.supply.mint); - let position_authority_debt_ta = - get_associated_token_address(&data.pos.authority, &data.pos.state.debt.mint); - - let fees_mint = if data.rebalance_direction == RebalanceDirection::Boost { - data.pos.state.supply.mint - } else { - data.pos.state.debt.mint - }; - let solauto_fees_ta = get_associated_token_address(&SOLAUTO_FEES_WALLET, &fees_mint); let solauto_fees = SolautoFeesBps::from_mock(SOLAUTO_FEE_BPS, false); let rebalancer = Rebalancer::new(RebalancerData { rebalance_args, solauto_position: SolautoPositionData { data: data.pos, - supply_ta: TokenAccountData::from( - position_supply_ta, - data.position_supply_ta_balance.unwrap_or(0), - ), - debt_ta: TokenAccountData::from( - position_debt_ta, - data.position_debt_ta_balance.unwrap_or(0), - ), + supply_ta: TokenAccountData::from(data.position_supply_ta_balance.unwrap_or(0)), + debt_ta: TokenAccountData::from(data.position_debt_ta_balance.unwrap_or(0)), }, - authority_supply_ta: Some(TokenAccountData::without_balance( - position_authority_supply_ta, - )), - authority_debt_ta: Some(TokenAccountData::without_balance( - position_authority_debt_ta, - )), solauto_fees_bps: solauto_fees, - referred_by_state: None, - referred_by_ta: None, - intermediary_ta: TokenAccountData::without_balance(Pubkey::new_unique()), - solauto_fees_ta: Some(solauto_fees_ta), + referred_by: false, }); rebalancer } -fn credit_token_account<'a>(rebalancer: &mut Rebalancer<'a>, ta_pk: Pubkey, base_unit_amount: i64) { +fn credit_token_account<'a>( + rebalancer: &mut Rebalancer<'a>, + ta_creditor: &mut TaCreditor, + ta_pk: SolautoAccount, + base_unit_amount: i64, +) { let credit_ta = |ta: &mut TokenAccountData| { println!("Crediting token account with {}", base_unit_amount); if base_unit_amount > 0 { @@ -173,22 +146,22 @@ fn credit_token_account<'a>(rebalancer: &mut Rebalancer<'a>, ta_pk: Pubkey, base } }; - if ta_pk == rebalancer.data.solauto_position.supply_ta.pk { + if ta_pk == SolautoAccount::SolautoPositionSupplyTa { credit_ta(&mut rebalancer.data.solauto_position.supply_ta); - } else if ta_pk == rebalancer.data.solauto_position.debt_ta.pk { + } else if ta_pk == SolautoAccount::SolautoPositionDebtTa { credit_ta(&mut rebalancer.data.solauto_position.debt_ta); - } else if ta_pk == rebalancer.data.intermediary_ta.pk { - credit_ta(&mut rebalancer.data.intermediary_ta); - } else if ta_pk == rebalancer.data.authority_supply_ta.as_ref().unwrap().pk { - credit_ta(&mut rebalancer.data.authority_supply_ta.as_mut().unwrap()); - } else if ta_pk == rebalancer.data.authority_debt_ta.as_ref().unwrap().pk { - credit_ta(&mut rebalancer.data.authority_debt_ta.as_mut().unwrap()); + } else if ta_pk == SolautoAccount::IntermediaryTa { + credit_ta(&mut ta_creditor.intermediary_ta); + } else if ta_pk == SolautoAccount::AuthoritySupplyTa { + credit_ta(&mut ta_creditor.authority_supply_ta); + } else if ta_pk == SolautoAccount::AuthorityDebtTa { + credit_ta(&mut ta_creditor.authority_debt_ta); } else { println!("Couldn't find token account"); } } -fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>) { +fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>, ta_creditor: &mut TaCreditor) { println!("Actions: {}", rebalancer.actions().len()); for action in rebalancer.actions().clone() { @@ -204,7 +177,8 @@ fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>) { .update_usage(amount as i64); credit_token_account( rebalancer, - rebalancer.data.solauto_position.supply_ta.pk, + ta_creditor, + SolautoAccount::SolautoPositionSupplyTa, (amount as i64) * -1, ); } @@ -229,7 +203,12 @@ fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>) { .state .supply .update_usage((base_unit_amount as i64) * -1); - credit_token_account(rebalancer, data.to_wallet_ta, base_unit_amount as i64); + credit_token_account( + rebalancer, + ta_creditor, + data.to_wallet_ta, + base_unit_amount as i64, + ); } SolautoCpiAction::Borrow(data) => { println!("Borrow {}", data.amount); @@ -240,7 +219,12 @@ fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>) { .state .debt .update_usage(data.amount as i64); - credit_token_account(rebalancer, data.to_wallet_ta, data.amount as i64); + credit_token_account( + rebalancer, + ta_creditor, + data.to_wallet_ta, + data.amount as i64, + ); } SolautoCpiAction::Repay(data) => { let base_unit_amount = if let TokenBalanceAmount::Some(amount) = data { @@ -265,14 +249,25 @@ fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>) { .update_usage((base_unit_amount as i64) * -1); credit_token_account( rebalancer, - rebalancer.data.solauto_position.debt_ta.pk, + ta_creditor, + SolautoAccount::SolautoPositionDebtTa, (base_unit_amount as i64) * -1, ); } SolautoCpiAction::SplTokenTransfer(args) => { println!("Transfer from {}", args.amount); - credit_token_account(rebalancer, args.from_wallet_ta, (args.amount as i64) * -1); - credit_token_account(rebalancer, args.to_wallet_ta, args.amount as i64); + credit_token_account( + rebalancer, + ta_creditor, + args.from_wallet_ta, + (args.amount as i64) * -1, + ); + credit_token_account( + rebalancer, + ta_creditor, + args.to_wallet_ta, + args.amount as i64, + ); } } } @@ -282,6 +277,7 @@ fn apply_actions<'a>(rebalancer: &mut Rebalancer<'a>) { fn perform_swap<'a>( rebalancer: &mut Rebalancer<'a>, + ta_creditor: &mut TaCreditor, rebalance_direction: &RebalanceDirection, to_solauto_position_ta: bool, ) -> u64 { @@ -291,15 +287,13 @@ fn perform_swap<'a>( (SUPPLY_PRICE, DEBT_PRICE) }; - let swap_usd_value = from_base_unit::( - rebalancer.data.intermediary_ta.balance, - TEST_TOKEN_DECIMALS, - ) - .mul(input_price); + let swap_usd_value = + from_base_unit::(ta_creditor.intermediary_ta.balance, TEST_TOKEN_DECIMALS) + .mul(input_price); println!("Swapping ${}", swap_usd_value); - rebalancer.data.intermediary_ta.balance = 0; + ta_creditor.intermediary_ta.balance = 0; let output_amount = to_base_unit::(swap_usd_value.div(output_price), TEST_TOKEN_DECIMALS); @@ -308,13 +302,15 @@ fn perform_swap<'a>( if rebalance_direction == &RebalanceDirection::Boost { credit_token_account( rebalancer, - rebalancer.data.solauto_position.supply_ta.pk, + ta_creditor, + SolautoAccount::SolautoPositionSupplyTa, output_amount as i64, ); } else { credit_token_account( rebalancer, - rebalancer.data.solauto_position.debt_ta.pk, + ta_creditor, + SolautoAccount::SolautoPositionDebtTa, output_amount as i64, ); } @@ -381,6 +377,21 @@ fn validate_rebalance<'a>(rebalancer: &mut Rebalancer<'a>) { rebalancer.data.solauto_position.data.rebalance = RebalanceData::default(); } +pub struct TaCreditor { + pub intermediary_ta: TokenAccountData, + pub authority_supply_ta: TokenAccountData, + pub authority_debt_ta: TokenAccountData, +} +impl TaCreditor { + pub fn new() -> Self { + Self { + intermediary_ta: TokenAccountData { balance: 0 }, + authority_supply_ta: TokenAccountData { balance: 0 }, + authority_debt_ta: TokenAccountData { balance: 0 }, + } + } +} + mod tests { use std::ops::{Add, Div}; @@ -448,16 +459,17 @@ mod tests { rebalance_args, None, ); + let ta_creditor = &mut TaCreditor::new(); let res = rebalancer.rebalance(RebalanceStep::PreSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } @@ -516,16 +528,17 @@ mod tests { rebalance_args, None, ); + let ta_creditor = &mut TaCreditor::new(); let res = rebalancer.rebalance(RebalanceStep::PreSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } @@ -594,18 +607,20 @@ mod tests { rebalance_args, Some(flash_borrow), ); + let ta_creditor = &mut TaCreditor::new(); credit_token_account( rebalancer, - rebalancer.data.intermediary_ta.pk, + ta_creditor, + SolautoAccount::IntermediaryTa, flash_borrow as i64, ); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } @@ -667,18 +682,20 @@ mod tests { rebalance_args, Some(flash_borrow), ); + let ta_creditor = &mut TaCreditor::new(); credit_token_account( rebalancer, - rebalancer.data.intermediary_ta.pk, + ta_creditor, + SolautoAccount::IntermediaryTa, flash_borrow as i64, ); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } @@ -742,6 +759,7 @@ mod tests { rebalance_args, None, ); + let ta_creditor = &mut TaCreditor::new(); let flash_borrow = to_base_unit( debt_adjustment.debt_adjustment_usd.abs().div(DEBT_PRICE), @@ -749,17 +767,18 @@ mod tests { ); credit_token_account( rebalancer, - rebalancer.data.solauto_position.debt_ta.pk, + ta_creditor, + SolautoAccount::SolautoPositionDebtTa, flash_borrow, ); let res = rebalancer.rebalance(RebalanceStep::PreSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); - let swap_output_amount = perform_swap(rebalancer, &rebalance_direction, false); + let swap_output_amount = perform_swap(rebalancer, ta_creditor, &rebalance_direction, false); assert_eq!( round_to_decimals(from_base_unit(swap_output_amount, TEST_TOKEN_DECIMALS), 4), @@ -822,16 +841,17 @@ mod tests { rebalance_args, None, ); + let ta_creditor = &mut TaCreditor::new(); let res = rebalancer.rebalance(RebalanceStep::PreSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); - perform_swap(rebalancer, &rebalance_direction, true); + perform_swap(rebalancer, ta_creditor, &rebalance_direction, true); let res = rebalancer.rebalance(RebalanceStep::PostSwap); assert!(res.is_ok()); - apply_actions(rebalancer); + apply_actions(rebalancer, ta_creditor); validate_rebalance(rebalancer); } diff --git a/programs/solauto/src/rebalance/solauto_fees.rs b/programs/solauto/src/rebalance/solauto_fees.rs index 3316d3dc..d033de4b 100644 --- a/programs/solauto/src/rebalance/solauto_fees.rs +++ b/programs/solauto/src/rebalance/solauto_fees.rs @@ -61,18 +61,12 @@ impl SolautoFeesBps { let k = 1.5; let mut fee_bps: f64; - if self.target_liq_utilization_rate_bps.is_some() - && self.target_liq_utilization_rate_bps.unwrap() == 0 - { - return FeePayout { - solauto: 0, - referrer: 0, - total: 0, - }; - } - if self.target_liq_utilization_rate_bps.is_some() { - fee_bps = 15.0; + if self.target_liq_utilization_rate_bps.unwrap() == 0 { + fee_bps = 15.0; + } else { + fee_bps = 10.0; + } } else if rebalance_direction == &RebalanceDirection::Repay { fee_bps = 25.0; } else if self.position_net_worth_usd <= min_size { diff --git a/programs/solauto/src/state/referral_state.rs b/programs/solauto/src/state/referral_state.rs index 7aa2e445..0b4da833 100644 --- a/programs/solauto/src/state/referral_state.rs +++ b/programs/solauto/src/state/referral_state.rs @@ -49,6 +49,9 @@ impl ReferralState { seeds.push(&self.bump); seeds } + pub fn is_referred(&self) -> bool { + self.referred_by_state != Pubkey::default() + } } mod tests { diff --git a/programs/solauto/src/types/instruction.rs b/programs/solauto/src/types/instruction.rs index f626208f..aee070b2 100644 --- a/programs/solauto/src/types/instruction.rs +++ b/programs/solauto/src/types/instruction.rs @@ -127,7 +127,7 @@ pub enum Instruction { #[account(name = "ata_program")] #[account(name = "rent")] #[account(mut, name = "solauto_position")] - #[account(name = "marginfi_group")] + #[account(mut, name = "marginfi_group")] #[account(mut, name = "marginfi_account")] #[account(mut, name = "supply_bank")] #[account(optional, name = "supply_price_oracle")] @@ -152,7 +152,7 @@ pub enum Instruction { #[account(mut, optional, name = "referred_by_ta")] #[account(mut, optional, name = "position_authority")] #[account(mut, name = "solauto_position")] - #[account(name = "marginfi_group")] + #[account(mut, name = "marginfi_group")] #[account(mut, name = "marginfi_account")] #[account(optional, mut, name = "intermediary_ta")] #[account(mut, name = "supply_bank")] diff --git a/programs/solauto/src/types/shared.rs b/programs/solauto/src/types/shared.rs index e6945dc1..c2e31943 100644 --- a/programs/solauto/src/types/shared.rs +++ b/programs/solauto/src/types/shared.rs @@ -122,14 +122,6 @@ pub struct SplTokenTransferArgs<'a, 'b> { pub authority_seeds: Option<&'b Vec<&'b [u8]>>, } -#[derive(Clone)] -pub struct BareSplTokenTransferArgs { - pub from_wallet: Pubkey, - pub from_wallet_ta: Pubkey, - pub to_wallet_ta: Pubkey, - pub amount: u64, -} - #[repr(C)] #[derive(BorshDeserialize, BorshSerialize, Clone, Debug, ShankType, Default, PartialEq, Copy)] pub struct PodBool { @@ -187,3 +179,5 @@ impl<'a, T: Pack + IsInitialized> DeserializedAccount<'a, T> { } } } + +pub type AccountMetaFlags<'a> = (&'a AccountInfo<'a>, bool, bool); diff --git a/programs/solauto/src/types/solauto.rs b/programs/solauto/src/types/solauto.rs index fd2f70ad..83602ba1 100644 --- a/programs/solauto/src/types/solauto.rs +++ b/programs/solauto/src/types/solauto.rs @@ -1,11 +1,31 @@ -use solana_program::pubkey::Pubkey; +use super::shared::TokenBalanceAmount; -use super::shared::{BareSplTokenTransferArgs, TokenBalanceAmount}; +#[derive(Clone, Copy, Eq, PartialEq, Hash)] +pub enum SolautoAccount { + SolautoPosition, + SolautoPositionSupplyTa, + SolautoPositionDebtTa, + AuthoritySupplyTa, + AuthorityDebtTa, + IntermediaryTa, + SolautoFeesTa, + ReferredByTa, + SupplyMint, + DebtMint, +} #[derive(Clone)] pub struct FromLendingPlatformAction { pub amount: T, - pub to_wallet_ta: Pubkey, + pub to_wallet_ta: SolautoAccount, +} + +#[derive(Clone)] +pub struct SolautoSplTokenTransferArgs { + pub from_wallet: SolautoAccount, + pub from_wallet_ta: SolautoAccount, + pub to_wallet_ta: SolautoAccount, + pub amount: u64, } #[derive(Clone)] @@ -14,7 +34,7 @@ pub enum SolautoCpiAction { Borrow(FromLendingPlatformAction), Repay(TokenBalanceAmount), Withdraw(FromLendingPlatformAction), - SplTokenTransfer(BareSplTokenTransferArgs), + SplTokenTransfer(SolautoSplTokenTransferArgs), } #[derive(Copy, Clone)] diff --git a/programs/solauto/src/types/solauto_manager.rs b/programs/solauto/src/types/solauto_manager.rs index d75389e6..19d7e9fb 100644 --- a/programs/solauto/src/types/solauto_manager.rs +++ b/programs/solauto/src/types/solauto_manager.rs @@ -1,7 +1,9 @@ +use std::collections::HashMap; + use math_utils::to_bps; use solana_program::{ account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, - program_error::ProgramError, pubkey::Pubkey, + program_error::ProgramError, }; use super::{ @@ -10,14 +12,17 @@ use super::{ shared::{ RebalanceStep, RefreshStateProps, SplTokenTransferArgs, TokenBalanceAmount, TokenType, }, - solauto::SolautoCpiAction, + solauto::{SolautoAccount, SolautoCpiAction}, }; use crate::{ + check, + constants::SOLAUTO_FEES_WALLET, rebalance::{ rebalancer::{Rebalancer, RebalancerData, SolautoPositionData, TokenAccountData}, solauto_fees::SolautoFeesBps, }, state::solauto_position::{RebalanceData, SolautoPosition}, + types::errors::SolautoError, utils::*, }; @@ -126,7 +131,6 @@ impl<'a> SolautoManager<'a> { fn get_token_account_data(&self, account: Option<&'a AccountInfo<'a>>) -> TokenAccountData { TokenAccountData::from( - *account.unwrap().key, solauto_utils::safe_unpack_token_account(account) .unwrap() .unwrap() @@ -135,23 +139,43 @@ impl<'a> SolautoManager<'a> { ) } - fn pk_to_account_info(&self, pk: Pubkey) -> &'a AccountInfo<'a> { - let accounts = [ + fn to_account_info(&self, acc: &SolautoAccount) -> &'a AccountInfo<'a> { + let mut map: HashMap> = HashMap::new(); + + map.insert( + SolautoAccount::SolautoPosition, Some(self.std_accounts.solauto_position.account_info), + ); + map.insert( + SolautoAccount::SolautoPositionSupplyTa, self.accounts.supply.position_ta, - self.accounts.supply.authority_ta, + ); + map.insert( + SolautoAccount::SolautoPositionDebtTa, self.accounts.debt.position_ta, + ); + map.insert( + SolautoAccount::AuthoritySupplyTa, + self.accounts.supply.authority_ta, + ); + map.insert( + SolautoAccount::AuthorityDebtTa, self.accounts.debt.authority_ta, + ); + map.insert( + SolautoAccount::IntermediaryTa, self.accounts.intermediary_ta, + ); + map.insert( + SolautoAccount::SolautoFeesTa, self.std_accounts.solauto_fees_ta, + ); + map.insert( + SolautoAccount::ReferredByTa, self.std_accounts.referred_by_ta, - ]; + ); - accounts - .iter() - .find(|acc| acc.is_some() && acc.unwrap().key == &pk) - .unwrap() - .unwrap() + map.get(acc).unwrap().unwrap() } fn get_rebalancer(&mut self, rebalance_args: RebalanceSettings) -> Rebalancer { @@ -165,60 +189,53 @@ impl<'a> SolautoManager<'a> { supply_ta: position_supply_ta, debt_ta: position_debt_ta, }, - authority_supply_ta: self.accounts.supply.authority_ta.map_or(None, |acc| { - Some(TokenAccountData::without_balance(*acc.key)) - }), - authority_debt_ta: self.accounts.debt.authority_ta.map_or(None, |acc| { - Some(TokenAccountData::without_balance(*acc.key)) - }), - intermediary_ta: TokenAccountData::without_balance( - *self.accounts.intermediary_ta.unwrap().key, - ), solauto_fees_bps: self.solauto_fees_bps.unwrap().clone(), - solauto_fees_ta: self - .std_accounts - .solauto_fees_ta - .map_or(None, |acc| Some(*acc.key)), - referred_by_state: self - .std_accounts - .authority_referral_state - .as_ref() - .map_or(None, |acc| Some(acc.data.referred_by_state.clone())), - referred_by_ta: self - .std_accounts - .referred_by_ta - .map_or(None, |acc| Some(*acc.key)), + referred_by: self.std_accounts.authority_referral_state.is_some() + && self + .std_accounts + .authority_referral_state + .as_ref() + .unwrap() + .data + .is_referred(), }) } fn execute_cpi_actions(&mut self, actions: Vec) -> ProgramResult { - let sm = self; + let owned_seeds: Vec> = self + .std_accounts + .solauto_position + .data + .seeds_with_bump() + .iter() + .map(|s| s.to_vec()) + .collect(); + let seeds_vec: Vec<&[u8]> = owned_seeds.iter().map(|v| v.as_slice()).collect(); for action in actions { match action { - SolautoCpiAction::Deposit(amount) => sm.deposit(amount)?, + SolautoCpiAction::Deposit(amount) => self.deposit(amount)?, SolautoCpiAction::Withdraw(data) => { - sm.withdraw(data.amount, sm.pk_to_account_info(data.to_wallet_ta))?; + self.withdraw(data.amount, self.to_account_info(&data.to_wallet_ta))?; } SolautoCpiAction::Borrow(data) => { - sm.borrow(data.amount, sm.pk_to_account_info(data.to_wallet_ta))?; + self.borrow(data.amount, self.to_account_info(&data.to_wallet_ta))?; } - SolautoCpiAction::Repay(amount) => sm.repay(amount)?, + SolautoCpiAction::Repay(amount) => self.repay(amount)?, SolautoCpiAction::SplTokenTransfer(data) => { - let seeds = - if &data.from_wallet == sm.std_accounts.solauto_position.account_info.key { - Some(sm.std_accounts.solauto_position.data.seeds_with_bump()) - } else { - None - }; + let authority_seeds = if &data.from_wallet == &SolautoAccount::SolautoPosition { + Some(&seeds_vec) + } else { + None + }; solana_utils::spl_token_transfer( - sm.std_accounts.token_program, + self.std_accounts.token_program, SplTokenTransferArgs { amount: data.amount, - source: sm.pk_to_account_info(data.from_wallet_ta), - authority: sm.pk_to_account_info(data.from_wallet), - recipient: sm.pk_to_account_info(data.to_wallet_ta), - authority_seeds: seeds.as_ref(), + source: self.to_account_info(&data.from_wallet_ta), + authority: self.to_account_info(&data.from_wallet), + recipient: self.to_account_info(&data.to_wallet_ta), + authority_seeds, }, )?; } @@ -282,11 +299,50 @@ impl<'a> SolautoManager<'a> { Ok(()) } + fn validate_fee_token_accounts(&self) -> ProgramResult { + let mints = vec![ + self.std_accounts.solauto_position.data.state.supply.mint, + self.std_accounts.solauto_position.data.state.debt.mint, + ]; + + if self.std_accounts.solauto_fees_ta.is_some() { + check!( + validation_utils::valid_token_account_for_mints( + self.std_accounts.solauto_fees_ta.as_ref().unwrap().key, + &SOLAUTO_FEES_WALLET, + &mints + ), + SolautoError::IncorrectAccounts + ); + } + + if self.std_accounts.referred_by_ta.is_some() { + check!( + validation_utils::valid_token_account_for_mints( + self.std_accounts.referred_by_ta.as_ref().unwrap().key, + &self + .std_accounts + .authority_referral_state + .as_ref() + .unwrap() + .data + .referred_by_state, + &mints + ), + SolautoError::IncorrectAccounts + ); + } + + Ok(()) + } + pub fn rebalance( &mut self, rebalance_args: RebalanceSettings, rebalance_step: RebalanceStep, ) -> ProgramResult { + self.validate_fee_token_accounts()?; + let (actions, finished) = { let mut rebalancer = self.get_rebalancer(rebalance_args.clone()); let rebalance_result = rebalancer.rebalance(rebalance_step)?; diff --git a/programs/solauto/src/utils/validation_utils.rs b/programs/solauto/src/utils/validation_utils.rs index 84c9c861..17303cd4 100644 --- a/programs/solauto/src/utils/validation_utils.rs +++ b/programs/solauto/src/utils/validation_utils.rs @@ -67,7 +67,7 @@ pub fn generic_instruction_validation( )?; } - // The solauto_fees_ta is validated at payout before transfer + // The solauto_fees_ta is validated during rebalance in solauto_manager.rs because it requires up-to-date state Ok(()) } @@ -256,7 +256,7 @@ pub fn validate_referral_accounts<'a>( && referred_by_ta.is_none(), SolautoError::IncorrectAccounts ); - // The referred_by_ta is further validated at payout before transfer + // The referred_by_ta is validated during rebalance in solauto_manager.rs because it requires up-to-date state Ok(()) } @@ -444,11 +444,11 @@ pub fn validate_rebalance(solauto_position: &SolautoPosition) -> ProgramResult { curr_debt_usd ); check!( - value_gte_with_threshold(curr_supply_usd, target_supply_usd, 0.1), + value_gte_with_threshold(curr_supply_usd, target_supply_usd, 0.15), SolautoError::InvalidRebalanceMade ); check!( - value_lte_with_threshold(curr_debt_usd, target_debt_usd, 0.1), + value_lte_with_threshold(curr_debt_usd, target_debt_usd, 0.15), SolautoError::InvalidRebalanceMade ); @@ -459,6 +459,16 @@ pub fn correct_token_account(token_account: &Pubkey, wallet: &Pubkey, mint: &Pub token_account == &get_associated_token_address(wallet, mint) } +pub fn valid_token_account_for_mints( + token_account: &Pubkey, + wallet: &Pubkey, + mints: &Vec, +) -> bool { + mints + .iter() + .any(|mint| correct_token_account(token_account, wallet, mint)) +} + pub fn value_lte_with_threshold(value: f64, target_value: f64, threshold: f64) -> bool { if target_value == 0.0 { return value == 0.0; diff --git a/solauto-sdk/README.md b/solauto-sdk/README.md index 73c4d0f8..23280571 100644 --- a/solauto-sdk/README.md +++ b/solauto-sdk/README.md @@ -6,6 +6,7 @@ Solauto is a program on the Solana blockchain that lets you manage leveraged lon ```typescript import { PublicKey } from "@solana/web3.js"; +import { NATIVE_MINT } from "@solana/spl-token"; import * as solauto from "@haven-fi/solauto-sdk"; // Create new Solauto client @@ -15,8 +16,8 @@ const client = solauto.getClient(solauto.LendingPlatform.MARGINFI, { }); // Initialize the client -const supplyMint = new PublicKey(NATIVE_MINT); -const debtMint = new PublicKey(USDC); +const supplyMint = NATIVE_MINT; +const debtMint = new PublicKey(solauto.USDC); await client.initializeNewSolautoPosition({ positionId: 1, lpPoolAccount: solauto.getMarginfiAccounts().defaultGroup, @@ -75,7 +76,6 @@ const statuses = txManager.send(transactionItems); ## Rebalancing an existing position ```typescript -import { PublicKey } from "@solana/web3.js"; import * as solauto from "@haven-fi/solauto-sdk"; // Create new Solauto client diff --git a/solauto-sdk/local/createTokenAccounts.ts b/solauto-sdk/local/createTokenAccounts.ts index 5f38efe3..2d317d20 100644 --- a/solauto-sdk/local/createTokenAccounts.ts +++ b/solauto-sdk/local/createTokenAccounts.ts @@ -50,4 +50,4 @@ async function createTokenAccounts(wallet: PublicKey) { } } -createTokenAccounts(SOLAUTO_FEES_WALLET); +createTokenAccounts(SOLAUTO_FEES_WALLET).catch((e) => console.log(e)); diff --git a/solauto-sdk/local/patchLUT.ts b/solauto-sdk/local/patchLUT.ts new file mode 100644 index 00000000..63d73b08 --- /dev/null +++ b/solauto-sdk/local/patchLUT.ts @@ -0,0 +1,96 @@ +import { + fromWeb3JsPublicKey, + toWeb3JsPublicKey, +} from "@metaplex-foundation/umi-web3js-adapters"; +import { + fetchAllReferralState, + getPositionExBulk, + getReferralState, + getSolanaRpcConnection, + getSolautoManagedPositions, + getTokenAccount, + LOCAL_IRONFORGE_API_URL, + SOLAUTO_PROD_PROGRAM, +} from "../src"; +import { PublicKey } from "@solana/web3.js"; +import { updateLookupTable } from "./shared"; + +let [conn, umi] = getSolanaRpcConnection( + LOCAL_IRONFORGE_API_URL, + SOLAUTO_PROD_PROGRAM +); + +async function getMissingAccounts() { + const allMissingAccounts: string[] = []; + const allPositions = await getSolautoManagedPositions(umi); + const positions = await getPositionExBulk( + umi, + allPositions.map((x) => x.publicKey!) + ); + + const referralStates = positions.map((x) => + getReferralState( + x.authority, + toWeb3JsPublicKey(umi.programs.get("solauto").publicKey) + ) + ); + const referralStatesData = await fetchAllReferralState( + umi, + referralStates.map((x) => fromWeb3JsPublicKey(x)) + ); + + const users = Array.from( + new Set(positions.map((x) => x.authority.toString())) + ); + const usersRequiringPatchLut = []; + for (const user of users) { + const authority = new PublicKey(user); + const referralState = referralStatesData.find((x) => + toWeb3JsPublicKey(x.authority).equals(authority) + )!; + const lookupTable = referralState.lookupTable; + + const existingUserLUTAccounts = + ( + await conn.getAddressLookupTable(toWeb3JsPublicKey(lookupTable), { + commitment: "confirmed", + }) + ).value?.state?.addresses ?? []; + + const userPositions = positions.filter((x) => + x.authority.equals(authority) + ); + + let requiredAccounts = userPositions.flatMap((x) => { + return [ + getTokenAccount(authority, x.supplyMint), + getTokenAccount(authority, x.debtMint), + x.publicKey, + x.lpUserAccount!, + getTokenAccount(x.publicKey, x.supplyMint), + getTokenAccount(x.publicKey, x.debtMint), + ].map((x) => x.toString()); + }); + requiredAccounts = Array.from(new Set(requiredAccounts)); + + const missingAccounts = requiredAccounts.filter( + (x) => + existingUserLUTAccounts.find((y) => y.toString() === x) === undefined + ); + + if (missingAccounts.length) { + console.log("\nMissing accounts for", referralState.publicKey.toString()); + console.log(missingAccounts); + allMissingAccounts.push(...missingAccounts); + usersRequiringPatchLut.push(user); + } + } + + console.log("Users requiring patch LUT:"); + console.log(Array.from(new Set(usersRequiringPatchLut))); + return allMissingAccounts; +} + +getMissingAccounts().then(async (accs) => { + // await updateLookupTable(accs, new PublicKey(PATCH_LUT)); +}); diff --git a/solauto-sdk/local/shared.ts b/solauto-sdk/local/shared.ts index c81e1c51..1f162236 100644 --- a/solauto-sdk/local/shared.ts +++ b/solauto-sdk/local/shared.ts @@ -110,6 +110,7 @@ export async function updateLookupTable( lookupTableAddress = addr; console.log("Lookup Table Address:", lookupTableAddress.toString()); await createAndSendV0Tx([createLutIx], keypair); + CACHE[lookupTableAddress.toString()] = []; } const existingAccounts = CACHE[lookupTableAddress.toString()]; diff --git a/solauto-sdk/local/txSandbox.ts b/solauto-sdk/local/txSandbox.ts index add63425..97f43664 100644 --- a/solauto-sdk/local/txSandbox.ts +++ b/solauto-sdk/local/txSandbox.ts @@ -1,9 +1,10 @@ import { Keypair, PublicKey } from "@solana/web3.js"; -import { createSignerFromKeypair } from "@metaplex-foundation/umi"; +import { createSignerFromKeypair, publicKey } from "@metaplex-foundation/umi"; import { fromWeb3JsKeypair } from "@metaplex-foundation/umi-web3js-adapters"; import { ClientTransactionsManager, consoleLog, + fetchBank, getBatches, getClient, getPositionExBulk, @@ -15,6 +16,8 @@ import { PriorityFeeSetting, ProgramEnv, rebalance, + safeFetchBank, + safeFetchMarginfiAccount, SOLAUTO_PROD_PROGRAM, SOLAUTO_TEST_PROGRAM, SolautoClient, @@ -22,7 +25,7 @@ import { } from "../src"; import { getSecretKey } from "./shared"; -const payForTransaction = false; +const payForTransaction = true; const testProgram = false; const lpEnv: ProgramEnv = "Prod"; @@ -47,8 +50,8 @@ export async function main() { }); await client.initializeExistingSolautoPosition({ - positionId: 2, - authority: new PublicKey("EBhRj7jbF2EVE21i19JSuCX1BAbnZFYhoKW64HnaZ3kf"), + positionId: 1, + authority: new PublicKey("61rtn5tzVkesapo6Cz83SPoShUfAePSxJsqniuF2wRKC"), // lpUserAccount: new PublicKey( // "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz" // ), diff --git a/solauto-sdk/local/updateSolautoLUT.ts b/solauto-sdk/local/updateSolautoLUT.ts index 6a764d47..c5d3e3f1 100644 --- a/solauto-sdk/local/updateSolautoLUT.ts +++ b/solauto-sdk/local/updateSolautoLUT.ts @@ -7,6 +7,7 @@ import { SWITCHBOARD_PRICE_FEED_IDS, ALL_SUPPORTED_TOKENS, getTokenAccounts, + PYTH_ORACLE_ACCOUNTS, } from "../src"; import { updateLookupTable } from "./shared"; @@ -30,6 +31,7 @@ export async function updateSolautoLut(additionalAccounts?: string[]) { ...solautoManagerTokenAccounts.map((x) => x.toString()), ...solautoFeeWalletTokenAccounts.map((x) => x.toString()), ...Object.values(SWITCHBOARD_PRICE_FEED_IDS).map((x) => x.feedId), + ...Object.values(PYTH_ORACLE_ACCOUNTS), ...(additionalAccounts ?? []), ], LOOKUP_TABLE_ADDRESS diff --git a/solauto-sdk/package.json b/solauto-sdk/package.json index 09e334b6..14f59d84 100644 --- a/solauto-sdk/package.json +++ b/solauto-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@haven-fi/solauto-sdk", - "version": "1.0.729", + "version": "1.0.819", "main": "dist/index.js", "types": "dist/index.d.ts", "description": "Typescript SDK for the Solauto program on the Solana blockchain", @@ -12,16 +12,16 @@ "test:unit": "ts-mocha -p ./tsconfig.json -t 1000000 tests/unit/**/*.ts" }, "dependencies": { - "@coral-xyz/anchor": "^0.30.1", - "@jup-ag/api": "=6.0.24", + "@coral-xyz/anchor": "=0.31.1", + "@jup-ag/api": "=6.0.44", "@metaplex-foundation/umi": "^0.9.1", "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", "@metaplex-foundation/umi-signer-wallet-adapters": "^0.9.1", "@metaplex-foundation/umi-web3js-adapters": "^0.9.1", "@solana/spl-token": "^0.4.0", - "@solana/web3.js": "=1.95.8", - "@switchboard-xyz/common": "=3.0.12", - "@switchboard-xyz/on-demand": "=1.2.51", + "@solana/web3.js": "=1.98.2", + "@switchboard-xyz/common": "=3.4.1", + "@switchboard-xyz/on-demand": "=2.17.4", "axios": "^1.7.8", "big.js": "^6.2.2", "bs58": "^5.0.0", diff --git a/solauto-sdk/pnpm-lock.yaml b/solauto-sdk/pnpm-lock.yaml index 5003c773..55b8462e 100644 --- a/solauto-sdk/pnpm-lock.yaml +++ b/solauto-sdk/pnpm-lock.yaml @@ -1,1143 +1,1620 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@coral-xyz/anchor': - specifier: ^0.30.1 - version: 0.30.1 - '@jup-ag/api': - specifier: '=6.0.24' - version: 6.0.24 - '@metaplex-foundation/umi': - specifier: ^0.9.1 - version: 0.9.2 - '@metaplex-foundation/umi-bundle-defaults': - specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-signer-wallet-adapters': - specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-web3js-adapters': - specifier: ^0.9.1 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/spl-token': - specifier: ^0.4.0 - version: 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': - specifier: '=1.95.8' - version: 1.95.8 - '@switchboard-xyz/common': - specifier: '=3.0.12' - version: 3.0.12 - '@switchboard-xyz/on-demand': - specifier: '=1.2.51' - version: 1.2.51(fastestsmallesttextencoderdecoder@1.0.22) - axios: - specifier: ^1.7.8 - version: 1.7.8 - big.js: - specifier: ^6.2.2 - version: 6.2.2 - bs58: - specifier: ^5.0.0 - version: 5.0.0 - cross-fetch: - specifier: ^4.0.0 - version: 4.0.0 - dotenv: - specifier: ^16.4.7 - version: 16.4.7 - rpc-websockets: - specifier: 7.11.0 - version: 7.11.0 - -devDependencies: - '@types/big.js': - specifier: ^6.2.2 - version: 6.2.2 - '@types/chai': - specifier: ^4.3.0 - version: 4.3.20 - '@types/mocha': - specifier: ^9.1.1 - version: 9.1.1 - '@types/node': - specifier: ^20.16.11 - version: 20.16.11 - chai: - specifier: ^4.3.4 - version: 4.5.0 - mocha: - specifier: ^9.2.2 - version: 9.2.2 - ts-mocha: - specifier: ^10.0.0 - version: 10.0.0(mocha@9.2.2) - typescript: - specifier: ^5.5.4 - version: 5.6.3 +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: '=0.31.1' + version: 0.31.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@jup-ag/api': + specifier: '=6.0.44' + version: 6.0.44 + '@metaplex-foundation/umi': + specifier: ^0.9.1 + version: 0.9.2 + '@metaplex-foundation/umi-bundle-defaults': + specifier: ^0.9.1 + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-signer-wallet-adapters': + specifier: ^0.9.1 + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-web3js-adapters': + specifier: ^0.9.1 + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/spl-token': + specifier: ^0.4.0 + version: 0.4.13(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: '=1.98.2' + version: 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@switchboard-xyz/common': + specifier: '=3.4.1' + version: 3.4.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@switchboard-xyz/on-demand': + specifier: '=2.17.4' + version: 2.17.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + axios: + specifier: ^1.7.8 + version: 1.10.0 + big.js: + specifier: ^6.2.2 + version: 6.2.2 + bs58: + specifier: ^5.0.0 + version: 5.0.0 + cross-fetch: + specifier: ^4.0.0 + version: 4.1.0 + dotenv: + specifier: ^16.4.7 + version: 16.6.1 + rpc-websockets: + specifier: 7.11.0 + version: 7.11.0 + devDependencies: + '@types/big.js': + specifier: ^6.2.2 + version: 6.2.2 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.20 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + '@types/node': + specifier: ^20.16.11 + version: 20.19.8 + chai: + specifier: ^4.3.4 + version: 4.5.0 + mocha: + specifier: ^9.2.2 + version: 9.2.2 + ts-mocha: + specifier: ^10.0.0 + version: 10.1.0(mocha@9.2.2) + typescript: + specifier: ^5.5.4 + version: 5.8.3 packages: - /@babel/runtime@7.25.7: - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + '@babel/runtime@7.27.6': + resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: false - - /@brokerloop/ttlcache@3.2.3: - resolution: {integrity: sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg==} - dependencies: - '@soncodi/signal': 2.0.7 - dev: false - /@coral-xyz/anchor-errors@0.30.1: - resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + '@coral-xyz/anchor-errors@0.31.1': + resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==} engines: {node: '>=10'} - dev: false - /@coral-xyz/anchor@0.30.1: - resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} - engines: {node: '>=11'} - dependencies: - '@coral-xyz/anchor-errors': 0.30.1 - '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.8) - '@noble/hashes': 1.5.0 - '@solana/web3.js': 1.95.8 - bn.js: 5.2.1 - bs58: 4.0.1 - buffer-layout: 1.2.2 - camelcase: 6.3.0 - cross-fetch: 3.1.8 - crypto-hash: 1.3.0 - eventemitter3: 4.0.7 - pako: 2.1.0 - snake-case: 3.0.4 - superstruct: 0.15.5 - toml: 3.0.0 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false + '@coral-xyz/anchor@0.31.1': + resolution: {integrity: sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==} + engines: {node: '>=17'} - /@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.8): - resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + '@coral-xyz/borsh@0.31.1': + resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==} engines: {node: '>=10'} peerDependencies: - '@solana/web3.js': ^1.68.0 - dependencies: - '@solana/web3.js': 1.95.8 - bn.js: 5.2.1 - buffer-layout: 1.2.2 - dev: false + '@solana/web3.js': ^1.69.0 + + '@isaacs/ttlcache@1.4.1': + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} - /@jup-ag/api@6.0.24: - resolution: {integrity: sha512-zIX4WIPb0Kb2UnK2wNIOQBWqPJyMJq/D9dQTf/2qvPb0hfa8XdgbrQAzomHMHnAzw9StMQoybBk+JK/A76xP3w==} - dev: false + '@jup-ag/api@6.0.44': + resolution: {integrity: sha512-C6oYi+wvNi07VlmWhT8+ZDMqTJuF+MiHuNBE65cYuBH6C4l0JfwpXaj6mKazAdVqVFWgngr3s2+0tdF5nDH4tA==} - /@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + '@metaplex-foundation/umi-bundle-defaults@0.9.2': resolution: {integrity: sha512-kV3tfvgvRjVP1p9OFOtH+ibOtN9omVJSwKr0We4/9r45e5LTj+32su0V/rixZUkG1EZzzOYBsxhtIE0kIw/Hrw==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) - '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - transitivePeerDependencies: - - encoding - dev: false - /@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2): + '@metaplex-foundation/umi-downloader-http@0.9.2': resolution: {integrity: sha512-tzPT9hBwenzTzAQg07rmsrqZfgguAXELbcJrsYMoASp5VqWFXYIP00g94KET6XLjWUXH4P1J2zoa6hGennPXHA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: false - /@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + '@metaplex-foundation/umi-eddsa-web3js@0.9.2': resolution: {integrity: sha512-hhPCxXbYIp4BC4z9gK78sXpWLkNSrfv4ndhF5ruAkdIp7GcRVYKj0QnOUO6lGYGiIkNlw20yoTwOe1CT//OfTQ==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@noble/curves': 1.6.0 - '@solana/web3.js': 1.95.8 - dev: false - /@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2): + '@metaplex-foundation/umi-http-fetch@0.9.2': resolution: {integrity: sha512-YCZuBu24T9ZzEDe4+w12LEZm/fO9pkyViZufGgASC5NX93814Lvf6Ssjn/hZzjfA7CvZbvLFbmujc6CV3Q/m9Q==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - /@metaplex-foundation/umi-options@0.8.9: + '@metaplex-foundation/umi-options@0.8.9': resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} - dev: false - /@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2): + '@metaplex-foundation/umi-program-repository@0.9.2': resolution: {integrity: sha512-g3+FPqXEmYsBa8eETtUE2gb2Oe3mqac0z3/Ur1TvAg5TtIy3mzRzOy/nza+sgzejnfcxcVg835rmpBaxpBnjDA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: false - /@metaplex-foundation/umi-public-keys@0.8.9: + '@metaplex-foundation/umi-public-keys@0.8.9': resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} - dependencies: - '@metaplex-foundation/umi-serializers-encodings': 0.8.9 - dev: false - /@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2): + '@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2': resolution: {integrity: sha512-YRwVf6xH0jPBAUgMhEPi+UbjioAeqTXmjsN2TnmQCPAmHbrHrMRj0rlWYwFLWAgkmoxazYrXP9lqOFRrfOGAEA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: false - /@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + '@metaplex-foundation/umi-rpc-web3js@0.9.2': resolution: {integrity: sha512-MqcsBz8B4wGl6jxsf2Jo/rAEpYReU9VCSR15QSjhvADHMmdFxCIZCCAgE+gDE2Vuanfl437VhOcP3g5Uw8C16Q==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: false - /@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2): + '@metaplex-foundation/umi-serializer-data-view@0.9.2': resolution: {integrity: sha512-5vGptadJxUxvUcyrwFZxXlEc6Q7AYySBesizCtrBFUY8w8PnF2vzmS45CP1MLySEATNH6T9mD4Rs0tLb87iQyA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - dev: false - /@metaplex-foundation/umi-serializers-core@0.8.9: + '@metaplex-foundation/umi-serializers-core@0.8.9': resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} - dev: false - /@metaplex-foundation/umi-serializers-encodings@0.8.9: + '@metaplex-foundation/umi-serializers-encodings@0.8.9': resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} - dependencies: - '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: false - /@metaplex-foundation/umi-serializers-numbers@0.8.9: + '@metaplex-foundation/umi-serializers-numbers@0.8.9': resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} - dependencies: - '@metaplex-foundation/umi-serializers-core': 0.8.9 - dev: false - /@metaplex-foundation/umi-serializers@0.9.0: + '@metaplex-foundation/umi-serializers@0.9.0': resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} - dependencies: - '@metaplex-foundation/umi-options': 0.8.9 - '@metaplex-foundation/umi-public-keys': 0.8.9 - '@metaplex-foundation/umi-serializers-core': 0.8.9 - '@metaplex-foundation/umi-serializers-encodings': 0.8.9 - '@metaplex-foundation/umi-serializers-numbers': 0.8.9 - dev: false - /@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2': resolution: {integrity: sha512-DFG0ZFocKG8briypSkG9bGUTVsWpAgYugsl2BzTygkGExc4evWfF4Sb1F2C2w9FdrA9ESZM1gpLX9xtx5taOXg==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: false - /@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2': resolution: {integrity: sha512-fR1Kf21uylMFd1Smkltmj4jTNxhqSWf416owsJ+T+cvJi2VCOcOwq/3UFzOrpz78fA0RhsajKYKj0HYsRnQI1g==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) - '@solana/web3.js': 1.95.8 - dev: false - /@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8): + '@metaplex-foundation/umi-web3js-adapters@0.9.2': resolution: {integrity: sha512-RQqUTtHYY9fmEMnq7s3Hiv/81flGaoI0ZVVoafnFVaQLnxU6QBKxtboRZHk43XtD9CiFh5f9izrMJX7iK7KlOA==} peerDependencies: '@metaplex-foundation/umi': ^0.9.2 '@solana/web3.js': ^1.72.0 - dependencies: - '@metaplex-foundation/umi': 0.9.2 - '@solana/web3.js': 1.95.8 - buffer: 6.0.3 - dev: false - /@metaplex-foundation/umi@0.9.2: + '@metaplex-foundation/umi@0.9.2': resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==} - dependencies: - '@metaplex-foundation/umi-options': 0.8.9 - '@metaplex-foundation/umi-public-keys': 0.8.9 - '@metaplex-foundation/umi-serializers': 0.9.0 - dev: false - /@noble/curves@1.6.0: - resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + '@noble/curves@1.9.4': + resolution: {integrity: sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==} engines: {node: ^14.21.3 || >=16} - dependencies: - '@noble/hashes': 1.5.0 - dev: false - /@noble/hashes@1.5.0: - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} - dev: false - /@protobufjs/aspromise@1.1.2: + '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - dev: false - /@protobufjs/base64@1.1.2: + '@protobufjs/base64@1.1.2': resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: false - /@protobufjs/codegen@2.0.4: + '@protobufjs/codegen@2.0.4': resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: false - /@protobufjs/eventemitter@1.1.0: + '@protobufjs/eventemitter@1.1.0': resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - dev: false - /@protobufjs/fetch@1.1.0: + '@protobufjs/fetch@1.1.0': resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - dev: false - /@protobufjs/float@1.0.2: + '@protobufjs/float@1.0.2': resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - dev: false - /@protobufjs/inquire@1.1.0: + '@protobufjs/inquire@1.1.0': resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - dev: false - /@protobufjs/path@1.1.2: + '@protobufjs/path@1.1.2': resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - dev: false - /@protobufjs/pool@1.1.0: + '@protobufjs/pool@1.1.0': resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - dev: false - /@protobufjs/utf8@1.1.0: + '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - dev: false - /@solana/buffer-layout-utils@0.2.0: + '@solana/buffer-layout-utils@0.2.0': resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} engines: {node: '>= 10'} - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.8 - bigint-buffer: 1.1.5 - bignumber.js: 9.1.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - /@solana/buffer-layout@4.0.1: + '@solana/buffer-layout@4.0.1': resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} engines: {node: '>=5.10'} - dependencies: - buffer: 6.0.3 - dev: false - /@solana/codecs-core@2.0.0-preview.4(typescript@5.6.3): - resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} peerDependencies: typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - typescript: 5.6.3 - dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - dev: false - /@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: typescript: '>=5' - dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 - dev: false - /@solana/codecs-data-structures@2.0.0-preview.4(typescript@5.6.3): - resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.6.3) - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - typescript: 5.6.3 - dev: false - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - dev: false - /@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true peerDependencies: typescript: '>=5' - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 - dev: false - /@solana/codecs-numbers@2.0.0-preview.4(typescript@5.6.3): - resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: typescript: '>=5' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.4.13': + resolution: {integrity: sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + + '@solana/web3.js@1.98.2': + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@switchboard-xyz/common@3.4.1': + resolution: {integrity: sha512-TropBlBYuDeBnmGHkPSmgC3clLqAxy51ZGbwk4ejAgadnszWOgYHcH7taRG4Ha17DYSCWw/LGMBKbunGo+Aoaw==} + engines: {node: '>=20'} + + '@switchboard-xyz/common@4.1.1': + resolution: {integrity: sha512-H5esycuUKAzS1SGqV6DZuBME7ZaGLHJc1jP7tgLGjZ2rZSoCRPthPLvHnQAAV3A18uomTyM8aSARyYYEAZnsFA==} + engines: {node: '>=20'} + + '@switchboard-xyz/on-demand@2.17.4': + resolution: {integrity: sha512-jZtnjcI58Leet2GCABoK0+snfi3Sg4Kn997MnsE0aMQFWCQ/zsy2oI81x7Nk+kvM+3Q5OEAG7JpAsN00BMlgQw==} + engines: {node: '>= 18'} + + '@types/big.js@6.2.2': + resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} + + '@types/chai@4.3.20': + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.19.8': + resolution: {integrity: sha512-HzbgCY53T6bfu4tT7Aq3TvViJyHjLjPNaAS3HOuMc9pw97KHsUtXNX4L+wu59g1WnjsZSko35MbEqnO58rihhw==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + '@zod/core@0.11.6': + resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + + base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + js-sha256@0.11.1: + resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + protobufjs@7.5.3: + resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} + engines: {node: '>=12.0.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + deprecated: deprecate 7.11.0 + + rpc-websockets@9.1.1: + resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.1.0: + resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod@4.0.0-beta.20250505T195954: + resolution: {integrity: sha512-iB8WvxkobVIXMARvQu20fKvbS7mUTiYRpcD8OQV1xjRhxO0EEpYIRJBk6yfBzHAHEdOSDh3SxDITr5Eajr2vtg==} + +snapshots: + + '@babel/runtime@7.27.6': {} + + '@coral-xyz/anchor-errors@0.31.1': {} + + '@coral-xyz/anchor@0.31.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor-errors': 0.31.1 + '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.8.0 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + bn.js: 5.2.2 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.2.0 + eventemitter3: 4.0.7 + pako: 2.1.0 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + bn.js: 5.2.2 + buffer-layout: 1.2.2 + + '@isaacs/ttlcache@1.4.1': {} + + '@jup-ag/api@6.0.44': {} + + '@metaplex-foundation/umi-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': + dependencies: + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-downloader-http': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-http-fetch': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-rpc-chunk-get-accounts': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-rpc-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@metaplex-foundation/umi-serializer-data-view': 0.9.2(@metaplex-foundation/umi@0.9.2) + '@metaplex-foundation/umi-transaction-factory-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - encoding + + '@metaplex-foundation/umi-downloader-http@0.9.2(@metaplex-foundation/umi@0.9.2)': + dependencies: + '@metaplex-foundation/umi': 0.9.2 + + '@metaplex-foundation/umi-eddsa-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': + dependencies: + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@noble/curves': 1.9.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + + '@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2)': + dependencies: + '@metaplex-foundation/umi': 0.9.2 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@metaplex-foundation/umi-options@0.8.9': {} + + '@metaplex-foundation/umi-program-repository@0.9.2(@metaplex-foundation/umi@0.9.2)': + dependencies: + '@metaplex-foundation/umi': 0.9.2 + + '@metaplex-foundation/umi-public-keys@0.8.9': + dependencies: + '@metaplex-foundation/umi-serializers-encodings': 0.8.9 + + '@metaplex-foundation/umi-rpc-chunk-get-accounts@0.9.2(@metaplex-foundation/umi@0.9.2)': + dependencies: + '@metaplex-foundation/umi': 0.9.2 + + '@metaplex-foundation/umi-rpc-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': + dependencies: + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + + '@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2)': + dependencies: + '@metaplex-foundation/umi': 0.9.2 + + '@metaplex-foundation/umi-serializers-core@0.8.9': {} + + '@metaplex-foundation/umi-serializers-encodings@0.8.9': + dependencies: + '@metaplex-foundation/umi-serializers-core': 0.8.9 + + '@metaplex-foundation/umi-serializers-numbers@0.8.9': + dependencies: + '@metaplex-foundation/umi-serializers-core': 0.8.9 + + '@metaplex-foundation/umi-serializers@0.9.0': + dependencies: + '@metaplex-foundation/umi-options': 0.8.9 + '@metaplex-foundation/umi-public-keys': 0.8.9 + '@metaplex-foundation/umi-serializers-core': 0.8.9 + '@metaplex-foundation/umi-serializers-encodings': 0.8.9 + '@metaplex-foundation/umi-serializers-numbers': 0.8.9 + + '@metaplex-foundation/umi-signer-wallet-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - typescript: 5.6.3 - dev: false + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - /@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} - peerDependencies: - typescript: '>=5' + '@metaplex-foundation/umi-transaction-factory-web3js@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - dev: false + '@metaplex-foundation/umi': 0.9.2 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - /@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} - peerDependencies: - typescript: '>=5' + '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 - dev: false + '@metaplex-foundation/umi': 0.9.2 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + buffer: 6.0.3 - /@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + '@metaplex-foundation/umi@0.9.2': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.6.3) - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.6.3 - dev: false + '@metaplex-foundation/umi-options': 0.8.9 + '@metaplex-foundation/umi-public-keys': 0.8.9 + '@metaplex-foundation/umi-serializers': 0.9.0 - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + '@noble/curves@1.9.4': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 4.9.5 - dev: false + '@noble/hashes': 1.8.0 - /@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + '@noble/hashes@1.8.0': {} + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.6.3 - dev: false + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 - /@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} - peerDependencies: - typescript: '>=5' + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - typescript: 5.6.3 + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.3.1 transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false + - bufferutil + - encoding + - typescript + - utf-8-validate - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' + '@solana/buffer-layout@4.0.1': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false + buffer: 6.0.3 - /@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.0.0-rc.1(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 - /@solana/errors@2.0.0-preview.4(typescript@5.6.3): - resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/codecs-core@2.3.0(typescript@5.8.3)': dependencies: - chalk: 5.3.0 - commander: 12.1.0 - typescript: 5.6.3 - dev: false + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 - /@solana/errors@2.0.0-rc.1(typescript@4.9.5): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.8.3)': dependencies: - chalk: 5.3.0 - commander: 12.1.0 - typescript: 4.9.5 - dev: false + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 - /@solana/errors@2.0.0-rc.1(typescript@5.6.3): - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true - peerDependencies: - typescript: '>=5' + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.8.3)': dependencies: - chalk: 5.3.0 - commander: 12.1.0 - typescript: 5.6.3 - dev: false + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 - /@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-numbers@2.3.0(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.6.3) - '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/errors': 2.0.0-preview.4(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false + '@solana/codecs-core': 2.3.0(typescript@5.8.3) + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/errors': 2.0.0-rc.1(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - dev: false + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.8.3 - /@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} - peerDependencies: - typescript: '>=5' + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 + '@solana/errors@2.0.0-rc.1(typescript@5.8.3)': dependencies: - '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: false + chalk: 5.4.1 + commander: 12.1.0 + typescript: 5.8.3 - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 + '@solana/errors@2.3.0(typescript@5.8.3)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - dev: false + chalk: 5.4.1 + commander: 14.0.0 + typescript: 5.8.3 - /@solana/spl-token-metadata@0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-DSBlo7vjuLe/xvNn75OKKndDBkFxlqjLdWlq6rf40StnrhRn7TDntHGLZpry1cf3uzQFShqeLROGNPAJwvkPnA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.95.3 + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.98.0 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - - typescript - dev: false - /@solana/spl-token@0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.98.0 - buffer: 6.0.3 + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - - bufferutil - - encoding - fastestsmallesttextencoderdecoder - typescript - - utf-8-validate - dev: false - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3): - resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.94.0 + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-token-metadata': 0.1.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 - buffer: 6.0.3 + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - - bufferutil - - encoding - fastestsmallesttextencoderdecoder - typescript - - utf-8-validate - dev: false - - /@solana/spl-type-length-value@0.1.0: - resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} - engines: {node: '>=16'} - dependencies: - buffer: 6.0.3 - dev: false - /@solana/web3.js@1.95.8: - resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + '@solana/spl-token@0.4.13(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.2 - node-fetch: 2.7.0 - rpc-websockets: 9.0.4 - superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding + - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate - dev: false - /@solana/web3.js@1.98.0: - resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} + '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.7 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.4 + '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.8.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 borsh: 0.7.0 bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.2 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) node-fetch: 2.7.0 - rpc-websockets: 9.0.4 + rpc-websockets: 9.1.1 superstruct: 2.0.2 transitivePeerDependencies: - bufferutil - encoding + - typescript - utf-8-validate - dev: false - - /@solworks/soltoolkit-sdk@0.0.23(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w==} - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/spl-token': 0.3.11(@solana/web3.js@1.98.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5) - '@solana/web3.js': 1.98.0 - '@types/bn.js': 5.1.6 - '@types/node': 18.19.65 - '@types/node-fetch': 2.6.12 - bn.js: 5.2.1 - decimal.js: 10.4.3 - typescript: 4.9.5 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - utf-8-validate - dev: false - - /@soncodi/signal@2.0.7: - resolution: {integrity: sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw==} - dev: false - /@swc/helpers@0.5.13: - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@swc/helpers@0.5.17': dependencies: - tslib: 2.7.0 - dev: false + tslib: 2.8.1 - /@switchboard-xyz/common@2.5.5: - resolution: {integrity: sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w==} - engines: {node: '>=12'} + '@switchboard-xyz/common@3.4.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 - bs58: 5.0.0 - cron-validator: 1.3.1 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - lodash: 4.17.21 - protobufjs: 7.4.0 - yaml: 2.6.1 + bn.js: 5.2.2 + bs58: 6.0.0 + buffer: 6.0.3 + decimal.js: 10.6.0 + js-sha256: 0.11.1 + protobufjs: 7.5.3 + yaml: 2.8.0 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@switchboard-xyz/common@3.0.12: - resolution: {integrity: sha512-SA+KEqM25rk+jYWVyiPrK3VaTajr38dPB1Hni+4AOCw7YUDNoM3JrTx8frZcj10ILzdHP3odAiUgxmulhZionQ==} - engines: {node: '>=20'} + '@switchboard-xyz/common@4.1.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@solana/web3.js': 1.98.0 - axios: 1.8.4 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + axios: 1.10.0 big.js: 6.2.2 - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 6.0.0 buffer: 6.0.3 - decimal.js: 10.4.3 - js-sha256: 0.11.0 - protobufjs: 7.4.0 - yaml: 2.6.1 + decimal.js: 10.6.0 + js-sha256: 0.11.1 + protobufjs: 7.5.3 + yaml: 2.8.0 + zod: 4.0.0-beta.20250505T195954 transitivePeerDependencies: - bufferutil - debug - encoding + - typescript - utf-8-validate - dev: false - /@switchboard-xyz/on-demand@1.2.51(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g==} - engines: {node: '>= 18'} - deprecated: deprecated in favor of 2.x.x - dependencies: - '@brokerloop/ttlcache': 3.2.3 - '@coral-xyz/anchor-30': /@coral-xyz/anchor@0.30.1 - '@solana/web3.js': 1.98.0 - '@solworks/soltoolkit-sdk': 0.0.23(fastestsmallesttextencoderdecoder@1.0.22) - '@switchboard-xyz/common': 2.5.5 - axios: 1.8.4 - big.js: 6.2.2 - bs58: 5.0.0 + '@switchboard-xyz/on-demand@2.17.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor-31': '@coral-xyz/anchor@0.31.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)' + '@isaacs/ttlcache': 1.4.1 + '@switchboard-xyz/common': 4.1.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + axios: 1.10.0 + bs58: 6.0.0 + buffer: 6.0.3 + events: 3.3.0 + isomorphic-ws: 5.0.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) js-yaml: 4.1.0 - protobufjs: 7.4.0 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - debug - encoding - - fastestsmallesttextencoderdecoder + - typescript - utf-8-validate - dev: false - - /@types/big.js@6.2.2: - resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} - dev: true - /@types/bn.js@5.1.6: - resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} - dependencies: - '@types/node': 20.16.11 - dev: false + '@types/big.js@6.2.2': {} - /@types/chai@4.3.20: - resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} - dev: true + '@types/chai@4.3.20': {} - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: - '@types/node': 20.16.11 - dev: false + '@types/node': 20.19.8 - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - requiresBuild: true - dev: true + '@types/json5@0.0.29': optional: true - /@types/mocha@9.1.1: - resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} - dev: true - - /@types/node-fetch@2.6.12: - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - dependencies: - '@types/node': 20.16.11 - form-data: 4.0.1 - dev: false - - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: false + '@types/mocha@9.1.1': {} - /@types/node@18.19.65: - resolution: {integrity: sha512-Ay5BZuO1UkTmVHzZJNvZKw/E+iB3GQABb6kijEz89w2JrfhNA+M/ebp18pfz9Gqe9ywhMC8AA8yC01lZq48J+Q==} - dependencies: - undici-types: 5.26.5 - dev: false + '@types/node@12.20.55': {} - /@types/node@20.16.11: - resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + '@types/node@20.19.8': dependencies: - undici-types: 6.19.8 + undici-types: 6.21.0 - /@types/uuid@8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} - dev: false + '@types/uuid@8.3.4': {} - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@7.4.7': dependencies: - '@types/node': 20.16.11 - dev: false + '@types/node': 20.19.8 - /@types/ws@8.5.12: - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.18.1': dependencies: - '@types/node': 20.16.11 - dev: false + '@types/node': 20.19.8 - /@ungap/promise-all-settled@1.1.2: - resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true + '@ungap/promise-all-settled@1.1.2': {} - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: false + '@zod/core@0.11.6': {} - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 - dev: false - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.1: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + argparse@2.0.1: {} - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + arrify@1.0.1: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false + assertion-error@1.1.0: {} - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false + asynckit@0.4.0: {} - /axios@1.8.4: - resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + axios@1.10.0: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.1 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: false - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base-x@3.0.10: - resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + base-x@3.0.11: dependencies: safe-buffer: 5.2.1 - dev: false - /base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} - dev: false + base-x@4.0.1: {} - /base-x@5.0.0: - resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==} - dev: false + base-x@5.0.1: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false + base64-js@1.5.1: {} - /big.js@6.2.2: - resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} - dev: false + big.js@6.2.2: {} - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true + bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 - dev: false - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false + bignumber.js@9.3.1: {} - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.3.0: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - dev: false - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false + bn.js@5.2.2: {} - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + borsh@0.7.0: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - dev: false - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true + browser-stdout@1.3.1: {} - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@4.0.1: dependencies: - base-x: 3.0.10 - dev: false + base-x: 3.0.11 - /bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + bs58@5.0.0: dependencies: - base-x: 4.0.0 - dev: false + base-x: 4.0.1 - /bs58@6.0.0: - resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + bs58@6.0.0: dependencies: - base-x: 5.0.0 - dev: false + base-x: 5.0.1 - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} - dev: false + buffer-layout@1.2.2: {} - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: false - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true + bufferutil@4.0.9: dependencies: - node-gyp-build: 4.8.2 - dev: false + node-gyp-build: 4.8.4 + optional: true - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 - /chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} + camelcase@6.3.0: {} + + chai@4.5.0: dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -1146,30 +1623,19 @@ packages: loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.1.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false + chalk@5.4.1: {} - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@1.0.3: dependencies: get-func-name: 2.0.2 - dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -1180,252 +1646,169 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: false - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - dev: false + commander@12.1.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false + commander@14.0.0: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + commander@2.20.3: {} - /cron-validator@1.3.1: - resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} - dev: false + concat-map@0.0.1: {} - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false - /cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + cross-fetch@4.1.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false - - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - dev: false - /debug@4.3.3(supports-color@8.1.1): - resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.3(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 - dev: true - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true + decamelize@4.0.0: {} - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: false + decimal.js@10.6.0: {} - /deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} - engines: {node: '>=6'} + deep-eql@4.1.4: dependencies: type-detect: 4.1.0 - dev: true - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - dev: false + delay@5.0.0: {} - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false + delayed-stream@1.0.0: {} - /diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} - engines: {node: '>=0.3.1'} - dev: true + diff@3.5.0: {} - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true + diff@5.0.0: {} + + dotenv@16.6.1: {} - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dunder-proto@1.0.1: dependencies: - no-case: 3.0.4 - tslib: 2.7.0 - dev: false + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - /dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - dev: false + emoji-regex@8.0.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + es-define-property@1.0.1: {} - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: false + es-errors@1.3.0: {} - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - dev: false - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true + escalade@3.2.0: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false + eventemitter3@4.0.7: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: false + eventemitter3@5.0.1: {} - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - dev: false + events@3.3.0: {} - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - dev: false + eyes@0.1.8: {} - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - dev: false + fast-stable-stringify@1.0.0: {} - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: false + fastestsmallesttextencoderdecoder@1.0.22: {} - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true + flat@5.0.2: {} - /follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + follow-redirects@1.15.9: {} - /form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 - dev: false - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + function-bind@1.1.2: {} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true + get-caller-file@2.0.5: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + get-func-name@2.0.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1433,225 +1816,137 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true + gopd@1.2.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + growl@1.10.5: {} - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true + has-flag@4.0.0: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - dev: false - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false + ieee754@1.2.1: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true + is-plain-obj@2.1.0: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isomorphic-ws@4.0.1(ws@7.5.10): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 7.5.10 - dev: false + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - /jayson@4.1.2: - resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==} - engines: {node: '>=8'} - hasBin: true + isomorphic-ws@5.0.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/connect': 3.4.38 '@types/node': 12.20.55 '@types/ws': 7.4.7 - JSONStream: 1.3.5 commander: 2.20.3 delay: 5.0.0 es6-promisify: 5.0.0 eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10) + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) json-stringify-safe: 5.0.1 + stream-json: 1.9.1 uuid: 8.3.2 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - dev: false - /js-sha256@0.11.0: - resolution: {integrity: sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q==} - dev: false + js-sha256@0.11.1: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: false + json-stringify-safe@5.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - requiresBuild: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true optional: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: false - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - dev: false + long@5.3.2: {} - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@2.3.7: dependencies: get-func-name: 2.0.2 - dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.7.0 - dev: false + make-error@1.3.6: {} - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + math-intrinsics@1.1.0: {} - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: false - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 - dev: true + brace-expansion: 1.1.12 - /minimatch@4.2.1: - resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} - engines: {node: '>=10'} + minimatch@4.2.1: dependencies: - brace-expansion: 1.1.11 - dev: true + brace-expansion: 1.1.12 - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mocha@9.2.2: - resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} - engines: {node: '>= 12.0.0'} - hasBin: true + mocha@9.2.2: dependencies: '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 @@ -1677,98 +1972,45 @@ packages: yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.2: {} - /nanoid@3.3.1: - resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + ms@2.1.3: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.7.0 - dev: false + nanoid@3.3.1: {} - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: false - /node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} - hasBin: true - requiresBuild: true - dev: false + node-gyp-build@4.8.4: + optional: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - dev: false + pako@2.1.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathval@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - requiresBuild: true + protobufjs@7.5.3: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -1780,182 +2022,107 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.16.11 - long: 5.2.3 - dev: false + '@types/node': 20.19.8 + long: 5.3.2 - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false + proxy-from-env@1.1.0: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /rpc-websockets@7.11.0: - resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} - deprecated: deprecate 7.11.0 + rpc-websockets@7.11.0: dependencies: eventemitter3: 4.0.7 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.8 + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - dev: false - /rpc-websockets@9.0.4: - resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==} + rpc-websockets@9.1.1: dependencies: - '@swc/helpers': 0.5.13 + '@swc/helpers': 0.5.17 '@types/uuid': 8.3.4 - '@types/ws': 8.5.12 + '@types/ws': 8.18.1 buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.8 + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - dev: false - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + serialize-javascript@6.0.0: dependencies: randombytes: 2.1.0 - dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.7.0 - dev: false - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - requiresBuild: true - dev: true + strip-bom@3.0.0: optional: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} - dev: false + superstruct@0.15.5: {} - /superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - dev: false + superstruct@2.0.2: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - dev: false - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: false + text-encoding-utf-8@1.0.2: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - dev: false + toml@3.0.0: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false + tr46@0.0.3: {} - /ts-mocha@10.0.0(mocha@9.2.2): - resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} - engines: {node: '>= 6.X.X'} - hasBin: true - peerDependencies: - mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + ts-mocha@10.1.0(mocha@9.2.2): dependencies: mocha: 9.2.2 ts-node: 7.0.1 optionalDependencies: tsconfig-paths: 3.15.0 - dev: true - /ts-node@7.0.1: - resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} - engines: {node: '>=4.2.0'} - hasBin: true + ts-node@7.0.1: dependencies: arrify: 1.0.1 buffer-from: 1.1.2 @@ -1965,153 +2132,75 @@ packages: mkdirp: 0.5.6 source-map-support: 0.5.21 yn: 2.0.0 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - requiresBuild: true + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true optional: true - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - dev: false - - /type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - dev: true - - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false + tslib@2.8.1: {} - /typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true + type-detect@4.1.0: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: false + typescript@5.8.3: {} - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.21.0: {} - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true + utf-8-validate@5.0.10: dependencies: - node-gyp-build: 4.8.2 - dev: false + node-gyp-build: 4.8.4 + optional: true - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false + uuid@8.3.2: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false + webidl-conversions@3.0.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /workerpool@6.2.0: - resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} - dev: true + workerpool@6.2.0: {} - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - bufferutil: 4.0.8 + ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 utf-8-validate: 5.0.10 - dev: false - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true - dev: false + yaml@2.8.0: {} - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.4: {} - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 - dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.2.0 @@ -2120,14 +2209,11 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.4 - dev: true - /yn@2.0.0: - resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} - engines: {node: '>=4'} - dev: true + yn@2.0.0: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} + + zod@4.0.0-beta.20250505T195954: + dependencies: + '@zod/core': 0.11.6 diff --git a/solauto-sdk/src/constants/marginfiAccounts.ts b/solauto-sdk/src/constants/marginfiAccounts.ts index f9246a75..62e68d65 100644 --- a/solauto-sdk/src/constants/marginfiAccounts.ts +++ b/solauto-sdk/src/constants/marginfiAccounts.ts @@ -138,6 +138,16 @@ const MARGINFI_PROD_ACCOUNTS: MarginfiBankAccountsMap = { liquidityVault: "4kT3EXc5dDVndUU9mV6EH3Jh3CSEvpcCZjuMkwqrtxUy", vaultAuthority: "9gNrvvZ9RuTyRWooiEEypwcXU6kyXW8yWuhXU8tWUH5L", }, + [tokens.PUMP]: { + bank: "61Qx9kgWo9RVtPHf8Rku6gbaUtcnzgkpAuifQBUcMRVK", + liquidityVault: "6FxnrCaJNHLyrFy6EPtqFjoUK5iRxDQbaVo1bA69nDhH", + vaultAuthority: "6VL2QW6sy8cjxL24xHL7eFbnUSi35DMJd8AzRwssSs9y" + }, + [tokens.CBBTC]: { + bank: "Ac4KV5K5isDqtABtg6h5DiwzZMe3Sp9bc3pBiCUvUpaQ", + liquidityVault: "FvrJsHu7X9jkT9rTuR6Kfs6wSjPvjV6zhH4gVSiJ8LFT", + vaultAuthority: "jfBsYE2sAkNj1pwE6U1gQ515JU5vn9huZMDYVvZagb4", + } }, ["DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q"]: { [tokens.POPCAT]: { diff --git a/solauto-sdk/src/constants/pythConstants.ts b/solauto-sdk/src/constants/pythConstants.ts index 6db1af73..a015b261 100644 --- a/solauto-sdk/src/constants/pythConstants.ts +++ b/solauto-sdk/src/constants/pythConstants.ts @@ -6,9 +6,6 @@ export const PYTH_PUSH_PROGRAM = new PublicKey( "pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" ); -export const PYTH_SPONSORED_SHARD_ID = 0; -export const MARGINFI_SPONSORED_SHARD_ID = 3301; - // https://pyth.network/developers/price-feed-ids#solana-stable export const PYTH_PRICE_FEED_IDS = { [NATIVE_MINT.toString()]: @@ -45,4 +42,12 @@ export const PYTH_PRICE_FEED_IDS = { "0x72b021217ca3fe68922a19aaf990109cb9d84e9ad004b4d2025ad6f529314419", [tokens.WIF]: "0x4ca4beeca86f0d164160323817a4e42b10010a724c2217c6ee41b54cd4cc61fc", + [tokens.PUMP]: + "0x7a01fca212788bba7c5bf8c9efd576a8a722f070d2c17596ff7bb609b8d5c3b9", + [tokens.CBBTC]: + "0x2817d7bfe5c64b8ea956e9a26f573ef64e72e4d7891f2d6af9bcc93f7aff9a97", +}; + +export const PYTH_ORACLE_ACCOUNTS = { + [tokens.PUMP]: "HMm3GPbdnqGwbkTnUUqCFsH8AMHDdEC3Lg8gcPD3HJSH", }; diff --git a/solauto-sdk/src/constants/solautoConstants.ts b/solauto-sdk/src/constants/solautoConstants.ts index c87fb8db..e6995179 100644 --- a/solauto-sdk/src/constants/solautoConstants.ts +++ b/solauto-sdk/src/constants/solautoConstants.ts @@ -10,7 +10,7 @@ import { TOKEN_PROGRAM_ID, } from "@solana/spl-token"; import { SOLAUTO_MANAGER } from "./generalConstants"; -import { JUPITER_PROGRAM_ID } from "../jupiter-sdk"; +import { JUPITER_PROGRAM_ID } from "../externalSdks/jupiter"; export const SOLAUTO_PROD_PROGRAM = new PublicKey( "AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV" @@ -65,3 +65,5 @@ export const STANDARD_LUT_ACCOUNTS = [ SYSVAR_INSTRUCTIONS_PUBKEY, JUPITER_PROGRAM_ID, ].map((x) => x.toString()); + +export const UPDATE_ORACLE_TX_NAME = "update oracle"; diff --git a/solauto-sdk/src/constants/switchboardConstants.ts b/solauto-sdk/src/constants/switchboardConstants.ts index bd2110eb..dafd62fd 100644 --- a/solauto-sdk/src/constants/switchboardConstants.ts +++ b/solauto-sdk/src/constants/switchboardConstants.ts @@ -1,3 +1,4 @@ +import { NATIVE_MINT } from "@solana/spl-token"; import * as tokens from "./tokenConstants"; interface SwitchboardFeed { @@ -7,11 +8,27 @@ interface SwitchboardFeed { // https://beta.ondemand.switchboard.xyz/solana/mainnet export const SWITCHBOARD_PRICE_FEED_IDS: { [key: string]: SwitchboardFeed } = { + [NATIVE_MINT.toString()]: { + feedId: "4Hmd6PdjVA9auCoScE12iaBogfwS4ZXQ6VZoBeqanwWW", + feedHash: "0x1f42dfb21efb24828b99fbe70e6d139cd665aafcbb1706bccd8f2a9b12562db6", + }, [tokens.JUP_SOL]: { feedId: "HX5WM3qzogAfRCjBUWwnniLByMfFrjm1b5yo4KoWGR27", feedHash: "0xc02f22d47b20b43bafde474328ac027283dbd7bb443660f5ec414c93faec56dc", }, + [tokens.JITO_SOL]: { + feedId: "5htZ4vPKPjAEg8EJv6JHcaCetMM4XehZo8znQvrp6Ur3", + feedHash: "0x44f5a7676baf4c6e5eb26fdde2695e7e3e0971071b76ddc622fa71528092ca25" + }, + [tokens.LST]: { + feedId: "BWK8Wnybb7rPteNMqJs9uWoqdfYApNym6WgE59BwLe1v", + feedHash: "0x74e140c452fe29cced80898a51961ed1410c1fe0efbdc970fe5aac986427419e" + }, + [tokens.JTO]: { + feedId: "A9RnpLxxtAS2TR3HtSMNJfsKpRPvkLbBkGZ6gKziSPLr", + feedHash: "0xa5bc3b659791facc5edfd8e74942c79d7e8d59f0f913dcdd9bcfb33a2fceb575" + }, [tokens.H_SOL]: { feedId: "1snBjCaHejZqQsAqkELAKNaqUrDNNCr7zmNX6qaQCzg", feedHash: diff --git a/solauto-sdk/src/constants/tokenConstants.ts b/solauto-sdk/src/constants/tokenConstants.ts index 05c72e13..4258da82 100644 --- a/solauto-sdk/src/constants/tokenConstants.ts +++ b/solauto-sdk/src/constants/tokenConstants.ts @@ -24,6 +24,8 @@ export const POPCAT = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"; export const RETARDIO = "6ogzHhzdrQr9Pgv6hZ2MNze7UrzBMAFyBBWUYp1Fhitx"; export const BILLY = "3B5wuUrMEi5yATD7on46hKfej3pfmd7t1RKgrsN3pump"; export const HMTR = "7JhmUcZrrfhyt5nTSu3AfsrUq2L9992a7AhwdSDxdoL2"; +export const PUMP = "pumpCmXqMfrsAkQ5r49WcJnRayYRqmXz6ae8H7H9Dfn"; +export const CBBTC = "cbbtcf3aa214zXHbiAZQwf4122FBYbraNdFqgw4iMij"; export const ALL_SUPPORTED_TOKENS = [ NATIVE_MINT.toString(), @@ -49,10 +51,13 @@ export const ALL_SUPPORTED_TOKENS = [ RETARDIO, BILLY, HMTR, + PUMP, + CBBTC, ]; export interface TokenInfo { ticker: string; + name?: string; decimals: number; isStableCoin?: boolean; isLST?: boolean; @@ -67,21 +72,25 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [NATIVE_MINT.toString()]: { ticker: "SOL", + name: "Solana", decimals: 9, isMajor: true, }, [B_SOL]: { ticker: "bSOL", + name: "Blaze SOL", decimals: 9, isLST: true, }, [M_SOL]: { ticker: "mSOL", + name: "Marinade SOL", decimals: 9, isLST: true, }, [JITO_SOL]: { ticker: "JitoSOL", + name: "JITO SOL", decimals: 9, isLST: true, }, @@ -92,43 +101,52 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [INF]: { ticker: "INF", + name: "Infinity", decimals: 9, isLST: true, }, [H_SOL]: { ticker: "hSOL", + name: "Helius SOL", decimals: 9, isLST: true, }, [JUP_SOL]: { ticker: "JupSOL", + name: "Jupiter SOL", decimals: 9, isLST: true, }, [JUP]: { ticker: "JUP", + name: "Jupiter", decimals: 6, }, [JTO]: { ticker: "JTO", + name: "Jito", decimals: 9, }, [JLP]: { ticker: "JLP", + name: "Jupiter Liquidity Provider", decimals: 6, }, [WBTC]: { ticker: "WBTC", + name: "Wrapped Bitcoin", decimals: 8, isMajor: true, }, [WETH]: { ticker: "WETH", + name: "Wrapped Ethereum", decimals: 8, isMajor: true, }, [HNT]: { ticker: "HNT", + name: "Helium Network Token", decimals: 8, }, [PYTH]: { @@ -137,11 +155,13 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [USDC]: { ticker: "USDC", + name: "USD Circle", decimals: 6, isStableCoin: true, }, [USDT]: { ticker: "USDT", + name: "USD Tether", decimals: 6, isStableCoin: true, }, @@ -152,6 +172,7 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [WIF]: { ticker: "WIF", + name: "Dog Wif Hat", decimals: 6, isMeme: true, }, @@ -172,13 +193,26 @@ export const TOKEN_INFO: { [key: string]: TokenInfo } = { }, [HMTR]: { ticker: "HMTR", + name: "Hampter", decimals: 0, isMeme: true, }, + [PUMP]: { + ticker: "PUMP", + name: "Pump.fun", + decimals: 6, + }, + [CBBTC]: { + ticker: "CBBTC", + name: "Coinbase BTC", + decimals: 8, + isMajor: true, + }, }; export const MAJORS_PRIO = { [WBTC]: 0, + [CBBTC]: 0, [WETH]: 1, [NATIVE_MINT.toString()]: 2, -}; \ No newline at end of file +}; diff --git a/solauto-sdk/src/externalSdks/index.ts b/solauto-sdk/src/externalSdks/index.ts new file mode 100644 index 00000000..993974aa --- /dev/null +++ b/solauto-sdk/src/externalSdks/index.ts @@ -0,0 +1,3 @@ +export * from "./jupiter"; +export * from "./marginfi"; +export * from "./pyth"; \ No newline at end of file diff --git a/solauto-sdk/src/jupiter-sdk/errors/index.ts b/solauto-sdk/src/externalSdks/jupiter/errors/index.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/errors/index.ts rename to solauto-sdk/src/externalSdks/jupiter/errors/index.ts diff --git a/solauto-sdk/src/jupiter-sdk/errors/jupiter.ts b/solauto-sdk/src/externalSdks/jupiter/errors/jupiter.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/errors/jupiter.ts rename to solauto-sdk/src/externalSdks/jupiter/errors/jupiter.ts diff --git a/solauto-sdk/src/jupiter-sdk/index.ts b/solauto-sdk/src/externalSdks/jupiter/index.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/index.ts rename to solauto-sdk/src/externalSdks/jupiter/index.ts diff --git a/solauto-sdk/src/jupiter-sdk/programs/index.ts b/solauto-sdk/src/externalSdks/jupiter/programs/index.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/programs/index.ts rename to solauto-sdk/src/externalSdks/jupiter/programs/index.ts diff --git a/solauto-sdk/src/jupiter-sdk/programs/jupiter.ts b/solauto-sdk/src/externalSdks/jupiter/programs/jupiter.ts similarity index 100% rename from solauto-sdk/src/jupiter-sdk/programs/jupiter.ts rename to solauto-sdk/src/externalSdks/jupiter/programs/jupiter.ts diff --git a/solauto-sdk/src/marginfi-sdk/accounts/bank.ts b/solauto-sdk/src/externalSdks/marginfi/accounts/bank.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/accounts/bank.ts rename to solauto-sdk/src/externalSdks/marginfi/accounts/bank.ts diff --git a/solauto-sdk/src/marginfi-sdk/accounts/index.ts b/solauto-sdk/src/externalSdks/marginfi/accounts/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/accounts/index.ts rename to solauto-sdk/src/externalSdks/marginfi/accounts/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/accounts/marginfiAccount.ts b/solauto-sdk/src/externalSdks/marginfi/accounts/marginfiAccount.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/accounts/marginfiAccount.ts rename to solauto-sdk/src/externalSdks/marginfi/accounts/marginfiAccount.ts diff --git a/solauto-sdk/src/marginfi-sdk/accounts/marginfiGroup.ts b/solauto-sdk/src/externalSdks/marginfi/accounts/marginfiGroup.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/accounts/marginfiGroup.ts rename to solauto-sdk/src/externalSdks/marginfi/accounts/marginfiGroup.ts diff --git a/solauto-sdk/src/marginfi-sdk/errors/index.ts b/solauto-sdk/src/externalSdks/marginfi/errors/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/errors/index.ts rename to solauto-sdk/src/externalSdks/marginfi/errors/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/errors/marginfi.ts b/solauto-sdk/src/externalSdks/marginfi/errors/marginfi.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/errors/marginfi.ts rename to solauto-sdk/src/externalSdks/marginfi/errors/marginfi.ts diff --git a/solauto-sdk/src/marginfi-sdk/index.ts b/solauto-sdk/src/externalSdks/marginfi/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/index.ts rename to solauto-sdk/src/externalSdks/marginfi/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/index.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/index.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountBorrow.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountBorrow.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountBorrow.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountBorrow.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountCloseBalance.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountCloseBalance.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountCloseBalance.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountCloseBalance.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountDeposit.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountDeposit.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountDeposit.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountDeposit.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountEndFlashloan.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountEndFlashloan.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountEndFlashloan.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountEndFlashloan.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountLiquidate.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountLiquidate.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountLiquidate.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountLiquidate.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountRepay.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountRepay.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountRepay.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountRepay.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountSettleEmissions.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountSettleEmissions.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountSettleEmissions.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountSettleEmissions.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountStartFlashloan.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountStartFlashloan.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountStartFlashloan.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountStartFlashloan.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountWithdraw.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountWithdraw.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountWithdraw.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountWithdraw.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingAccountWithdrawEmissions.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountWithdrawEmissions.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingAccountWithdrawEmissions.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingAccountWithdrawEmissions.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAccrueBankInterest.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAccrueBankInterest.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAccrueBankInterest.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAccrueBankInterest.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAddBank.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAddBank.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAddBank.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAddBank.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAddBankWithSeed.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAddBankWithSeed.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolAddBankWithSeed.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolAddBankWithSeed.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolCollectBankFees.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolCollectBankFees.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolCollectBankFees.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolCollectBankFees.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolConfigureBank.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolConfigureBank.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolConfigureBank.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolConfigureBank.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolHandleBankruptcy.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolHandleBankruptcy.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolHandleBankruptcy.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolHandleBankruptcy.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolSetupEmissions.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolSetupEmissions.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolSetupEmissions.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolSetupEmissions.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/lendingPoolUpdateEmissionsParameters.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolUpdateEmissionsParameters.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/lendingPoolUpdateEmissionsParameters.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/lendingPoolUpdateEmissionsParameters.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/marginfiAccountInitialize.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/marginfiAccountInitialize.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/marginfiAccountInitialize.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/marginfiAccountInitialize.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/marginfiGroupConfigure.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/marginfiGroupConfigure.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/marginfiGroupConfigure.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/marginfiGroupConfigure.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/marginfiGroupInitialize.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/marginfiGroupInitialize.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/marginfiGroupInitialize.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/marginfiGroupInitialize.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/setAccountFlag.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/setAccountFlag.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/setAccountFlag.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/setAccountFlag.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/setNewAccountAuthority.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/setNewAccountAuthority.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/setNewAccountAuthority.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/setNewAccountAuthority.ts diff --git a/solauto-sdk/src/marginfi-sdk/instructions/unsetAccountFlag.ts b/solauto-sdk/src/externalSdks/marginfi/instructions/unsetAccountFlag.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/instructions/unsetAccountFlag.ts rename to solauto-sdk/src/externalSdks/marginfi/instructions/unsetAccountFlag.ts diff --git a/solauto-sdk/src/marginfi-sdk/programs/index.ts b/solauto-sdk/src/externalSdks/marginfi/programs/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/programs/index.ts rename to solauto-sdk/src/externalSdks/marginfi/programs/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/programs/marginfi.ts b/solauto-sdk/src/externalSdks/marginfi/programs/marginfi.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/programs/marginfi.ts rename to solauto-sdk/src/externalSdks/marginfi/programs/marginfi.ts diff --git a/solauto-sdk/src/marginfi-sdk/shared/index.ts b/solauto-sdk/src/externalSdks/marginfi/shared/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/shared/index.ts rename to solauto-sdk/src/externalSdks/marginfi/shared/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/accountEventHeader.ts b/solauto-sdk/src/externalSdks/marginfi/types/accountEventHeader.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/accountEventHeader.ts rename to solauto-sdk/src/externalSdks/marginfi/types/accountEventHeader.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/balance.ts b/solauto-sdk/src/externalSdks/marginfi/types/balance.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/balance.ts rename to solauto-sdk/src/externalSdks/marginfi/types/balance.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/balanceDecreaseType.ts b/solauto-sdk/src/externalSdks/marginfi/types/balanceDecreaseType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/balanceDecreaseType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/balanceDecreaseType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/balanceIncreaseType.ts b/solauto-sdk/src/externalSdks/marginfi/types/balanceIncreaseType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/balanceIncreaseType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/balanceIncreaseType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/balanceSide.ts b/solauto-sdk/src/externalSdks/marginfi/types/balanceSide.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/balanceSide.ts rename to solauto-sdk/src/externalSdks/marginfi/types/balanceSide.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/bankConfig.ts b/solauto-sdk/src/externalSdks/marginfi/types/bankConfig.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/bankConfig.ts rename to solauto-sdk/src/externalSdks/marginfi/types/bankConfig.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/bankConfigCompact.ts b/solauto-sdk/src/externalSdks/marginfi/types/bankConfigCompact.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/bankConfigCompact.ts rename to solauto-sdk/src/externalSdks/marginfi/types/bankConfigCompact.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/bankOperationalState.ts b/solauto-sdk/src/externalSdks/marginfi/types/bankOperationalState.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/bankOperationalState.ts rename to solauto-sdk/src/externalSdks/marginfi/types/bankOperationalState.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/bankVaultType.ts b/solauto-sdk/src/externalSdks/marginfi/types/bankVaultType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/bankVaultType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/bankVaultType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/groupEventHeader.ts b/solauto-sdk/src/externalSdks/marginfi/types/groupEventHeader.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/groupEventHeader.ts rename to solauto-sdk/src/externalSdks/marginfi/types/groupEventHeader.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/index.ts b/solauto-sdk/src/externalSdks/marginfi/types/index.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/index.ts rename to solauto-sdk/src/externalSdks/marginfi/types/index.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/interestRateConfig.ts b/solauto-sdk/src/externalSdks/marginfi/types/interestRateConfig.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/interestRateConfig.ts rename to solauto-sdk/src/externalSdks/marginfi/types/interestRateConfig.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/interestRateConfigCompact.ts b/solauto-sdk/src/externalSdks/marginfi/types/interestRateConfigCompact.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/interestRateConfigCompact.ts rename to solauto-sdk/src/externalSdks/marginfi/types/interestRateConfigCompact.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/interestRateConfigOpt.ts b/solauto-sdk/src/externalSdks/marginfi/types/interestRateConfigOpt.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/interestRateConfigOpt.ts rename to solauto-sdk/src/externalSdks/marginfi/types/interestRateConfigOpt.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/lendingAccount.ts b/solauto-sdk/src/externalSdks/marginfi/types/lendingAccount.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/lendingAccount.ts rename to solauto-sdk/src/externalSdks/marginfi/types/lendingAccount.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/liquidationBalances.ts b/solauto-sdk/src/externalSdks/marginfi/types/liquidationBalances.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/liquidationBalances.ts rename to solauto-sdk/src/externalSdks/marginfi/types/liquidationBalances.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/oracleConfig.ts b/solauto-sdk/src/externalSdks/marginfi/types/oracleConfig.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/oracleConfig.ts rename to solauto-sdk/src/externalSdks/marginfi/types/oracleConfig.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/oraclePriceType.ts b/solauto-sdk/src/externalSdks/marginfi/types/oraclePriceType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/oraclePriceType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/oraclePriceType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/oracleSetup.ts b/solauto-sdk/src/externalSdks/marginfi/types/oracleSetup.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/oracleSetup.ts rename to solauto-sdk/src/externalSdks/marginfi/types/oracleSetup.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/priceBias.ts b/solauto-sdk/src/externalSdks/marginfi/types/priceBias.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/priceBias.ts rename to solauto-sdk/src/externalSdks/marginfi/types/priceBias.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/requirementType.ts b/solauto-sdk/src/externalSdks/marginfi/types/requirementType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/requirementType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/requirementType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/riskRequirementType.ts b/solauto-sdk/src/externalSdks/marginfi/types/riskRequirementType.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/riskRequirementType.ts rename to solauto-sdk/src/externalSdks/marginfi/types/riskRequirementType.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/riskTier.ts b/solauto-sdk/src/externalSdks/marginfi/types/riskTier.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/riskTier.ts rename to solauto-sdk/src/externalSdks/marginfi/types/riskTier.ts diff --git a/solauto-sdk/src/marginfi-sdk/types/wrappedI80F48.ts b/solauto-sdk/src/externalSdks/marginfi/types/wrappedI80F48.ts similarity index 100% rename from solauto-sdk/src/marginfi-sdk/types/wrappedI80F48.ts rename to solauto-sdk/src/externalSdks/marginfi/types/wrappedI80F48.ts diff --git a/solauto-sdk/src/pyth-sdk/accounts/index.ts b/solauto-sdk/src/externalSdks/pyth/accounts/index.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/accounts/index.ts rename to solauto-sdk/src/externalSdks/pyth/accounts/index.ts diff --git a/solauto-sdk/src/pyth-sdk/accounts/priceUpdateV2Account.ts b/solauto-sdk/src/externalSdks/pyth/accounts/priceUpdateV2Account.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/accounts/priceUpdateV2Account.ts rename to solauto-sdk/src/externalSdks/pyth/accounts/priceUpdateV2Account.ts diff --git a/solauto-sdk/src/pyth-sdk/index.ts b/solauto-sdk/src/externalSdks/pyth/index.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/index.ts rename to solauto-sdk/src/externalSdks/pyth/index.ts diff --git a/solauto-sdk/src/pyth-sdk/types/index.ts b/solauto-sdk/src/externalSdks/pyth/types/index.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/types/index.ts rename to solauto-sdk/src/externalSdks/pyth/types/index.ts diff --git a/solauto-sdk/src/pyth-sdk/types/priceMessage.ts b/solauto-sdk/src/externalSdks/pyth/types/priceMessage.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/types/priceMessage.ts rename to solauto-sdk/src/externalSdks/pyth/types/priceMessage.ts diff --git a/solauto-sdk/src/pyth-sdk/types/priceUpdateV2.ts b/solauto-sdk/src/externalSdks/pyth/types/priceUpdateV2.ts similarity index 100% rename from solauto-sdk/src/pyth-sdk/types/priceUpdateV2.ts rename to solauto-sdk/src/externalSdks/pyth/types/priceUpdateV2.ts diff --git a/solauto-sdk/src/generated/instructions/marginfiProtocolInteraction.ts b/solauto-sdk/src/generated/instructions/marginfiProtocolInteraction.ts index 5bc2a629..459dbf6a 100644 --- a/solauto-sdk/src/generated/instructions/marginfiProtocolInteraction.ts +++ b/solauto-sdk/src/generated/instructions/marginfiProtocolInteraction.ts @@ -139,7 +139,7 @@ export function marginfiProtocolInteraction( }, marginfiGroup: { index: 7, - isWritable: false as boolean, + isWritable: true as boolean, value: input.marginfiGroup ?? null, }, marginfiAccount: { diff --git a/solauto-sdk/src/generated/instructions/marginfiRebalance.ts b/solauto-sdk/src/generated/instructions/marginfiRebalance.ts index d7330fd4..d7e87e58 100644 --- a/solauto-sdk/src/generated/instructions/marginfiRebalance.ts +++ b/solauto-sdk/src/generated/instructions/marginfiRebalance.ts @@ -188,7 +188,7 @@ export function marginfiRebalance( }, marginfiGroup: { index: 10, - isWritable: false as boolean, + isWritable: true as boolean, value: input.marginfiGroup ?? null, }, marginfiAccount: { diff --git a/solauto-sdk/src/generated/types/solautoAction.ts b/solauto-sdk/src/generated/types/solautoAction.ts index 15473529..9e766e89 100644 --- a/solauto-sdk/src/generated/types/solautoAction.ts +++ b/solauto-sdk/src/generated/types/solautoAction.ts @@ -90,7 +90,7 @@ export function solautoAction( data?: any ): Extract { return Array.isArray(data) - ? { __kind: kind, fields: data } + ? { __kind: kind, fields: data } as Extract : { __kind: kind, ...(data ?? {}) }; } export function isSolautoAction( diff --git a/solauto-sdk/src/generated/types/tokenBalanceAmount.ts b/solauto-sdk/src/generated/types/tokenBalanceAmount.ts index d5c8d96b..8606e01a 100644 --- a/solauto-sdk/src/generated/types/tokenBalanceAmount.ts +++ b/solauto-sdk/src/generated/types/tokenBalanceAmount.ts @@ -56,7 +56,7 @@ export function tokenBalanceAmount( data?: any ): Extract { return Array.isArray(data) - ? { __kind: kind, fields: data } + ? { __kind: kind, fields: data } as Extract : { __kind: kind, ...(data ?? {}) }; } export function isTokenBalanceAmount( diff --git a/solauto-sdk/src/idls/switchboard.json b/solauto-sdk/src/idls/switchboard.json deleted file mode 100644 index 6996121a..00000000 --- a/solauto-sdk/src/idls/switchboard.json +++ /dev/null @@ -1,1949 +0,0 @@ -{ - "address": "SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv", - "metadata": { - "name": "sb_on_demand", - "version": "0.1.0", - "spec": "0.1.0", - "description": "Created with Anchor" - }, - "instructions": [ - { - "name": "guardian_quote_verify", - "discriminator": [168, 36, 93, 156, 157, 150, 148, 45], - "accounts": [ - { "name": "guardian", "writable": true }, - { "name": "oracle", "writable": true }, - { "name": "authority", "signer": true, "relations": ["oracle"] }, - { "name": "guardian_queue", "writable": true, "relations": ["state"] }, - { "name": "state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianQuoteVerifyParams" } } - } - ] - }, - { - "name": "guardian_register", - "discriminator": [159, 76, 53, 117, 219, 29, 116, 135], - "accounts": [ - { "name": "oracle", "writable": true }, - { "name": "state" }, - { "name": "guardian_queue", "relations": ["state"] }, - { "name": "authority", "signer": true, "relations": ["state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianRegisterParams" } } - } - ] - }, - { - "name": "guardian_unregister", - "discriminator": [215, 19, 61, 120, 155, 224, 120, 60], - "accounts": [ - { "name": "oracle", "writable": true }, - { "name": "state" }, - { "name": "guardian_queue", "writable": true, "relations": ["state"] }, - { "name": "authority", "signer": true, "relations": ["state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "GuardianUnregisterParams" } } - } - ] - }, - { - "name": "oracle_heartbeat", - "discriminator": [10, 175, 217, 130, 111, 35, 117, 54], - "accounts": [ - { "name": "oracle", "writable": true }, - { - "name": "oracle_stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "oracle_signer", "signer": true }, - { - "name": "queue", - "writable": true, - "relations": ["oracle", "gc_node"] - }, - { "name": "gc_node", "writable": true }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "queue_escrow", "writable": true }, - { - "name": "stake_program", - "address": "SBSTk6t52R89MmCdD739Rdd97HdbTQUFHe41vCX7pTt", - "relations": ["program_state"] - }, - { "name": "delegation_pool", "writable": true }, - { "name": "delegation_group", "writable": true } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleHeartbeatParams" } } - } - ] - }, - { - "name": "oracle_init", - "discriminator": [21, 158, 66, 65, 60, 221, 148, 61], - "accounts": [ - { "name": "oracle", "writable": true, "signer": true }, - { - "name": "oracle_stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool", "relations": ["program_state"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleInitParams" } } - } - ] - }, - { - "name": "oracle_set_configs", - "discriminator": [129, 111, 223, 4, 191, 188, 70, 180], - "accounts": [ - { "name": "oracle" }, - { "name": "authority", "signer": true, "relations": ["oracle"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleSetConfigsParams" } } - } - ] - }, - { - "name": "oracle_update_delegation", - "discriminator": [46, 198, 113, 223, 160, 189, 118, 90], - "accounts": [ - { "name": "oracle", "writable": true }, - { - "name": "oracle_stats", - "pda": { - "seeds": [ - { - "kind": "const", - "value": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "queue", "relations": ["oracle"] }, - { "name": "authority", "signer": true }, - { "name": "program_state", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { "name": "delegation_pool", "writable": true }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "switch_mint" }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "wsol_vault", "writable": true }, - { "name": "switch_vault", "writable": true }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool" }, - { "name": "delegation_group" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "OracleUpdateDelegationParams" } } - } - ] - }, - { - "name": "permission_set", - "discriminator": [211, 122, 185, 120, 129, 182, 55, 103], - "accounts": [ - { "name": "authority", "signer": true }, - { "name": "granter" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PermissionSetParams" } } - } - ] - }, - { - "name": "pull_feed_close", - "discriminator": [19, 134, 50, 142, 177, 215, 196, 83], - "accounts": [ - { "name": "pull_feed", "writable": true }, - { "name": "reward_escrow", "writable": true }, - { "name": "lut", "writable": true }, - { "name": "lut_signer" }, - { "name": "payer", "writable": true, "signer": true }, - { "name": "state" }, - { - "name": "authority", - "writable": true, - "signer": true, - "relations": ["pull_feed"] - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedCloseParams" } } - } - ] - }, - { - "name": "pull_feed_init", - "discriminator": [198, 130, 53, 198, 235, 61, 143, 40], - "accounts": [ - { "name": "pull_feed", "writable": true, "signer": true }, - { "name": "queue" }, - { "name": "authority" }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "program_state" }, - { - "name": "reward_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "pull_feed" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "wrapped_sol_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedInitParams" } } - } - ] - }, - { - "name": "pull_feed_set_configs", - "discriminator": [217, 45, 11, 246, 64, 26, 82, 168], - "accounts": [ - { "name": "pull_feed", "writable": true }, - { "name": "authority", "signer": true, "relations": ["pull_feed"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSetConfigsParams" } } - } - ] - }, - { - "name": "pull_feed_submit_response", - "discriminator": [150, 22, 215, 166, 143, 93, 48, 137], - "accounts": [ - { "name": "feed", "writable": true }, - { "name": "queue", "relations": ["feed"] }, - { "name": "program_state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_vault", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "token_mint", - "address": "So11111111111111111111111111111111111111112" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSubmitResponseParams" } } - } - ] - }, - { - "name": "pull_feed_submit_response_many", - "discriminator": [47, 156, 45, 25, 200, 71, 37, 215], - "accounts": [ - { "name": "queue" }, - { "name": "program_state" }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_vault", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "token_mint", - "address": "So11111111111111111111111111111111111111112" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "PullFeedSubmitResponseManyParams" } } - } - ] - }, - { - "name": "queue_add_mr_enclave", - "discriminator": [199, 255, 81, 50, 60, 133, 171, 138], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "program_authority" }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueAddMrEnclaveParams" } } - } - ] - }, - { - "name": "queue_allow_subsidies", - "discriminator": [94, 203, 82, 157, 188, 138, 202, 108], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true, "relations": ["state"] }, - { "name": "state", "writable": true } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueAllowSubsidiesParams" } } - } - ] - }, - { - "name": "queue_garbage_collect", - "discriminator": [187, 208, 104, 247, 16, 91, 96, 98], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "oracle", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueGarbageCollectParams" } } - } - ] - }, - { - "name": "queue_init", - "discriminator": [144, 18, 99, 145, 133, 27, 207, 13], - "accounts": [ - { "name": "queue", "writable": true, "signer": true }, - { - "name": "queue_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "queue" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "native_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { "name": "authority" }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "native_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" }, - { "name": "lut_signer", "writable": true }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueInitParams" } } - } - ] - }, - { - "name": "queue_init_delegation_group", - "discriminator": [239, 146, 75, 158, 20, 166, 159, 14], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "program_state" }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - }, - { "name": "delegation_group", "writable": true }, - { "name": "stake_program", "relations": ["program_state"] }, - { "name": "stake_pool" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueInitDelegationGroupParams" } } - } - ] - }, - { - "name": "queue_remove_mr_enclave", - "discriminator": [3, 64, 135, 33, 190, 133, 68, 252], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "program_authority" }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueRemoveMrEnclaveParams" } } - } - ] - }, - { - "name": "queue_set_configs", - "discriminator": [54, 183, 243, 199, 49, 103, 142, 48], - "accounts": [ - { "name": "queue", "writable": true }, - { "name": "authority", "signer": true }, - { "name": "state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "QueueSetConfigsParams" } } - } - ] - }, - { - "name": "randomness_commit", - "discriminator": [52, 170, 152, 201, 179, 133, 242, 141], - "accounts": [ - { "name": "randomness", "writable": true }, - { "name": "queue", "relations": ["randomness", "oracle"] }, - { "name": "oracle", "writable": true }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { "name": "authority", "signer": true, "relations": ["randomness"] } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessCommitParams" } } - } - ] - }, - { - "name": "randomness_init", - "discriminator": [9, 9, 204, 33, 50, 116, 113, 15], - "accounts": [ - { "name": "randomness", "writable": true, "signer": true }, - { - "name": "reward_escrow", - "writable": true, - "pda": { - "seeds": [ - { "kind": "account", "path": "randomness" }, - { - "kind": "const", - "value": [ - 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, - 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, - 245, 133, 126, 255, 0, 169 - ] - }, - { "kind": "account", "path": "wrapped_sol_mint" } - ], - "program": { - "kind": "const", - "value": [ - 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142, - 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216, - 219, 233, 248, 89 - ] - } - } - }, - { "name": "authority", "signer": true }, - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "associated_token_program", - "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" }, - { "name": "lut_signer" }, - { "name": "lut", "writable": true }, - { - "name": "address_lookup_table_program", - "address": "AddressLookupTab1e1111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessInitParams" } } - } - ] - }, - { - "name": "randomness_reveal", - "discriminator": [197, 181, 187, 10, 30, 58, 20, 73], - "accounts": [ - { "name": "randomness", "writable": true }, - { "name": "oracle", "relations": ["randomness"] }, - { "name": "queue", "relations": ["oracle"] }, - { - "name": "stats", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [ - 79, 114, 97, 99, 108, 101, 82, 97, 110, 100, 111, 109, 110, - 101, 115, 115, 83, 116, 97, 116, 115 - ] - }, - { "kind": "account", "path": "oracle" } - ] - } - }, - { "name": "authority", "signer": true, "relations": ["randomness"] }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "recent_slothashes", - "address": "SysvarS1otHashes111111111111111111111111111" - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - }, - { "name": "reward_escrow", "writable": true }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "wrapped_sol_mint", - "address": "So11111111111111111111111111111111111111112" - }, - { "name": "program_state" } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "RandomnessRevealParams" } } - } - ] - }, - { - "name": "state_init", - "discriminator": [103, 241, 106, 190, 217, 153, 87, 105], - "accounts": [ - { - "name": "state", - "writable": true, - "pda": { - "seeds": [{ "kind": "const", "value": [83, 84, 65, 84, 69] }] - } - }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "StateInitParams" } } - } - ] - }, - { - "name": "state_set_configs", - "discriminator": [40, 98, 76, 37, 206, 9, 47, 144], - "accounts": [ - { "name": "state", "writable": true }, - { "name": "authority", "signer": true, "relations": ["state"] }, - { "name": "queue", "writable": true }, - { "name": "payer", "writable": true, "signer": true }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "params", - "type": { "defined": { "name": "StateSetConfigsParams" } } - } - ] - } - ], - "accounts": [ - { - "name": "OracleAccountData", - "discriminator": [128, 30, 16, 241, 170, 73, 55, 54] - }, - { - "name": "OracleStatsAccountData", - "discriminator": [180, 157, 178, 234, 240, 27, 152, 179] - }, - { - "name": "PullFeedAccountData", - "discriminator": [196, 27, 108, 196, 10, 215, 219, 40] - }, - { - "name": "QueueAccountData", - "discriminator": [217, 194, 55, 127, 184, 83, 138, 1] - }, - { - "name": "RandomnessAccountData", - "discriminator": [10, 66, 229, 135, 220, 239, 217, 114] - }, - { "name": "State", "discriminator": [216, 146, 107, 94, 104, 75, 182, 177] } - ], - "events": [ - { - "name": "CostWhitelistEvent", - "discriminator": [56, 107, 191, 127, 116, 6, 138, 149] - }, - { - "name": "GarbageCollectionEvent", - "discriminator": [232, 235, 2, 188, 8, 143, 145, 237] - }, - { - "name": "GuardianQuoteVerifyEvent", - "discriminator": [31, 37, 39, 6, 214, 186, 33, 115] - }, - { - "name": "OracleHeartbeatEvent", - "discriminator": [52, 29, 166, 2, 94, 7, 188, 13] - }, - { - "name": "OracleInitEvent", - "discriminator": [89, 193, 219, 200, 1, 83, 167, 24] - }, - { - "name": "OracleQuoteOverrideEvent", - "discriminator": [78, 204, 191, 210, 164, 196, 244, 65] - }, - { - "name": "OracleQuoteRotateEvent", - "discriminator": [26, 189, 196, 192, 225, 127, 26, 228] - }, - { - "name": "OracleQuoteVerifyRequestEvent", - "discriminator": [203, 209, 79, 0, 20, 71, 226, 202] - }, - { - "name": "PermissionSetEvent", - "discriminator": [148, 86, 123, 0, 102, 20, 119, 206] - }, - { - "name": "PullFeedErrorValueEvent", - "discriminator": [225, 80, 192, 95, 14, 12, 83, 192] - }, - { - "name": "PullFeedValueEvents", - "discriminator": [86, 7, 231, 28, 122, 161, 117, 69] - }, - { - "name": "QueueAddMrEnclaveEvent", - "discriminator": [170, 186, 175, 38, 216, 51, 69, 175] - }, - { - "name": "QueueInitEvent", - "discriminator": [44, 137, 99, 227, 107, 8, 30, 105] - }, - { - "name": "QueueRemoveMrEnclaveEvent", - "discriminator": [4, 105, 196, 60, 84, 122, 203, 196] - }, - { - "name": "RandomnessCommitEvent", - "discriminator": [88, 60, 172, 90, 112, 10, 206, 147] - } - ], - "errors": [ - { "code": 6000, "name": "GenericError" }, - { "code": 6001, "name": "InvalidQuote" }, - { "code": 6002, "name": "InsufficientQueue" }, - { "code": 6003, "name": "QueueFull" }, - { "code": 6004, "name": "InvalidEnclaveSigner" }, - { "code": 6005, "name": "InvalidSigner" }, - { "code": 6006, "name": "MrEnclaveAlreadyExists" }, - { "code": 6007, "name": "MrEnclaveAtCapacity" }, - { "code": 6008, "name": "MrEnclaveDoesntExist" }, - { "code": 6009, "name": "PermissionDenied" }, - { "code": 6010, "name": "InvalidQueue" }, - { "code": 6011, "name": "IncorrectMrEnclave" }, - { "code": 6012, "name": "InvalidAuthority" }, - { "code": 6013, "name": "InvalidMrEnclave" }, - { "code": 6014, "name": "InvalidTimestamp" }, - { "code": 6015, "name": "InvalidOracleIdx" }, - { "code": 6016, "name": "InvalidSecpSignature" }, - { "code": 6017, "name": "InvalidGuardianQueue" }, - { "code": 6018, "name": "InvalidIndex" }, - { "code": 6019, "name": "InvalidOracleQueue" }, - { "code": 6020, "name": "InvalidPermission" }, - { "code": 6021, "name": "InvalidePermissionedAccount" }, - { "code": 6022, "name": "InvalidEpochRotate" }, - { "code": 6023, "name": "InvalidEpochFinalize" }, - { "code": 6024, "name": "InvalidEscrow" }, - { "code": 6025, "name": "IllegalOracle" }, - { "code": 6026, "name": "IllegalExecuteAttempt" }, - { "code": 6027, "name": "IllegalFeedValue" }, - { "code": 6028, "name": "InvalidOracleFeedStats" }, - { "code": 6029, "name": "InvalidStateAuthority" }, - { "code": 6030, "name": "NotEnoughSamples" }, - { "code": 6031, "name": "OracleIsVerified" }, - { "code": 6032, "name": "QueueIsEmpty" }, - { "code": 6033, "name": "SecpRecoverFailure" }, - { "code": 6034, "name": "StaleSample" }, - { "code": 6035, "name": "SwitchboardRandomnessTooOld" }, - { "code": 6036, "name": "EpochIdMismatch" }, - { "code": 6037, "name": "GuardianAlreadyVoted" }, - { "code": 6038, "name": "RandomnessNotRequested" }, - { "code": 6039, "name": "InvalidSlotNumber" }, - { "code": 6040, "name": "RandomnessOracleKeyExpired" }, - { "code": 6041, "name": "InvalidAdvisory" }, - { "code": 6042, "name": "InvalidOracleStats" }, - { "code": 6043, "name": "InvalidStakeProgram" }, - { "code": 6044, "name": "InvalidStakePool" }, - { "code": 6045, "name": "InvalidDelegationPool" }, - { "code": 6046, "name": "UnparsableAccount" }, - { "code": 6047, "name": "InvalidInstruction" }, - { "code": 6048, "name": "OracleAlreadyVerified" }, - { "code": 6049, "name": "GuardianNotVerified" }, - { "code": 6050, "name": "InvalidConstraint" }, - { "code": 6051, "name": "InvalidDelegationGroup" }, - { "code": 6052, "name": "OracleKeyNotFound" }, - { "code": 6053, "name": "GuardianReregisterAttempt" } - ], - "types": [ - { - "name": "CompactResult", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "std_dev", - "docs": [ - "The standard deviation of the submissions needed for quorom size" - ], - "type": "f32" - }, - { - "name": "mean", - "docs": ["The mean of the submissions needed for quorom size"], - "type": "f32" - }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - } - ] - } - }, - { - "name": "CostWhitelistEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "feeds", "type": { "vec": "pubkey" } }, - { "name": "reward", "type": "u32" } - ] - } - }, - { - "name": "CurrentResult", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "docs": [ - "The median value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "std_dev", - "docs": [ - "The standard deviation of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "mean", - "docs": ["The mean of the submissions needed for quorom size"], - "type": "i128" - }, - { - "name": "range", - "docs": ["The range of the submissions needed for quorom size"], - "type": "i128" - }, - { - "name": "min_value", - "docs": [ - "The minimum value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "max_value", - "docs": [ - "The maximum value of the submissions needed for quorom size" - ], - "type": "i128" - }, - { - "name": "num_samples", - "docs": ["The number of samples used to calculate this result"], - "type": "u8" - }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - }, - { - "name": "min_slot", - "docs": [ - "The slot at which the first considered submission was made" - ], - "type": "u64" - }, - { - "name": "max_slot", - "docs": [ - "The slot at which the last considered submission was made" - ], - "type": "u64" - } - ] - } - }, - { - "name": "GarbageCollectionEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "GuardianQuoteVerifyEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "quote", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "GuardianQuoteVerifyParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "timestamp", "type": "i64" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } }, - { "name": "_reserved1", "type": "u32" }, - { "name": "ed25519_key", "type": "pubkey" }, - { "name": "secp256k1_key", "type": { "array": ["u8", 64] } }, - { "name": "slot", "type": "u64" }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "advisories", "type": { "vec": "u32" } } - ] - } - }, - { - "name": "GuardianRegisterParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "GuardianUnregisterParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "MegaSlotInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" }, - { "name": "perf_goal", "type": "i64" }, - { "name": "current_signature_count", "type": "i64" } - ] - } - }, - { - "name": "MultiSubmission", - "type": { - "kind": "struct", - "fields": [ - { "name": "values", "type": { "vec": "i128" } }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" } - ] - } - }, - { - "name": "OracleAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "enclave", - "docs": ["Represents the state of the quote verifiers enclave."], - "type": { "defined": { "name": "Quote" } } - }, - { - "name": "authority", - "docs": [ - "The authority of the EnclaveAccount which is permitted to make account changes." - ], - "type": "pubkey" - }, - { - "name": "queue", - "docs": [ - "Queue used for attestation to verify a MRENCLAVE measurement." - ], - "type": "pubkey" - }, - { - "name": "created_at", - "docs": ["The unix timestamp when the quote was created."], - "type": "i64" - }, - { - "name": "last_heartbeat", - "docs": ["The last time the quote heartbeated on-chain."], - "type": "i64" - }, - { "name": "secp_authority", "type": { "array": ["u8", 64] } }, - { - "name": "gateway_uri", - "docs": ["URI location of the verifier's gateway."], - "type": { "array": ["u8", 64] } - }, - { "name": "permissions", "type": "u64" }, - { - "name": "is_on_queue", - "docs": [ - "Whether the quote is located on the AttestationQueues buffer." - ], - "type": "u8" - }, - { "name": "_padding1", "type": { "array": ["u8", 7] } }, - { "name": "lut_slot", "type": "u64" }, - { "name": "last_reward_epoch", "type": "u64" }, - { "name": "_ebuf4", "type": { "array": ["u8", 16] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 1024] } } - ] - } - }, - { - "name": "OracleEpochInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "id", "type": "u64" }, - { "name": "reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" }, - { "name": "slash_score", "type": "u64" }, - { "name": "reward_score", "type": "u64" }, - { "name": "stake_score", "type": "u64" } - ] - } - }, - { - "name": "OracleHeartbeatEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "OracleHeartbeatParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "gateway_uri", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleInitEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "oracle", "type": "pubkey" }] - } - }, - { - "name": "OracleInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "recent_slot", "type": "u64" }, - { "name": "authority", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { - "name": "secp_authority", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleQuoteOverrideEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "oracle", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" } - ] - } - }, - { - "name": "OracleQuoteRotateEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "oracle", "type": "pubkey" }] - } - }, - { - "name": "OracleQuoteVerifyRequestEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "quote", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "OracleSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "new_authority", "type": { "option": "pubkey" } }, - { - "name": "new_secp_authority", - "type": { "option": { "array": ["u8", 64] } } - } - ] - } - }, - { - "name": "OracleStatsAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "owner", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" }, - { - "name": "finalized_epoch", - "docs": [ - "The last epoch that has completed. cleared after registered with the", - "staking program." - ], - "type": { "defined": { "name": "OracleEpochInfo" } } - }, - { - "name": "current_epoch", - "docs": [ - "The current epoch info being used by the oracle. for stake. Will moved", - "to finalized_epoch as soon as the epoch is over." - ], - "type": { "defined": { "name": "OracleEpochInfo" } } - }, - { - "name": "mega_slot_info", - "type": { "defined": { "name": "MegaSlotInfo" } } - }, - { "name": "last_transfer_slot", "type": "u64" }, - { "name": "bump", "type": "u8" }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "_ebuf", - "docs": ["Reserved."], - "type": { "array": ["u8", 1024] } - } - ] - } - }, - { - "name": "OracleSubmission", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "oracle", - "docs": ["The public key of the oracle that submitted this value."], - "type": "pubkey" - }, - { - "name": "slot", - "docs": ["The slot at which this value was signed."], - "type": "u64" - }, - { "name": "padding1", "type": { "array": ["u8", 8] } }, - { - "name": "value", - "docs": ["The value that was submitted."], - "type": "i128" - } - ] - } - }, - { - "name": "OracleUpdateDelegationParams", - "type": { - "kind": "struct", - "fields": [{ "name": "_reserved1", "type": "u64" }] - } - }, - { - "name": "PermissionSetEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "permission", "type": "pubkey" }] - } - }, - { - "name": "PermissionSetParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "permission", "type": "u8" }, - { "name": "enable", "type": "bool" } - ] - } - }, - { - "name": "PullFeedAccountData", - "docs": ["A representation of the data in a pull feed account."], - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "submissions", - "docs": ["The oracle submissions for this feed."], - "type": { - "array": [{ "defined": { "name": "OracleSubmission" } }, 32] - } - }, - { - "name": "authority", - "docs": [ - "The public key of the authority that can update the feed hash that", - "this account will use for registering updates." - ], - "type": "pubkey" - }, - { - "name": "queue", - "docs": [ - "The public key of the queue which oracles must be bound to in order to", - "submit data to this feed." - ], - "type": "pubkey" - }, - { - "name": "feed_hash", - "docs": [ - "SHA-256 hash of the job schema oracles will execute to produce data", - "for this feed." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "initialized_at", - "docs": ["The slot at which this account was initialized."], - "type": "i64" - }, - { "name": "permissions", "type": "u64" }, - { "name": "max_variance", "type": "u64" }, - { "name": "min_responses", "type": "u32" }, - { "name": "name", "type": { "array": ["u8", 32] } }, - { "name": "padding1", "type": { "array": ["u8", 2] } }, - { "name": "historical_result_idx", "type": "u8" }, - { "name": "min_sample_size", "type": "u8" }, - { "name": "last_update_timestamp", "type": "i64" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "_reserved1", "type": { "array": ["u8", 32] } }, - { - "name": "result", - "type": { "defined": { "name": "CurrentResult" } } - }, - { "name": "max_staleness", "type": "u32" }, - { "name": "padding2", "type": { "array": ["u8", 12] } }, - { - "name": "historical_results", - "type": { - "array": [{ "defined": { "name": "CompactResult" } }, 32] - } - }, - { "name": "_ebuf4", "type": { "array": ["u8", 8] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } } - ] - } - }, - { - "name": "PullFeedCloseParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "PullFeedErrorValueEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "feed", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" } - ] - } - }, - { - "name": "PullFeedInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "feed_hash", "type": { "array": ["u8", 32] } }, - { "name": "max_variance", "type": "u64" }, - { "name": "min_responses", "type": "u32" }, - { "name": "name", "type": { "array": ["u8", 32] } }, - { "name": "recent_slot", "type": "u64" }, - { "name": "ipfs_hash", "type": { "array": ["u8", 32] } }, - { "name": "min_sample_size", "type": "u8" }, - { "name": "max_staleness", "type": "u32" } - ] - } - }, - { - "name": "PullFeedSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "feed_hash", - "type": { "option": { "array": ["u8", 32] } } - }, - { "name": "authority", "type": { "option": "pubkey" } }, - { "name": "max_variance", "type": { "option": "u64" } }, - { "name": "min_responses", "type": { "option": "u32" } }, - { "name": "name", "type": { "option": { "array": ["u8", 32] } } }, - { - "name": "ipfs_hash", - "type": { "option": { "array": ["u8", 32] } } - }, - { "name": "min_sample_size", "type": { "option": "u8" } }, - { "name": "max_staleness", "type": { "option": "u32" } } - ] - } - }, - { - "name": "PullFeedSubmitResponseManyParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "slot", "type": "u64" }, - { - "name": "submissions", - "type": { "vec": { "defined": { "name": "MultiSubmission" } } } - } - ] - } - }, - { - "name": "PullFeedSubmitResponseParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "slot", "type": "u64" }, - { - "name": "submissions", - "type": { "vec": { "defined": { "name": "Submission" } } } - } - ] - } - }, - { - "name": "PullFeedValueEvents", - "type": { - "kind": "struct", - "fields": [ - { "name": "feeds", "type": { "vec": "pubkey" } }, - { "name": "oracles", "type": { "vec": "pubkey" } }, - { "name": "values", "type": { "vec": { "vec": "i128" } } }, - { "name": "reward", "type": "u32" } - ] - } - }, - { - "name": "QueueAccountData", - "docs": [ - "An Queue represents a round-robin queue of oracle oracles who attest on-chain", - "whether a Switchboard Function was executed within an enclave against an expected set of", - "enclave measurements.", - "", - "For an oracle to join the queue, the oracle must first submit their enclave quote on-chain and", - "wait for an existing oracle to attest their quote. If the oracle's quote matches an expected", - "measurement within the queues mr_enclaves config, it is granted permissions and will start", - "being assigned update requests." - ], - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", - "docs": [ - "The address of the authority which is permitted to add/remove allowed enclave measurements." - ], - "type": "pubkey" - }, - { - "name": "mr_enclaves", - "docs": ["Allowed enclave measurements."], - "type": { "array": [{ "array": ["u8", 32] }, 32] } - }, - { - "name": "oracle_keys", - "docs": [ - "The addresses of the quote oracles who have a valid", - "verification status and have heartbeated on-chain recently." - ], - "type": { "array": ["pubkey", 128] } - }, - { - "name": "max_quote_verification_age", - "docs": [ - "The maximum allowable time until a EnclaveAccount needs to be re-verified on-chain." - ], - "type": "i64" - }, - { - "name": "last_heartbeat", - "docs": [ - "The unix timestamp when the last quote oracle heartbeated on-chain." - ], - "type": "i64" - }, - { "name": "node_timeout", "type": "i64" }, - { - "name": "oracle_min_stake", - "docs": [ - "The minimum number of lamports a quote oracle needs to lock-up in order to heartbeat and verify other quotes." - ], - "type": "u64" - }, - { "name": "allow_authority_override_after", "type": "i64" }, - { - "name": "mr_enclaves_len", - "docs": ["The number of allowed enclave measurements."], - "type": "u32" - }, - { - "name": "oracle_keys_len", - "docs": [ - "The length of valid quote oracles for the given attestation queue." - ], - "type": "u32" - }, - { - "name": "reward", - "docs": [ - "The reward paid to quote oracles for attesting on-chain." - ], - "type": "u32" - }, - { - "name": "curr_idx", - "docs": [ - "Incrementer used to track the current quote oracle permitted to run any available functions." - ], - "type": "u32" - }, - { - "name": "gc_idx", - "docs": [ - "Incrementer used to garbage collect and remove stale quote oracles." - ], - "type": "u32" - }, - { "name": "require_authority_heartbeat_permission", "type": "u8" }, - { "name": "require_authority_verify_permission", "type": "u8" }, - { "name": "require_usage_permissions", "type": "u8" }, - { "name": "signer_bump", "type": "u8" }, - { "name": "mint", "type": "pubkey" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "allow_subsidies", "type": "u8" }, - { - "name": "_ebuf6", - "docs": ["Reserved."], - "type": { "array": ["u8", 23] } - }, - { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 512] } } - ] - } - }, - { - "name": "QueueAddMrEnclaveEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "queue", "type": "pubkey" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "QueueAddMrEnclaveParams", - "type": { - "kind": "struct", - "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] - } - }, - { - "name": "QueueAllowSubsidiesParams", - "type": { - "kind": "struct", - "fields": [{ "name": "allow_subsidies", "type": "u8" }] - } - }, - { - "name": "QueueGarbageCollectParams", - "type": { "kind": "struct", "fields": [{ "name": "idx", "type": "u32" }] } - }, - { - "name": "QueueInitDelegationGroupParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "QueueInitEvent", - "type": { - "kind": "struct", - "fields": [{ "name": "queue", "type": "pubkey" }] - } - }, - { - "name": "QueueInitParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "allow_authority_override_after", "type": "u32" }, - { "name": "require_authority_heartbeat_permission", "type": "bool" }, - { "name": "require_usage_permissions", "type": "bool" }, - { "name": "max_quote_verification_age", "type": "u32" }, - { "name": "reward", "type": "u32" }, - { "name": "node_timeout", "type": "u32" }, - { "name": "recent_slot", "type": "u64" } - ] - } - }, - { - "name": "QueueRemoveMrEnclaveEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "queue", "type": "pubkey" }, - { "name": "mr_enclave", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "QueueRemoveMrEnclaveParams", - "type": { - "kind": "struct", - "fields": [{ "name": "mr_enclave", "type": { "array": ["u8", 32] } }] - } - }, - { - "name": "QueueSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "authority", "type": { "option": "pubkey" } }, - { "name": "reward", "type": { "option": "u32" } }, - { "name": "node_timeout", "type": { "option": "i64" } } - ] - } - }, - { - "name": "Quote", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { - "name": "enclave_signer", - "docs": ["The address of the signer generated within an enclave."], - "type": "pubkey" - }, - { - "name": "mr_enclave", - "docs": [ - "The quotes MRENCLAVE measurement dictating the contents of the secure enclave." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "verification_status", - "docs": ["The VerificationStatus of the quote."], - "type": "u8" - }, - { "name": "padding1", "type": { "array": ["u8", 7] } }, - { - "name": "verification_timestamp", - "docs": ["The unix timestamp when the quote was last verified."], - "type": "i64" - }, - { - "name": "valid_until", - "docs": [ - "The unix timestamp when the quotes verification status expires." - ], - "type": "i64" - }, - { - "name": "quote_registry", - "docs": [ - "The off-chain registry where the verifiers quote can be located." - ], - "type": { "array": ["u8", 32] } - }, - { - "name": "registry_key", - "docs": [ - "Key to lookup the buffer data on IPFS or an alternative decentralized storage solution." - ], - "type": { "array": ["u8", 64] } - }, - { - "name": "secp256k1_signer", - "docs": [ - "The secp256k1 public key of the enclave signer. Derived from the enclave_signer." - ], - "type": { "array": ["u8", 64] } - }, - { "name": "last_ed25519_signer", "type": "pubkey" }, - { "name": "last_secp256k1_signer", "type": { "array": ["u8", 64] } }, - { "name": "last_rotate_slot", "type": "u64" }, - { "name": "guardian_approvers", "type": { "array": ["pubkey", 64] } }, - { "name": "guardian_approvers_len", "type": "u8" }, - { "name": "padding2", "type": { "array": ["u8", 7] } }, - { "name": "staging_ed25519_signer", "type": "pubkey" }, - { - "name": "staging_secp256k1_signer", - "type": { "array": ["u8", 64] } - }, - { - "name": "_ebuf4", - "docs": ["Reserved."], - "type": { "array": ["u8", 32] } - }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 256] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 512] } } - ] - } - }, - { - "name": "RandomnessAccountData", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "authority", "type": "pubkey" }, - { "name": "queue", "type": "pubkey" }, - { "name": "seed_slothash", "type": { "array": ["u8", 32] } }, - { "name": "seed_slot", "type": "u64" }, - { "name": "oracle", "type": "pubkey" }, - { "name": "reveal_slot", "type": "u64" }, - { "name": "value", "type": { "array": ["u8", 32] } }, - { "name": "lut_slot", "type": "u64" }, - { "name": "_ebuf3", "type": { "array": ["u8", 24] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf1", "type": { "array": ["u8", 128] } }, - { - "name": "active_secp256k1_signer", - "type": { "array": ["u8", 64] } - }, - { "name": "active_secp256k1_expiration", "type": "i64" } - ] - } - }, - { - "name": "RandomnessCommitEvent", - "type": { - "kind": "struct", - "fields": [ - { "name": "randomness_account", "type": "pubkey" }, - { "name": "oracle", "type": "pubkey" }, - { "name": "slot", "type": "u64" }, - { "name": "slothash", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "RandomnessCommitParams", - "type": { "kind": "struct", "fields": [] } - }, - { - "name": "RandomnessInitParams", - "type": { - "kind": "struct", - "fields": [{ "name": "recent_slot", "type": "u64" }] - } - }, - { - "name": "RandomnessRevealParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "value", "type": { "array": ["u8", 32] } } - ] - } - }, - { - "name": "State", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "bump", "type": "u8" }, - { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, - { "name": "enable_staking", "type": "u8" }, - { "name": "padding1", "type": { "array": ["u8", 5] } }, - { "name": "authority", "type": "pubkey" }, - { "name": "guardian_queue", "type": "pubkey" }, - { "name": "reserved1", "type": "u64" }, - { "name": "epoch_length", "type": "u64" }, - { - "name": "current_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { - "name": "next_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { - "name": "finalized_epoch", - "type": { "defined": { "name": "StateEpochInfo" } } - }, - { "name": "stake_pool", "type": "pubkey" }, - { "name": "stake_program", "type": "pubkey" }, - { "name": "switch_mint", "type": "pubkey" }, - { "name": "sgx_advisories", "type": { "array": ["u16", 32] } }, - { "name": "advisories_len", "type": "u8" }, - { "name": "padding2", "type": "u8" }, - { "name": "flat_reward_cut_percentage", "type": "u8" }, - { "name": "enable_slashing", "type": "u8" }, - { "name": "subsidy_amount", "type": "u32" }, - { "name": "lut_slot", "type": "u64" }, - { "name": "base_reward", "type": "u32" }, - { "name": "_ebuf6", "type": { "array": ["u8", 28] } }, - { "name": "_ebuf5", "type": { "array": ["u8", 32] } }, - { "name": "_ebuf4", "type": { "array": ["u8", 64] } }, - { "name": "_ebuf3", "type": { "array": ["u8", 128] } }, - { "name": "_ebuf2", "type": { "array": ["u8", 512] } }, - { - "name": "cost_whitelist", - "docs": ["Cost whitelist by authority"], - "type": { "array": ["pubkey", 32] } - } - ] - } - }, - { - "name": "StateEpochInfo", - "serialization": "bytemuck", - "repr": { "kind": "c" }, - "type": { - "kind": "struct", - "fields": [ - { "name": "id", "type": "u64" }, - { "name": "_reserved1", "type": "u64" }, - { "name": "slot_end", "type": "u64" } - ] - } - }, - { "name": "StateInitParams", "type": { "kind": "struct", "fields": [] } }, - { - "name": "StateSetConfigsParams", - "type": { - "kind": "struct", - "fields": [ - { "name": "new_authority", "type": "pubkey" }, - { "name": "test_only_disable_mr_enclave_check", "type": "u8" }, - { "name": "stake_pool", "type": "pubkey" }, - { "name": "stake_program", "type": "pubkey" }, - { "name": "add_advisory", "type": "u16" }, - { "name": "rm_advisory", "type": "u16" }, - { "name": "epoch_length", "type": "u32" }, - { "name": "reset_epochs", "type": "bool" }, - { "name": "switch_mint", "type": "pubkey" }, - { "name": "enable_staking", "type": "u8" }, - { "name": "subsidy_amount", "type": "u32" }, - { "name": "base_reward", "type": "u32" }, - { "name": "add_cost_wl", "type": "pubkey" }, - { "name": "rm_cost_wl", "type": "pubkey" } - ] - } - }, - { - "name": "Submission", - "type": { - "kind": "struct", - "fields": [ - { "name": "value", "type": "i128" }, - { "name": "signature", "type": { "array": ["u8", 64] } }, - { "name": "recovery_id", "type": "u8" }, - { "name": "offset", "type": "u8" } - ] - } - } - ] -} diff --git a/solauto-sdk/src/index.ts b/solauto-sdk/src/index.ts index 97be5854..8d3f84bb 100644 --- a/solauto-sdk/src/index.ts +++ b/solauto-sdk/src/index.ts @@ -2,9 +2,9 @@ export * from "./constants"; export * from "./generated/accounts"; export * from "./generated/instructions"; export * from "./generated/types"; -export * from "./marginfi-sdk/accounts"; -export * from "./marginfi-sdk/instructions"; -export * from "./marginfi-sdk/types"; +export * from "./externalSdks/marginfi/accounts"; +export * from "./externalSdks/marginfi/instructions"; +export * from "./externalSdks/marginfi/types"; export * from "./services"; export * from "./solautoPosition"; export * from "./types"; diff --git a/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts b/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts index cf6bb9b0..f7fdb0a7 100644 --- a/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts +++ b/solauto-sdk/src/services/flashLoans/marginfiFlProvider.ts @@ -19,10 +19,11 @@ import { MarginfiAccount, marginfiAccountInitialize, safeFetchAllBank, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { FlProviderBase } from "./flProviderBase"; import { bytesToI80F48, + composeRemainingAccounts, consoleLog, fetchTokenPrices, findMarginfiAccounts, @@ -342,7 +343,7 @@ export class MarginfiFlProvider extends FlProviderBase { lendingAccountEndFlashloan(this.umi, { marginfiAccount: publicKey(iMfiAccount.accountPk), signer: this.signer, - }).addRemainingAccounts(remainingAccounts) + }).addRemainingAccounts(composeRemainingAccounts(remainingAccounts)) ); } diff --git a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts index e8a4b1df..a1e576d7 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceSwapManager.ts @@ -6,12 +6,10 @@ import { JupSwapManager, SwapParams, SwapInput } from "../swap"; import { applyDebtAdjustmentUsd, RebalanceValues } from "./rebalanceValues"; import { PriceType, RebalanceDirection, TokenType } from "../../generated"; import { - bytesToI80F48, consoleLog, fromBaseUnit, fromBps, getLiqUtilzationRateBps, - isMarginfiPosition, safeGetPrice, toBaseUnit, tokenInfo, @@ -33,7 +31,7 @@ export class RebalanceSwapManager { private targetLiqUtilizationRateBps?: number, private priceType?: PriceType ) { - this.jupSwapManager = new JupSwapManager(client.signer); + this.jupSwapManager = new JupSwapManager(client.signer, true); this.solautoFeeBps = SolautoFeesBps.create( this.client.isReferred, this.targetLiqUtilizationRateBps, @@ -95,12 +93,8 @@ export class RebalanceSwapManager { let debtUsd = this.client.pos.debtUsd(this.priceType); // TODO: add token balance change - const { - input, - biasedInputPrice, - output, - biasedOutputPrice, - } = this.swapDetails(); + const { input, biasedInputPrice, output, biasedOutputPrice } = + this.swapDetails(); const swapInputAmount = swapInputAmountBaseUnit ? fromBaseUnit( @@ -127,7 +121,9 @@ export class RebalanceSwapManager { const res = applyDebtAdjustmentUsd( { debtAdjustmentUsd: this.isBoost() ? swapInputUsd : swapInputUsd * -1, - debtAdjustmentUsdOutput: this.isBoost() ? swapOutputUsd : swapOutputUsd * -1, + debtAdjustmentUsdOutput: this.isBoost() + ? swapOutputUsd + : swapOutputUsd * -1, }, { supplyUsd, debtUsd }, fromBps(this.client.pos.state.liqThresholdBps), @@ -138,20 +134,6 @@ export class RebalanceSwapManager { } ); - // if (isMarginfiPosition(this.client.pos)) { - // console.log(res.newPos.supplyUsd, res.newPos.debtUsd); - // console.log( - // res.newPos.supplyUsd * - // bytesToI80F48( - // this.client.pos.supplyBank!.config.assetWeightInit.value - // ), - // res.newPos.debtUsd * - // bytesToI80F48( - // this.client.pos.debtBank!.config.liabilityWeightInit.value - // ) - // ); - // } - return getLiqUtilzationRateBps( res.newPos.supplyUsd, res.newPos.debtUsd, @@ -179,8 +161,11 @@ export class RebalanceSwapManager { BigInt(parseInt(swapQuote.inAmount)) ); const exceedsMinOutput = criteria.minOutputAmount - ? outputAmount < Number(criteria.minOutputAmount) : false; - const exceedsMaxRate = criteria.maxLiqUtilizationRateBps ? postRebalanceRate > criteria.maxLiqUtilizationRateBps : false; + ? outputAmount < Number(criteria.minOutputAmount) + : false; + const exceedsMaxRate = criteria.maxLiqUtilizationRateBps + ? postRebalanceRate > criteria.maxLiqUtilizationRateBps + : false; insufficient = exceedsMinOutput || exceedsMaxRate; consoleLog(postRebalanceRate, criteria.maxLiqUtilizationRateBps); @@ -208,17 +193,6 @@ export class RebalanceSwapManager { const rebalanceToZero = this.targetLiqUtilizationRateBps === 0; let { input, output, biasedOutputPrice, inputAmount } = this.swapDetails(); - let outputAmount = rebalanceToZero - ? output.amountUsed.baseUnit + - BigInt( - Math.round( - Number(output.amountUsed.baseUnit) * - // Add this small percentage to account for the APR on the debt between now and the transaction - 0.0001 - ) - ) - : toBaseUnit(this.usdToSwap() / biasedOutputPrice, output.decimals); - const flashLoanRepayFromDebt = !this.isBoost() && this.flRequirements && @@ -227,6 +201,15 @@ export class RebalanceSwapManager { const exactOut = flashLoanRepayFromDebt; const exactIn = !exactOut; + const outputPaddingPct = + (exactOut ? fromBps(this.solautoFeeBps) : 0) + 0.0001; + let outputAmount = rebalanceToZero + ? output.amountUsed.baseUnit + + BigInt( + Math.round(Number(output.amountUsed.baseUnit) * outputPaddingPct) + ) + : toBaseUnit(this.usdToSwap() / biasedOutputPrice, output.decimals); + if (exactIn && (rebalanceToZero || this.values.repayingCloseToMaxLtv)) { inputAmount = this.bigIntWithIncrement(inputAmount, 0.005); } diff --git a/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts b/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts index 57fd60f4..e3be74db 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceTxBuilder.ts @@ -53,7 +53,7 @@ export class RebalanceTxBuilder { ) {} private shouldProceedWithRebalance() { - if (this.client.pos.selfManaged && !this.targetLiqUtilizationRateBps) { + if (this.client.pos.selfManaged && this.targetLiqUtilizationRateBps === undefined) { throw new Error( "A target rate must be provided for self managed position rebalances" ); @@ -82,37 +82,38 @@ export class RebalanceTxBuilder { } private getFlLiquiditySource( + attemptNum: number, supplyLiquidityAvailable: bigint, debtLiquidityAvailable: bigint ): TokenType | undefined { const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd); - const insufficientLiquidity = ( - amountNeededUsd: number, + const calcLiquidityAvailable = ( liquidityAvailable: bigint, tokenMint: PublicKey - ) => { - const liquidityUsd = - fromBaseUnit(liquidityAvailable, tokenInfo(tokenMint).decimals) * - (safeGetPrice(tokenMint) ?? 0); - return amountNeededUsd > liquidityUsd * 0.95; - }; + ) => + fromBaseUnit(liquidityAvailable, tokenInfo(tokenMint).decimals) * + (safeGetPrice(tokenMint) ?? 0); - const insufficientSupplyLiquidity = insufficientLiquidity( - debtAdjustmentUsd, + const supplyLiquidityUsdAvailable = calcLiquidityAvailable( supplyLiquidityAvailable, this.client.pos.supplyMint ); + const insufficientSupplyLiquidity = + debtAdjustmentUsd > supplyLiquidityUsdAvailable * 0.95; - const insufficientDebtLiquidity = insufficientLiquidity( - debtAdjustmentUsd, + const debtLiquidityUsdAvailable = calcLiquidityAvailable( debtLiquidityAvailable, this.client.pos.debtMint ); + const insufficientDebtLiquidity = + debtAdjustmentUsd > debtLiquidityUsdAvailable * 0.95; let useDebtLiquidity = this.values.rebalanceDirection === RebalanceDirection.Boost || - insufficientSupplyLiquidity; + insufficientSupplyLiquidity || + (attemptNum > 2 && + debtLiquidityUsdAvailable > supplyLiquidityUsdAvailable * 5); if (useDebtLiquidity) { return !insufficientDebtLiquidity ? TokenType.Debt : undefined; @@ -153,9 +154,9 @@ export class RebalanceTxBuilder { return intermediaryLiqUtilizationRateBps; } - private async flashLoanRequirements(): Promise< - FlashLoanRequirements | undefined - > { + private async flashLoanRequirements( + attemptNum: number + ): Promise { const intermediaryLiqUtilizationRateBps = this.intermediaryLiqUtilizationRateBps(); const maxLtvRateBps = getMaxLiqUtilizationRateBps( @@ -168,6 +169,7 @@ export class RebalanceTxBuilder { } const stdFlLiquiditySource = this.getFlLiquiditySource( + attemptNum, this.client.flProvider.liquidityAvailable(TokenType.Supply), this.client.flProvider.liquidityAvailable(TokenType.Debt) ); @@ -175,6 +177,7 @@ export class RebalanceTxBuilder { if (stdFlLiquiditySource === undefined || this.optimizeSize) { const { supplyBalance, debtBalance } = await this.client.signerBalances(); const signerFlLiquiditySource = this.getFlLiquiditySource( + attemptNum, supplyBalance, debtBalance ); @@ -278,7 +281,7 @@ export class RebalanceTxBuilder { } this.values = rebalanceValues; - this.flRequirements = await this.flashLoanRequirements(); + this.flRequirements = await this.flashLoanRequirements(attemptNum); if (this.flRequirements?.flFeeBps) { this.values = this.getRebalanceValues()!; } diff --git a/solauto-sdk/src/services/rebalance/rebalanceValues.ts b/solauto-sdk/src/services/rebalance/rebalanceValues.ts index bd4de076..d188f20f 100644 --- a/solauto-sdk/src/services/rebalance/rebalanceValues.ts +++ b/solauto-sdk/src/services/rebalance/rebalanceValues.ts @@ -132,12 +132,12 @@ function getTargetLiqUtilizationRateBps( } if ( - solautoPosition.liqUtilizationRateBps(PriceType.Realtime) + (bpsDistanceFromRebalance ?? 0) >= + solautoPosition.liqUtilizationRateBps(PriceType.Realtime, true) + (bpsDistanceFromRebalance ?? 0) >= solautoPosition.repayFromBps ) { return solautoPosition.settings!.repayToBps; } else if ( - solautoPosition.liqUtilizationRateBps(priceType) - (bpsDistanceFromRebalance ?? 0) <= + solautoPosition.liqUtilizationRateBps(priceType, true) - (bpsDistanceFromRebalance ?? 0) <= solautoPosition.boostFromBps ) { return solautoPosition.settings!.boostToBps; diff --git a/solauto-sdk/src/services/rebalance/solautoFees.ts b/solauto-sdk/src/services/rebalance/solautoFees.ts index 9f58893c..b3a4d753 100644 --- a/solauto-sdk/src/services/rebalance/solautoFees.ts +++ b/solauto-sdk/src/services/rebalance/solautoFees.ts @@ -27,18 +27,13 @@ export class SolautoFeesBps { const minFeeBps = 25; // Fee in basis points for maxSize (0.25%) const k = 1.5; - if (this.targetLiqUtilizationRateBps === 0) { - return { - solauto: 0, - referrer: 0, - total: 0, - }; - } - let feeBps: number = 0; - if (this.targetLiqUtilizationRateBps !== undefined) { - feeBps = 15; + if (this.targetLiqUtilizationRateBps === 0) { + feeBps = 15; + } else { + feeBps = 10; + } } else if (rebalanceDirection === RebalanceDirection.Repay) { feeBps = 25; } else if (this.positionNetWorthUsd <= minSize) { diff --git a/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts b/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts index 0a5aca49..e8960501 100644 --- a/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts +++ b/solauto-sdk/src/services/solauto/solautoMarginfiClient.ts @@ -37,6 +37,7 @@ import { hasFirstRebalance, getRemainingAccountsForMarginfiHealthCheck, getAccountMeta, + composeRemainingAccounts, } from "../../utils"; import { Bank, @@ -47,7 +48,7 @@ import { lendingAccountWithdraw, marginfiAccountInitialize, safeFetchAllMarginfiAccount, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { SolautoClient, SolautoClientArgs } from "./solautoClient"; function isSigner(account: PublicKey | Signer): account is Signer { @@ -61,7 +62,7 @@ export class SolautoMarginfiClient extends SolautoClient { public marginfiAccount!: PublicKey | Signer; public marginfiAccountPk!: PublicKey; - public healthCheckRemainingAccounts?: AccountMeta[]; + public healthCheckRemainingAccounts!: AccountMeta[]; public marginfiGroup!: PublicKey; public marginfiSupplyAccounts!: MarginfiAssetAccounts; @@ -76,6 +77,7 @@ export class SolautoMarginfiClient extends SolautoClient { this.mfiAccounts = getMarginfiAccounts(this.lpEnv); this.marginfiGroup = this.pos.lpPoolAccount; + this.healthCheckRemainingAccounts = []; if (this.pos.selfManaged) { this.marginfiAccount = @@ -258,6 +260,18 @@ export class SolautoMarginfiClient extends SolautoClient { private marginfiProtocolInteractionIx(args: SolautoActionArgs) { switch (args.__kind) { case "Deposit": { + if ( + !this.healthCheckRemainingAccounts + .map((x) => x.pubkey.toString()) + .includes(this.marginfiSupplyAccounts.bank) + ) { + this.healthCheckRemainingAccounts.push( + ...[ + getAccountMeta(new PublicKey(this.marginfiSupplyAccounts.bank)), + getAccountMeta(this.supplyPriceOracle), + ] + ); + } return lendingAccountDeposit(this.umi, { signer: this.signer, signerTokenAccount: publicKey(this.signerSupplyTa), @@ -272,7 +286,7 @@ export class SolautoMarginfiClient extends SolautoClient { }); } case "Borrow": { - const remainingAccounts = this.healthCheckRemainingAccounts ?? []; + const remainingAccounts = this.healthCheckRemainingAccounts; if ( !remainingAccounts.find( (x) => @@ -286,6 +300,7 @@ export class SolautoMarginfiClient extends SolautoClient { ] ); } + return lendingAccountBorrow(this.umi, { amount: args.fields[0], signer: this.signer, @@ -299,7 +314,7 @@ export class SolautoMarginfiClient extends SolautoClient { bankLiquidityVaultAuthority: publicKey( this.marginfiDebtAccounts.vaultAuthority ), - }).addRemainingAccounts(remainingAccounts); + }).addRemainingAccounts(composeRemainingAccounts(remainingAccounts)); } case "Repay": { return lendingAccountRepay(this.umi, { @@ -332,7 +347,9 @@ export class SolautoMarginfiClient extends SolautoClient { bankLiquidityVaultAuthority: publicKey( this.marginfiSupplyAccounts.vaultAuthority ), - }).addRemainingAccounts(this.healthCheckRemainingAccounts ?? []); + }).addRemainingAccounts( + composeRemainingAccounts(this.healthCheckRemainingAccounts) + ); } } } diff --git a/solauto-sdk/src/services/solauto/txHandler.ts b/solauto-sdk/src/services/solauto/txHandler.ts index 5cdba227..35aafb1e 100644 --- a/solauto-sdk/src/services/solauto/txHandler.ts +++ b/solauto-sdk/src/services/solauto/txHandler.ts @@ -17,7 +17,7 @@ export interface TxHandlerProps { lpEnv?: ProgramEnv; } -export abstract class TxHandler { +export class TxHandler { public rpcUrl!: string; public showLogs = false; public programId!: PublicKey; @@ -64,7 +64,9 @@ export abstract class TxHandler { consoleLog(...args); } - abstract defaultLookupTables(): string[]; + defaultLookupTables(): string[] { + return []; + } - abstract resetLiveTxUpdates(success?: boolean): Promise; + resetLiveTxUpdates(success?: boolean) {} } diff --git a/solauto-sdk/src/services/swap/jupSwapManager.ts b/solauto-sdk/src/services/swap/jupSwapManager.ts index 3918524a..1df49106 100644 --- a/solauto-sdk/src/services/swap/jupSwapManager.ts +++ b/solauto-sdk/src/services/swap/jupSwapManager.ts @@ -47,20 +47,23 @@ export interface JupSwapTransactionData { } export class JupSwapManager { - jupApi = createJupiterApiClient(); + jupApi = createJupiterApiClient({ + basePath: "https://lite-api.jup.ag" + }); public jupQuote: QuoteResponse | undefined = undefined; - constructor(private signer: Signer) {} + constructor( + private signer: Signer, + private limitSize?: boolean + ) {} public async getQuote(data: SwapInput): Promise { const inputMintInfo: TokenInfo | undefined = tokenInfo(data.inputMint); const outputMintInfo: TokenInfo | undefined = tokenInfo(data.outputMint); const lowLiquidityMint = - !inputMintInfo || - inputMintInfo?.isMeme || - !outputMintInfo || - outputMintInfo?.isMeme; + (!inputMintInfo?.isMajor && !inputMintInfo?.isLST) || + (!outputMintInfo?.isMajor && !outputMintInfo?.isLST); const slippageBps = data.slippageBps ?? (lowLiquidityMint ? 250 : 100); return await retryWithExponentialBackoff( @@ -75,9 +78,11 @@ export class JupSwapManager { ? "ExactIn" : undefined, slippageBps, - maxAccounts: !data.exactOut - ? (lowLiquidityMint ? 25 : 15) + attemptNum * 5 - : undefined, + maxAccounts: + !data.exactOut && this.limitSize + ? (lowLiquidityMint ? 25 : 15) + attemptNum * 5 + : undefined, + excludeDexes: ["Obric V2"], }), 6, 250 @@ -100,7 +105,6 @@ export class JupSwapManager { userPublicKey: this.signer.publicKey.toString(), quoteResponse: this.jupQuote!, wrapAndUnwrapSol: data.wrapAndUnwrapSol ?? false, - useTokenLedger: !data.exactOut && !data.exactIn, destinationTokenAccount: getTokenAccount( data.destinationWallet ?? toWeb3JsPublicKey(this.signer.publicKey), @@ -157,6 +161,7 @@ export class JupSwapManager { this.adaptSlippageToPriceImpact(data.slippageIncFactor); } consoleLog("Quote:", this.jupQuote); + consoleLog("route plan", this.jupQuote.routePlan); const instructions = await this.getJupInstructions(data); diff --git a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts index f5c4cc34..08d64af2 100644 --- a/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/clientTransactionsManager.ts @@ -5,8 +5,6 @@ import { import { SolautoClient } from "../../solauto"; import { TransactionsManager } from "./transactionsManager"; import { - buildSwbSubmitResponseTx, - isSwitchboardMint, retryWithExponentialBackoff, } from "../../../utils"; import { TransactionItem } from "../types"; @@ -33,34 +31,6 @@ export class ClientTransactionsManager extends TransactionsManager x.oracleInteractor) && switchboardMints.length) { - this.txHandler.log("Requires oracle update(s)..."); - const oracleTxs = switchboardMints.map( - (x) => - new TransactionItem( - async () => - await buildSwbSubmitResponseTx( - this.txHandler.connection, - this.txHandler.signer, - x - ), - this.updateOracleTxName - ) - ); - txs.unshift(...oracleTxs); - } - } - private async addChoreTxs( txs: TransactionItem[], updateLutTx?: TransactionBuilder @@ -75,7 +45,7 @@ export class ClientTransactionsManager extends TransactionsManager 4)) { + const updateLutInSepTx = + updateLut?.new || (updateLut?.accountsToAdd ?? []).length > 4; + if (updateLut && updateLutInSepTx) { await this.updateLut(updateLut.tx, updateLut.new); } this.lookupTables.defaultLuts = client.defaultLookupTables(); - await this.addSwbOraclePullTxs(items); + // await addSwbOraclePullTxs(this.txHandler, items); for (const item of items) { await item.initialize(); @@ -124,7 +96,7 @@ export class ClientTransactionsManager extends TransactionsManager { diff --git a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts index dcbe96f4..c7d9b809 100644 --- a/solauto-sdk/src/services/transactions/manager/transactionsManager.ts +++ b/solauto-sdk/src/services/transactions/manager/transactionsManager.ts @@ -7,15 +7,24 @@ import { TransactionRunType, } from "../../../types"; import { + addTxOptimizations, + canSerializeTransaction, consoleLog, ErrorsToThrow, + getActualTxSize, retryWithExponentialBackoff, sendSingleOptimizedTransaction, sendJitoBundledTransactions, } from "../../../utils"; import { TxHandler } from "../../solauto"; import { getErrorInfo } from "../transactionUtils"; -import { LookupTables, TransactionItem, TransactionSet } from "../types"; +import { + JITO_TIP_BUFFER_BYTES, + LookupTables, + TransactionItem, + TransactionSet, +} from "../types"; +import { UPDATE_ORACLE_TX_NAME } from "../../../constants"; export class TransactionTooLargeError extends Error { constructor(message: string) { @@ -33,14 +42,16 @@ export enum TransactionStatus { Failed = "Failed", } -export type TransactionManagerStatuses = { +export interface TransactionManagerStatus { name: string; attemptNum: number; status: TransactionStatus; moreInfo?: string; simulationSuccessful?: boolean; txSig?: string; -}[]; +} + +export type TransactionManagerStatuses = TransactionManagerStatus[]; interface RetryConfig { signableRetries?: number; @@ -73,8 +84,6 @@ export class TransactionsManager { protected retryDelay: number; protected abortController?: AbortController; - updateOracleTxName = "update oracle"; - constructor(args: TransactionsManagerArgs) { this.txHandler = args.txHandler; this.statusCallback = args.statusCallback; @@ -99,7 +108,7 @@ export class TransactionsManager { items: TransactionItem[] ): Promise { let transactionSets: TransactionSet[] = []; - this.txHandler.log(`Reassembling ${items.length} items`); + consoleLog(`Reassembling ${items.length} items`); const txItems = items.sort((a, b) => a.orderPrio - b.orderPrio); @@ -111,20 +120,34 @@ export class TransactionsManager { continue; } - const transaction = item.tx.setAddressLookupTables( + const transaction = addTxOptimizations( + this.txHandler.umi, + item.tx, + 1, + 1 + ).setAddressLookupTables( await this.lookupTables.getLutInputs(item.lookupTableAddresses) ); - if (!transaction.fitsInOneTransaction(this.txHandler.umi)) { + // Check if transaction can be serialized with buffer for Jito tip instruction + if ( + !canSerializeTransaction( + this.txHandler.umi, + transaction, + JITO_TIP_BUFFER_BYTES + ) + ) { + const actualSize = getActualTxSize(this.txHandler.umi, transaction); throw new TransactionTooLargeError( - `Exceeds max transaction size (${transaction.getTransactionSize(this.txHandler.umi)})` + `Exceeds max transaction size (actual: ${actualSize ?? "failed to serialize"} + ~${JITO_TIP_BUFFER_BYTES} bytes for Jito tip)` ); } else { let newSet = new TransactionSet(this.txHandler, this.lookupTables, [ item, ]); for (let j = i; j >= 0; j--) { - if (await newSet.fitsWith(txItems[j])) { - newSet.prepend(txItems[j]); + const tx = txItems[j]; + if (await newSet.fitsWith(tx)) { + newSet.prepend(tx); i--; } else { break; @@ -137,48 +160,36 @@ export class TransactionsManager { return transactionSets; } - private updateStatus( - name: string, - status: TransactionStatus, - attemptNum: number, - txSig?: string, - simulationSuccessful?: boolean, - moreInfo?: string - ) { - if (!this.statuses.filter((x) => x.name === name)) { - this.statuses.push({ - name, - status, - txSig, - attemptNum, - simulationSuccessful, - moreInfo, - }); + private updateStatus(args: TransactionManagerStatus, reset?: boolean) { + if (!this.statuses.filter((x) => x.name === args.name)) { + this.statuses.push(args); } else { const idx = this.statuses.findIndex( - (x) => x.name === name && x.attemptNum === attemptNum + (x) => x.name === args.name && x.attemptNum === args.attemptNum ); if (idx !== -1) { - this.statuses[idx].status = status; - this.statuses[idx].txSig = txSig; - if (simulationSuccessful) { - this.statuses[idx].simulationSuccessful = simulationSuccessful; + this.statuses[idx].status = args.status; + this.statuses[idx].txSig = args.txSig; + if (args.simulationSuccessful) { + this.statuses[idx].simulationSuccessful = args.simulationSuccessful; + } + if (args.moreInfo) { + this.statuses[idx].moreInfo = args.moreInfo; } - if (moreInfo) { - this.statuses[idx].moreInfo = moreInfo; + if (reset) { + this.statuses[idx].txSig = undefined; + this.statuses[idx].simulationSuccessful = undefined; + this.statuses[idx].moreInfo = undefined; } } else { - this.statuses.push({ - name, - status, - txSig, - attemptNum, - simulationSuccessful, - moreInfo, - }); + this.statuses.push(args); } } - this.txHandler.log(`${name} is ${status.toString().toLowerCase()}`); + consoleLog( + `${args.name} ${args.attemptNum} is ${args.status + .toString() + .toLowerCase()}` + ); this.statusCallback?.([...this.statuses]); } @@ -190,13 +201,17 @@ export class TransactionsManager { const accountsNotInLut = ixAccounts.filter( (x) => !lutAccounts.includes(x) ); - this.txHandler.log( - `Program ${ix.programId}, data len: ${ix.data.length}, LUT accounts data: ${ix.keys.filter((x) => lutAccounts.includes(x.pubkey)).length * 3}` + consoleLog( + `Program ${ix.programId}, data len: ${ + ix.data.length + }, LUT accounts data: ${ + ix.keys.filter((x) => lutAccounts.includes(x.pubkey)).length * 3 + }` ); if (accountsNotInLut.length > 0) { - this.txHandler.log(`${accountsNotInLut.length} accounts not in LUT:`); + consoleLog(`${accountsNotInLut.length} accounts not in LUT:`); for (const key of accountsNotInLut) { - this.txHandler.log(key.toString()); + consoleLog(key.toString()); } } } @@ -219,21 +234,19 @@ export class TransactionsManager { } private updateStatusForSets( - itemSets: TransactionSet[], - status: TransactionStatus, - attemptNum: number, + txNames: string[], + args: Omit, txSigs?: string[], - simulationSuccessful?: boolean, - moreInfo?: string + reset?: boolean ) { - itemSets.forEach((itemSet, i) => { + txNames.forEach((name, i) => { this.updateStatus( - itemSet.name(), - status, - attemptNum, - txSigs !== undefined ? txSigs[i] : undefined, - simulationSuccessful, - moreInfo + { + name, + txSig: txSigs && txSigs.length > i ? txSigs[i] : undefined, + ...args, + }, + reset ); }); } @@ -250,12 +263,18 @@ export class TransactionsManager { await item.initialize(); } } - this.txHandler.log("Transaction items:", items.length); + consoleLog("Transaction items:", items.length); return await this.assembleTransactionSets(items); }, this.totalRetries); - this.updateStatusForSets(itemSets, TransactionStatus.Queued, 0); - this.txHandler.log("Initial item sets:", itemSets.length); + this.updateStatusForSets( + itemSets.map((x) => x.name()), + { + status: TransactionStatus.Queued, + attemptNum: 0, + } + ); + consoleLog("Initial item sets:", itemSets.length); if (this.atomically) { await this.processTransactionsAtomically(itemSets); @@ -271,7 +290,7 @@ export class TransactionsManager { } private shouldProceedToSend(itemSets: TransactionSet[], attemptNum: number) { - if (!itemSets) { + if (itemSets.length === 0) { return false; } @@ -280,20 +299,73 @@ export class TransactionsManager { ); if ( newItemSetNames.length === 1 && - newItemSetNames[0] === this.updateOracleTxName + newItemSetNames[0] === UPDATE_ORACLE_TX_NAME ) { consoleLog("Skipping unnecessary oracle update"); - this.updateStatusForSets(itemSets, TransactionStatus.Skipped, attemptNum); + this.updateStatusForSets( + itemSets.map((x) => x.name()), + { + status: TransactionStatus.Skipped, + attemptNum, + } + ); return false; } return true; } - private async processTransactionsAtomically(itemSets: TransactionSet[]) { - let num = 0; - let transactions: TransactionBuilder[] = []; + private async refreshItemSets( + itemSets: TransactionSet[], + attemptNum: number, + prevError?: Error, + currentIndex?: number + ): Promise { + if (currentIndex !== undefined) { + const itemSet = itemSets[currentIndex]; + await itemSet.reset(); + await itemSet.refetchAll(attemptNum, prevError); + } else { + await Promise.all(itemSets.map((itemSet) => itemSet.reset())); + for (const itemSet of itemSets) { + await itemSet.refetchAll(attemptNum, prevError); + } + } + + const newItemSets = await this.assembleTransactionSets( + currentIndex !== undefined + ? [ + ...itemSets[currentIndex].items, + ...itemSets.slice(currentIndex + 1).flatMap((set) => set.items), + ] + : itemSets.flatMap((set) => set.items) + ); + if (currentIndex !== undefined && newItemSets.length > 1) { + itemSets.splice( + currentIndex, + itemSets.length - currentIndex, + ...newItemSets + ); + const startOfQueuedStatuses = this.statuses.findIndex( + (x) => x.status === TransactionStatus.Queued + ); + this.statuses.splice( + startOfQueuedStatuses, + this.statuses.length - startOfQueuedStatuses, + ...newItemSets.map((x, i) => ({ + name: x.name(), + attemptNum: i === 0 ? attemptNum : 0, + status: + i === 0 ? TransactionStatus.Processing : TransactionStatus.Queued, + })) + ); + } + + return newItemSets; + } + + private async processTransactionsAtomically(itemSets: TransactionSet[]) { await retryWithExponentialBackoff( async (attemptNum, prevError) => { if ( @@ -304,7 +376,6 @@ export class TransactionsManager { throw prevError; } - num = attemptNum; this.priorityFeeSetting = this.getUpdatedPriorityFeeSetting( prevError, attemptNum @@ -327,120 +398,86 @@ export class TransactionsManager { return; } - transactions = []; - for (const set of itemSets) { - transactions.push(await set.getSingleTransaction()); - } - transactions = transactions.filter( - (x) => x.getInstructions().length > 0 - ); - if (transactions.length === 0) { - this.updateStatusForSets( - itemSets, - TransactionStatus.Skipped, - attemptNum - ); - return; - } + await this.sendJitoBundle(itemSets, attemptNum); + }, + this.totalRetries, + this.retryDelay, + this.errorsToThrow + ); + } - this.updateStatusForSets( - itemSets, - TransactionStatus.Processing, - attemptNum - ); - for (const itemSet of itemSets) { - await this.debugAccounts( - itemSet, - await itemSet.getSingleTransaction() - ); - } + private async sendJitoBundle(itemSets: TransactionSet[], attemptNum: number) { + let transactions: TransactionBuilder[] = []; + let txNames: string[] = []; - let txSigs: string[] | undefined; - let error: Error | undefined; - try { - txSigs = await sendJitoBundledTransactions( - this.txHandler.umi, - this.txHandler.connection, - this.txHandler.signer, - this.txHandler.otherSigners, - transactions, - this.txRunType, - this.priorityFeeSetting, - () => - this.updateStatusForSets( - itemSets, - TransactionStatus.Processing, - attemptNum, - undefined, - true - ), - this.abortController - ); - } catch (e: any) { - error = e as Error; - } + try { + for (const set of itemSets) { + transactions.push(await set.getSingleTransaction()); + } + transactions = transactions.filter((x) => x.getInstructions().length > 0); - if ( - error || - (this.txRunType !== "only-simulate" && - (!Boolean(txSigs) || txSigs?.length === 0) && - !this.abortController?.signal.aborted) - ) { - this.updateStatusForSets( - itemSets, - TransactionStatus.Failed, - attemptNum, - txSigs, - undefined, - error?.message - ); - throw error ? error : new Error("Unknown error"); - } + txNames = itemSets.map((x) => x.name()); + if (transactions.length === 0) { + this.updateStatusForSets(txNames, { + status: TransactionStatus.Skipped, + attemptNum, + }); + return; + } - this.updateStatusForSets( - itemSets, - TransactionStatus.Successful, + this.updateStatusForSets( + txNames, + { + status: TransactionStatus.Processing, attemptNum, - txSigs - ); - }, - this.totalRetries, - this.retryDelay, - this.errorsToThrow - ).catch((e: Error) => { - this.txHandler.log("Capturing error info..."); - const errorDetails = getErrorInfo( + }, + undefined, + true + ); + for (const itemSet of itemSets) { + await this.debugAccounts(itemSet, await itemSet.getSingleTransaction()); + } + + const txSigs = await sendJitoBundledTransactions( this.txHandler.umi, + this.txHandler.connection, + this.txHandler.signer, + this.txHandler.otherSigners, transactions, - e, - itemSets.filter( - (x) => - this.statuses.find((y) => x.name() === y.name)?.simulationSuccessful - ).length === itemSets.length, - this.priorityFeeSetting + this.txRunType, + this.priorityFeeSetting, + () => + this.updateStatusForSets(txNames, { + status: TransactionStatus.Processing, + attemptNum, + simulationSuccessful: true, + }), + this.abortController ); - const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`; - const errorInfo = - errorDetails.errorName || errorDetails.errorInfo - ? errorString - : e.message; + if ( + this.txRunType !== "only-simulate" && + (!Boolean(txSigs) || txSigs?.length === 0) && + !this.abortController?.signal.aborted + ) { + this.updateStatusForSets( + txNames, + { + status: TransactionStatus.Failed, + attemptNum, + }, + txSigs + ); + } + this.updateStatusForSets( - itemSets, - errorDetails.canBeIgnored - ? TransactionStatus.Skipped - : TransactionStatus.Failed, - num, - undefined, - undefined, - errorInfo + txNames, + { status: TransactionStatus.Successful, attemptNum }, + txSigs ); - consoleLog(errorString); - - if (!errorDetails.canBeIgnored) { - throw new Error(errorInfo); - } - }); + } catch (e: any) { + this.captureErrorInfo(transactions, txNames, attemptNum, e); + } } private async processTransactionSet( @@ -473,14 +510,17 @@ export class TransactionsManager { const tx = await itemSet.getSingleTransaction(); if (tx.getInstructions().length === 0) { - this.updateStatus( - itemSet.name(), - TransactionStatus.Skipped, - attemptNum - ); + this.updateStatus({ + name: itemSet.name(), + status: TransactionStatus.Skipped, + attemptNum, + }); } else { await this.debugAccounts(itemSet, tx); - this.priorityFeeSetting = this.getUpdatedPriorityFeeSetting(prevError, attemptNum); + this.priorityFeeSetting = this.getUpdatedPriorityFeeSetting( + prevError, + attemptNum + ); await this.sendTransaction( tx, itemSet.name(), @@ -495,64 +535,21 @@ export class TransactionsManager { ); } - private async refreshItemSets( - itemSets: TransactionSet[], - attemptNum: number, - prevError?: Error, - currentIndex?: number - ): Promise { - if (currentIndex !== undefined) { - const itemSet = itemSets[currentIndex]; - await itemSet.reset(); - await itemSet.refetchAll(attemptNum, prevError); - } else { - await Promise.all(itemSets.map((itemSet) => itemSet.reset())); - for (const itemSet of itemSets) { - await itemSet.refetchAll(attemptNum, prevError); - } - } - - const newItemSets = await this.assembleTransactionSets( - currentIndex !== undefined - ? [ - ...itemSets[currentIndex].items, - ...itemSets.slice(currentIndex + 1).flatMap((set) => set.items), - ] - : itemSets.flatMap((set) => set.items) - ); - - if (currentIndex !== undefined && newItemSets.length > 1) { - itemSets.splice( - currentIndex, - itemSets.length - currentIndex, - ...newItemSets - ); - const startOfQueuedStatuses = this.statuses.findIndex( - (x) => x.status === TransactionStatus.Queued - ); - this.statuses.splice( - startOfQueuedStatuses, - this.statuses.length - startOfQueuedStatuses, - ...newItemSets.map((x, i) => ({ - name: x.name(), - attemptNum: i === 0 ? attemptNum : 0, - status: - i === 0 ? TransactionStatus.Processing : TransactionStatus.Queued, - })) - ); - } - - return newItemSets; - } - protected async sendTransaction( tx: TransactionBuilder, - txName: string, + name: string, attemptNum: number, priorityFeeSetting?: PriorityFeeSetting, txRunType?: TransactionRunType ) { - this.updateStatus(txName, TransactionStatus.Processing, attemptNum); + this.updateStatus( + { + name, + status: TransactionStatus.Processing, + attemptNum, + }, + true + ); try { const txSig = await sendSingleOptimizedTransaction( this.txHandler.umi, @@ -561,51 +558,62 @@ export class TransactionsManager { txRunType ?? this.txRunType, priorityFeeSetting, () => - this.updateStatus( - txName, - TransactionStatus.Processing, + this.updateStatus({ + name, + status: TransactionStatus.Processing, attemptNum, - undefined, - true - ), + simulationSuccessful: true, + }), this.abortController ); - this.updateStatus( - txName, - TransactionStatus.Successful, + this.updateStatus({ + name, + status: TransactionStatus.Successful, attemptNum, - txSig ? bs58.encode(txSig) : undefined - ); + txSig: txSig ? bs58.encode(txSig) : undefined, + }); } catch (e: any) { - this.txHandler.log("Capturing error info..."); - const errorDetails = getErrorInfo( - this.txHandler.umi, - [tx], - e, - this.statuses.find((x) => x.name === txName)?.simulationSuccessful, - priorityFeeSetting - ); + this.captureErrorInfo([tx], [name], attemptNum, e); + } + } - const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`; - const errorInfo = - errorDetails.errorName || errorDetails.errorInfo - ? errorString - : e.message; - this.updateStatus( - txName, - errorDetails.canBeIgnored - ? TransactionStatus.Skipped - : TransactionStatus.Failed, - attemptNum, - undefined, - undefined, - errorInfo - ); - consoleLog(errorString); + private captureErrorInfo( + transactions: TransactionBuilder[], + txNames: string[], + attemptNum: number, + error: any + ) { + consoleLog("Capturing error info..."); + const errorDetails = getErrorInfo( + this.txHandler.umi, + transactions, + error, + txNames.filter( + (x) => + this.statuses.find((y) => x === y.name && y.attemptNum === attemptNum) + ?.simulationSuccessful + ).length === txNames.length, + this.priorityFeeSetting + ); - if (!errorDetails.canBeIgnored) { - throw new Error(errorInfo); - } + const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${ + errorDetails.errorInfo?.split("\n")[0] ?? "unknown" + }`; + const errorInfo = + errorDetails.errorName || errorDetails.errorInfo + ? errorString + : error.message; + this.updateStatusForSets(txNames, { + status: errorDetails.canBeIgnored + ? TransactionStatus.Skipped + : TransactionStatus.Failed, + attemptNum, + moreInfo: errorInfo, + }); + consoleLog(errorString); + + if (!errorDetails.canBeIgnored) { + throw errorDetails.errorName ? new Error(errorString) : error; } } } diff --git a/solauto-sdk/src/services/transactions/transactionUtils.ts b/solauto-sdk/src/services/transactions/transactionUtils.ts index 771018cd..f0a6c484 100644 --- a/solauto-sdk/src/services/transactions/transactionUtils.ts +++ b/solauto-sdk/src/services/transactions/transactionUtils.ts @@ -49,13 +49,13 @@ import { getLendingAccountRepayInstructionDataSerializer, getLendingAccountWithdrawInstructionDataSerializer, getMarginfiErrorFromCode, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { JupSwapManager } from "../swap"; import { createJupiterProgram, getJupiterErrorFromCode, JUPITER_PROGRAM_ID, -} from "../../jupiter-sdk"; +} from "../../externalSdks/jupiter"; import { TransactionItemInputs, BundleSimulationError, @@ -637,9 +637,7 @@ export function getErrorInfo( try { if (error instanceof BundleSimulationError) { errTxIdx = error.details.transactionIdx; - errIxIdx = - error.details.instructionIdx - - getComputeIxs(error.details.transactionIdx); + errIxIdx = error.details.instructionIdx - getComputeIxs(errTxIdx); errCode = error.details.errorCode; } else if ( typeof error === "object" && diff --git a/solauto-sdk/src/services/transactions/types/transactionSet.ts b/solauto-sdk/src/services/transactions/types/transactionSet.ts index ba1ec0ce..d11c83b0 100644 --- a/solauto-sdk/src/services/transactions/types/transactionSet.ts +++ b/solauto-sdk/src/services/transactions/types/transactionSet.ts @@ -2,15 +2,20 @@ import { AddressLookupTableInput, transactionBuilder, TransactionBuilder, + Umi, } from "@metaplex-foundation/umi"; import { TxHandler } from "../../solauto"; import { LookupTables } from "./lookupTables"; import { TransactionItem } from "./transactionItem"; -import { addTxOptimizations } from "../../../utils"; +import { addTxOptimizations, canSerializeTransaction } from "../../../utils"; import { CHORES_TX_NAME } from "../../../constants"; const MAX_SUPPORTED_ACCOUNT_LOCKS = 64; +// Buffer for Jito tip instruction (~44 bytes) + potential new accounts in message +// This accounts for: System Transfer instruction data, Jito tip account (if new), etc. +export const JITO_TIP_BUFFER_BYTES = 75; + export class TransactionSet { constructor( private txHandler: TxHandler, @@ -55,7 +60,12 @@ export class TransactionSet { ]) ); - return tx.fitsInOneTransaction(this.txHandler.umi); + // Use actual serialization check with buffer for Jito tip instruction + return canSerializeTransaction( + this.txHandler.umi, + tx, + JITO_TIP_BUFFER_BYTES + ); } add(...items: TransactionItem[]) { diff --git a/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts b/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts index 81a925dc..417b0ed9 100644 --- a/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts +++ b/solauto-sdk/src/solautoPosition/marginfiSolautoPositionEx.ts @@ -1,5 +1,5 @@ import { PublicKey } from "@solana/web3.js"; -import { Bank, PriceBias, safeFetchAllBank } from "../marginfi-sdk"; +import { Bank, PriceBias, safeFetchAllBank } from "../externalSdks/marginfi"; import { publicKey } from "@metaplex-foundation/umi"; import { calcMarginfiMaxLtvAndLiqThresholdBps, @@ -25,16 +25,28 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx { public supplyBank: Bank | null = null; public debtBank: Bank | null = null; - supplyPrice(priceType?: PriceType): number | undefined { + supplyPrice( + priceType?: PriceType, + withoutBias?: boolean + ): number | undefined { return ( this._supplyPrice ?? - safeGetPrice(this.supplyMint, priceType, PriceBias.Low) + safeGetPrice( + this.supplyMint, + priceType, + !withoutBias ? PriceBias.Low : undefined + ) ); } - debtPrice(priceType?: PriceType): number | undefined { + debtPrice(priceType?: PriceType, withoutBias?: boolean): number | undefined { return ( - this._debtPrice ?? safeGetPrice(this.debtMint, priceType, PriceBias.High) + this._debtPrice ?? + safeGetPrice( + this.debtMint, + priceType, + !withoutBias ? PriceBias.High : undefined + ) ); } @@ -138,7 +150,7 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx { getBankLiquidityUsedBaseUnit(this.supplyBank, false), this.supplyMintInfo.decimals ); - return Math.min((deposits - borrows), this.totalSupply) * this.supplyPrice()!; + return Math.min(deposits - borrows, this.totalSupply) * this.supplyPrice()!; } async refreshPositionState(priceType?: PriceType): Promise { diff --git a/solauto-sdk/src/solautoPosition/positionUtils.ts b/solauto-sdk/src/solautoPosition/positionUtils.ts index ef01da5d..9fcaeca5 100644 --- a/solauto-sdk/src/solautoPosition/positionUtils.ts +++ b/solauto-sdk/src/solautoPosition/positionUtils.ts @@ -38,7 +38,7 @@ export function createSolautoSettings( boostToBps: settings.boostToBps, repayGap: settings.repayGap, repayToBps: settings.repayToBps, - padding: [], + padding: new Array(24).fill(0), }; } @@ -46,7 +46,7 @@ export async function getPositionExBulk( umi: Umi, publicKeys: PublicKey[] ): Promise { - const batches = getBatches(publicKeys, 50); + const batches = getBatches(publicKeys, 100); const data = ( await Promise.all( @@ -167,9 +167,9 @@ export function createFakePositionState( borrowFeeBps: 0, decimals: supplyDecimals, mint: fromWeb3JsPublicKey(supply.mint), - padding1: [], - padding2: [], - padding: new Uint8Array([]), + padding1: new Array(5).fill(0), + padding2: new Array(8).fill(0), + padding: new Uint8Array(32), }, debt: { amountUsed: { @@ -186,9 +186,9 @@ export function createFakePositionState( borrowFeeBps: 0, decimals: debtDecimals, mint: fromWeb3JsPublicKey(debt.mint), - padding1: [], - padding2: [], - padding: new Uint8Array([]), + padding1: new Array(5).fill(0), + padding2: new Array(8).fill(0), + padding: new Uint8Array(32), }, netWorth: { baseUnit: supply.price @@ -199,8 +199,8 @@ export function createFakePositionState( maxLtvBps, liqThresholdBps, lastRefreshed: BigInt(currentUnixSeconds()), - padding1: [], - padding2: [], - padding: [], + padding1: new Array(6).fill(0), + padding2: new Array(4).fill(0), + padding: new Array(2).fill(0), }; } diff --git a/solauto-sdk/src/solautoPosition/solautoPositionEx.ts b/solauto-sdk/src/solautoPosition/solautoPositionEx.ts index 1d651ada..cbc33a38 100644 --- a/solauto-sdk/src/solautoPosition/solautoPositionEx.ts +++ b/solauto-sdk/src/solautoPosition/solautoPositionEx.ts @@ -146,10 +146,10 @@ export abstract class SolautoPositionEx { ); } - liqUtilizationRateBps(priceType?: PriceType): number { + liqUtilizationRateBps(priceType?: PriceType, withoutBias?: boolean): number { return getLiqUtilzationRateBps( - this.supplyUsd(priceType), - this.debtUsd(priceType), + this.supplyUsd(priceType, withoutBias), + this.debtUsd(priceType, withoutBias), this.state.liqThresholdBps ); } @@ -229,14 +229,14 @@ export abstract class SolautoPositionEx { return calcTotalSupply(this.state); } - supplyUsd(priceType?: PriceType) { - const supplyPrice = this.supplyPrice(priceType); + supplyUsd(priceType?: PriceType, withoutBias?: boolean) { + const supplyPrice = this.supplyPrice(priceType, withoutBias); return supplyPrice ? calcTotalSupply(this.state) * supplyPrice : calcSupplyUsd(this.state); } - supplyPrice(priceType?: PriceType) { + supplyPrice(priceType?: PriceType, withoutBias?: boolean) { return this._supplyPrice ?? safeGetPrice(this.supplyMint, priceType); } @@ -244,14 +244,14 @@ export abstract class SolautoPositionEx { return calcTotalDebt(this.state); } - debtUsd(priceType?: PriceType) { - const debtPrice = this.debtPrice(priceType); + debtUsd(priceType?: PriceType, withoutBias?: boolean) { + const debtPrice = this.debtPrice(priceType, withoutBias); return debtPrice ? calcTotalDebt(this.state) * debtPrice : calcDebtUsd(this.state); } - debtPrice(priceType?: PriceType) { + debtPrice(priceType?: PriceType, withoutBias?: boolean) { return this._debtPrice ?? safeGetPrice(this.debtMint, priceType); } @@ -495,7 +495,8 @@ class PositionRebalanceHelper { return ( this.validRealtimePricesBoost(debtAdjustmentUsd) || - this.pos.liqUtilizationRateBps(PriceType.Ema) - this.pos.boostFromBps <= + this.pos.liqUtilizationRateBps(PriceType.Ema, true) - + this.pos.boostFromBps <= bpsDistanceThreshold ); } @@ -509,7 +510,8 @@ class PositionRebalanceHelper { } const realtimeLiqUtilRateBps = this.pos.liqUtilizationRateBps( - PriceType.Realtime + PriceType.Realtime, + true ); if ( diff --git a/solauto-sdk/src/utils/generalUtils.ts b/solauto-sdk/src/utils/generalUtils.ts index 39b7bb1c..8623faca 100644 --- a/solauto-sdk/src/utils/generalUtils.ts +++ b/solauto-sdk/src/utils/generalUtils.ts @@ -127,7 +127,7 @@ export function retryWithExponentialBackoff( attemptNum++; if ( - errorsToThrow && + errorsToThrow?.length && errorsToThrow.some((errorType) => error instanceof errorType) ) { reject(error); @@ -186,6 +186,9 @@ export async function customRpcCall(umi: Umi, method: string, params?: any) { if ("result" in data) { return data.result; } else { + if ("error" in data) { + console.log(JSON.stringify(data.error)); + } return data; } } @@ -206,7 +209,10 @@ export function validPubkey(pubkey?: PublicKey | UmiPublicKey | string) { return Boolean(pubkey) && pubkey!.toString() !== PublicKey.default.toString(); } -export function createRecord(keys: string[], values: T[]): Record { +export function createRecord( + keys: string[], + values: T[] +): Record { return Object.fromEntries( zip(keys, values).map(([k, v]) => [k.toString(), v]) ); diff --git a/solauto-sdk/src/utils/jitoUtils.ts b/solauto-sdk/src/utils/jitoUtils.ts index e145c6a9..d1031f7b 100644 --- a/solauto-sdk/src/utils/jitoUtils.ts +++ b/solauto-sdk/src/utils/jitoUtils.ts @@ -19,6 +19,7 @@ import { BundleSimulationError } from "../types"; import { assembleFinalTransaction, getComputeUnitPriceEstimate, + prependTx, sendSingleOptimizedTransaction, systemTransferUmiIx, } from "./solanaUtils"; @@ -81,8 +82,8 @@ async function simulateJitoBundle(umi: Umi, txs: VersionedTransaction[]) { { encoding: "base64", commitment: "confirmed", - preExecutionAccountsConfigs: txs.map((_) => {}), - postExecutionAccountsConfigs: txs.map((_) => {}), + preExecutionAccountsConfigs: txs.map((_) => { }), + postExecutionAccountsConfigs: txs.map((_) => { }), skipSigVerify: true, }, ]); @@ -160,17 +161,15 @@ async function umiToVersionedTransactions( feeEstimates?: number[], computeUnitLimits?: number[] ): Promise { - let builtTxs = await Promise.all( - txs.map(async (tx, i) => { - return assembleFinalTransaction( - umi, - tx, - feeEstimates ? feeEstimates[i] : undefined, - computeUnitLimits ? computeUnitLimits[i] : undefined - ) - .setBlockhash(blockhash) - .build(umi); - }) + let builtTxs = txs.map((tx, i) => + assembleFinalTransaction( + umi, + tx, + feeEstimates ? feeEstimates[i] : undefined, + computeUnitLimits ? computeUnitLimits[i] : undefined + ) + .setBlockhash(blockhash) + .build(umi) ); if (sign) { @@ -213,7 +212,6 @@ async function pollBundleStatus( const statuses = await retryWithExponentialBackoff( async () => { const resp = await getBundleStatus(umi, bundleId); - // TODO: remove me if (resp?.value?.length > 0 && resp.value[0] === null) { throw new Error("No confirmation status"); } @@ -280,7 +278,7 @@ export async function sendJitoBundledTransactions( abortController?: AbortController ): Promise { const txs = [...transactions]; - + if (txs.length === 1) { const resp = await sendSingleOptimizedTransaction( umi, @@ -304,15 +302,18 @@ export async function sendJitoBundledTransactions( txs.map((x) => x.getTransactionSize(umi)) ); - txs[0] = txs[0].prepend(getTipInstruction(userSigner, 150_000)); + txs[0] = prependTx(txs[0], [getTipInstruction(userSigner, 250_000)]); const latestBlockhash = ( - await umi.rpc.getLatestBlockhash({ commitment: "confirmed" }) + await retryWithExponentialBackoff( + async () => await umi.rpc.getLatestBlockhash({ commitment: "confirmed" }) + ) ).blockhash; if (abortController?.signal.aborted) { return; } + let builtTxs: VersionedTransaction[] = []; let simulationResults: SimulatedTransactionResponse[] | undefined; if (txType !== "skip-simulation") { @@ -324,13 +325,15 @@ export async function sendJitoBundledTransactions( txs, false, undefined, - Array(txs.length).map(_ => 1_400_000) + Array(txs.length) + .fill(null) + .map((_) => 1_400_000) ); simulationResults = await simulateJitoBundle(umi, builtTxs); } const feeEstimates = usePriorityFee(priorityFeeSetting) - ? await Promise.all( + ? await Promise.all( txs.map( async (x) => (await getComputeUnitPriceEstimate( @@ -341,7 +344,7 @@ export async function sendJitoBundledTransactions( )) ?? 1000000 ) ) - : undefined; + : undefined; if (abortController?.signal.aborted) { return; diff --git a/solauto-sdk/src/utils/jupiterUtils.ts b/solauto-sdk/src/utils/jupiterUtils.ts index 48d58115..90327adc 100644 --- a/solauto-sdk/src/utils/jupiterUtils.ts +++ b/solauto-sdk/src/utils/jupiterUtils.ts @@ -1,6 +1,6 @@ import { PublicKey, TransactionInstruction } from "@solana/web3.js"; import { Instruction } from "@jup-ag/api"; -import { retryWithExponentialBackoff } from "./generalUtils"; +import { getBatches, retryWithExponentialBackoff } from "./generalUtils"; export function jupIxToSolanaIx( instruction: Instruction @@ -17,31 +17,28 @@ export function jupIxToSolanaIx( } export async function getJupPriceData(mints: PublicKey[]) { - const data = await retryWithExponentialBackoff(async () => { - const res = await ( - await fetch( - "https://api.jup.ag/price/v2?ids=" + - mints.map((x) => x.toString()).join(",") + - "&showExtraInfo=true" - ) - ).json(); - const result = res.data; - if (!result || result === null || typeof result !== "object") { - throw new Error("Failed to get token prices using Jupiter"); - } + const batches = getBatches(mints, 50); - const trueData: { [key: string]: any } = Object.entries( - result as { [key: string]: any } - ).reduce( - (acc, [key, val]) => - !val?.extraInfo?.quotedPrice?.sellAt - ? { ...acc, [key]: { ...val, price: "0" } } - : { ...acc, [key]: val }, - {} - ); + const results = await Promise.all( + batches.map((batch) => + retryWithExponentialBackoff(async () => { + const res = await ( + await fetch( + "https://lite-api.jup.ag/price/v3?ids=" + + batch.map((x) => x.toString()).join(",") + ) + ).json(); - return trueData; - }, 3); + if (!res || typeof res !== "object") { + throw new Error("Failed to get token prices using Jupiter"); + } - return data; + return res; + }, 6, 250) + ) + ); + + const mergedResults = Object.assign({}, ...results); + + return mergedResults; } diff --git a/solauto-sdk/src/utils/marginfi/data.ts b/solauto-sdk/src/utils/marginfi/data.ts index 31be84f7..c4b41327 100644 --- a/solauto-sdk/src/utils/marginfi/data.ts +++ b/solauto-sdk/src/utils/marginfi/data.ts @@ -16,7 +16,7 @@ import { OracleSetup, safeFetchBank, safeFetchMarginfiAccount, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { ContextUpdates } from "../solautoUtils"; import { fetchTokenPrices, safeGetPrice } from "../priceUtils"; import { currentUnixSeconds, validPubkey } from "../generalUtils"; @@ -288,9 +288,9 @@ async function getTokenUsage( }, baseAmountMarketPriceUsd: toBaseUnit(marketPrice, USD_DECIMALS), borrowFeeBps: isAsset ? 0 : toBps(originationFee), - padding1: [], - padding2: [], - padding: new Uint8Array([]), + padding1: new Array(5).fill(0), + padding2: new Array(8).fill(0), + padding: new Uint8Array(32), }; } @@ -513,9 +513,9 @@ export async function getMarginfiAccountPositionState( maxLtvBps, liqThresholdBps, lastRefreshed: BigInt(currentUnixSeconds()), - padding1: [], - padding2: [], - padding: [], + padding1: new Array(6).fill(0), + padding2: new Array(4).fill(0), + padding: new Array(2).fill(0), }, }; } diff --git a/solauto-sdk/src/utils/marginfi/general.ts b/solauto-sdk/src/utils/marginfi/general.ts index c07a550d..1d6866b2 100644 --- a/solauto-sdk/src/utils/marginfi/general.ts +++ b/solauto-sdk/src/utils/marginfi/general.ts @@ -7,9 +7,7 @@ import { import { ProgramEnv, MarginfiAssetAccounts } from "../../types"; import { getMarginfiAccounts, - MARGINFI_SPONSORED_SHARD_ID, MarginfiBankAccountsMap, - PYTH_SPONSORED_SHARD_ID, } from "../../constants"; import { Balance, @@ -20,14 +18,14 @@ import { MarginfiAccount, OracleSetup, safeFetchAllBank, -} from "../../marginfi-sdk"; +} from "../../externalSdks/marginfi"; import { bytesToI80F48, fromBaseUnit, toBps } from "../numberUtils"; import { getTokenAccountData } from "../accountUtils"; import { getMostUpToDatePythOracle, - getPythPushOracleAddress, } from "../pythUtils"; import { getAccountMeta } from "../solanaUtils"; +import { validPubkey } from "../generalUtils"; export function createDynamicMarginfiProgram(env?: ProgramEnv): Program { return { @@ -69,15 +67,11 @@ export async function getAllBankRelatedAccounts( ); const oracles = banksData - .map((bank) => { - const oracleKey = toWeb3JsPublicKey(bank.config.oracleKeys[0]); - return bank.config.oracleSetup === OracleSetup.PythPushOracle - ? [ - getPythPushOracleAddress(oracleKey, PYTH_SPONSORED_SHARD_ID), - getPythPushOracleAddress(oracleKey, MARGINFI_SPONSORED_SHARD_ID), - ] - : [oracleKey]; - }) + .map((bank) => + bank.config.oracleKeys + .map((x) => toWeb3JsPublicKey(x)) + .filter((x) => validPubkey(x)) + ) .flat() .map((x) => x.toString()); @@ -118,14 +112,15 @@ export async function getMarginfiPriceOracle( bank.data = await fetchBank(umi, fromWeb3JsPublicKey(bank.pk!)); } - const oracleKey = toWeb3JsPublicKey(bank.data.config.oracleKeys[0]); const priceOracle = bank.data.config.oracleSetup === OracleSetup.PythPushOracle - ? await getMostUpToDatePythOracle(umi, [ - getPythPushOracleAddress(oracleKey, PYTH_SPONSORED_SHARD_ID), - getPythPushOracleAddress(oracleKey, MARGINFI_SPONSORED_SHARD_ID), - ]) - : oracleKey; + ? await getMostUpToDatePythOracle( + umi, + bank.data.config.oracleKeys + .map((x) => toWeb3JsPublicKey(x)) + .filter((x) => validPubkey(x)) + ) + : toWeb3JsPublicKey(bank.data.config.oracleKeys[0]); return priceOracle; } @@ -224,3 +219,16 @@ export function marginfiAccountEmpty(marginfiAccount: MarginfiAccount) { ) === undefined ); } + +export function composeRemainingAccounts(accs: AccountMeta[]): AccountMeta[] { + const banksAndOracles: [AccountMeta, AccountMeta][] = accs.reduce( + (acc: [AccountMeta, AccountMeta][], _, i) => + i % 2 === 0 ? [...acc, [accs[i], accs[i + 1]]] : acc, + [] + ); + return banksAndOracles + .sort((a, b) => + b[0].pubkey.toString().localeCompare(a[0].pubkey.toString()) + ) + .flat(); +} diff --git a/solauto-sdk/src/utils/numberUtils.ts b/solauto-sdk/src/utils/numberUtils.ts index 99b7e11a..b772da96 100644 --- a/solauto-sdk/src/utils/numberUtils.ts +++ b/solauto-sdk/src/utils/numberUtils.ts @@ -8,6 +8,8 @@ import { import { PositionState, PriceType } from "../generated"; import { RoundAction } from "../types"; import { safeGetPrice } from "./priceUtils"; +import { StrategyType, strategyType } from "./stringUtils"; +import { getDebtAdjustment } from "../services"; export function calcNetWorthUsd(state?: PositionState) { return fromRoundedUsdValue(state?.netWorth.baseAmountUsdValue ?? BigInt(0)); @@ -215,3 +217,32 @@ export function realtimeUsdToEmaUsd( safeGetPrice(mint, PriceType.Ema)! ); } + +export function boostSettingToLeverageFactor( + supplyMint: PublicKey, + debtMint: PublicKey, + boostToBps: number, + liqThresholdBps: number +) { + const strategy = strategyType(supplyMint, debtMint); + const supplyUsd = 100; + const debtUsd = getDebtAdjustment( + liqThresholdBps, + { supplyUsd: 100, debtUsd: 0 }, + boostToBps + ).debtAdjustmentUsd; + return getLeverageFactor(strategy, supplyUsd + debtUsd, debtUsd); +} + +export function getLeverageFactor( + strategyType: StrategyType, + supplyUsd: number, + debtUsd: number +): number { + return ( + (strategyType === "Long" || strategyType === "Ratio" + ? supplyUsd + : debtUsd) / + (supplyUsd - debtUsd) + ); +} diff --git a/solauto-sdk/src/utils/priceUtils.ts b/solauto-sdk/src/utils/priceUtils.ts index dffa57b1..cc3f4eb3 100644 --- a/solauto-sdk/src/utils/priceUtils.ts +++ b/solauto-sdk/src/utils/priceUtils.ts @@ -16,7 +16,7 @@ import { } from "./generalUtils"; import { getJupPriceData } from "./jupiterUtils"; import { PriceType } from "../generated"; -import { PriceBias } from "../marginfi-sdk"; +import { PriceBias } from "../externalSdks/marginfi"; interface PriceResult { realtimePrice: number; @@ -45,8 +45,10 @@ export async function fetchTokenPrices( const pythMints = newMints.filter((x) => Object.keys(PYTH_PRICE_FEED_IDS).includes(x.toString()) ); - const switchboardMints = newMints.filter((x) => - Object.keys(SWITCHBOARD_PRICE_FEED_IDS).includes(x.toString()) + const switchboardMints = newMints.filter( + (x) => + Object.keys(SWITCHBOARD_PRICE_FEED_IDS).includes(x.toString()) && + !pythMints.map((y) => y.toString()).includes(x.toString()) ); const otherMints = newMints.filter( (x) => !pythMints.includes(x) && !switchboardMints.includes(x) @@ -88,7 +90,9 @@ export async function getPythPrices( const getReq = async () => await fetch( - `https://hermes.pyth.network/v2/updates/price/latest?${priceFeedIds.map((x) => `ids%5B%5D=${x}`).join("&")}` + `https://hermes.pyth.network/v2/updates/price/latest?${priceFeedIds + .map((x) => `ids%5B%5D=${x}`) + .join("&")}` ); const deriveValue = (price: number, exponent: number) => { @@ -123,7 +127,7 @@ export async function getPythPrices( return prices; }, 5, - 200 + 250 ); return createRecord( @@ -156,7 +160,7 @@ export async function getSwitchboardPrices( } const { CrossbarClient } = SwbCommon; - const crossbar = CrossbarClient.default(); + const crossbar = new CrossbarClient("https://integrator-crossbar.mrgn.app/"); let prices: Record = {}; try { @@ -212,10 +216,15 @@ export async function getJupTokenPrices( const data = getSortedPriceData(await getJupPriceData(mints), mints); const prices: Record = Object.fromEntries( - Object.entries(data).map(([mint, x]) => [ + mints.map((mint) => [ mint, - x !== null && typeof x === "object" && "price" in x - ? { realtimePrice: parseFloat(x.price as string) } + data !== null && + typeof data === "object" && + typeof data[mint.toString()] === "object" && + "usdPrice" in data[mint.toString()] + ? { + realtimePrice: parseFloat(data[mint.toString()].usdPrice as string), + } : { realtimePrice: 0 }, ]) ); diff --git a/solauto-sdk/src/utils/pythUtils.ts b/solauto-sdk/src/utils/pythUtils.ts index 95f6d751..8ca99a49 100644 --- a/solauto-sdk/src/utils/pythUtils.ts +++ b/solauto-sdk/src/utils/pythUtils.ts @@ -2,7 +2,7 @@ import { PublicKey } from "@solana/web3.js"; import { publicKey, Umi } from "@metaplex-foundation/umi"; import { PYTH_PUSH_PROGRAM } from "../constants"; import { u16ToArrayBufferLE, zip } from "./generalUtils"; -import { safeFetchAllPriceUpdateV2Account } from "../pyth-sdk"; +import { safeFetchAllPriceUpdateV2Account } from "../externalSdks/pyth"; export async function getMostUpToDatePythOracle( umi: Umi, @@ -23,15 +23,3 @@ export async function getMostUpToDatePythOracle( return oracles[0][0]; } - -export function getPythPushOracleAddress( - feedId: PublicKey, - shardId: number, - programId: PublicKey = PYTH_PUSH_PROGRAM -): PublicKey { - const shardBytes = u16ToArrayBufferLE(shardId); - return PublicKey.findProgramAddressSync( - [shardBytes, feedId.toBuffer()], - programId - )[0]; -} diff --git a/solauto-sdk/src/utils/solanaUtils.ts b/solauto-sdk/src/utils/solanaUtils.ts index 4abdeb2c..067f7c51 100644 --- a/solauto-sdk/src/utils/solanaUtils.ts +++ b/solauto-sdk/src/utils/solanaUtils.ts @@ -38,7 +38,7 @@ import { PriorityFeeSetting, ProgramEnv, TransactionRunType } from "../types"; import { getLendingAccountEndFlashloanInstructionDataSerializer, getLendingAccountStartFlashloanInstructionDataSerializer, -} from "../marginfi-sdk"; +} from "../externalSdks/marginfi"; import { getTokenAccount } from "./accountUtils"; import { arraysAreEqual, @@ -209,6 +209,79 @@ export async function getAddressLookupInputs( }, new Array()); } +export function prependTx( + tx: TransactionBuilder, + txsToAdd: (TransactionBuilder | WrappedInstruction)[] +) { + const instructions = tx.getInstructions(); + const keccakIdx = instructions.findIndex( + (x) => + x.programId.toString() === "KeccakSecp256k11111111111111111111111111111" + ); + if (keccakIdx !== -1) { + const [beforeKeccak, afterKeccak] = tx.splitByIndex(keccakIdx + 1); + // IMPORTANT: Preserve lookup tables from original transaction + const lookupTables = tx.options.addressLookupTables ?? []; + let finalTx = transactionBuilder() + .setAddressLookupTables(lookupTables) + .add(beforeKeccak); + for (const txToAdd of txsToAdd) { + finalTx = finalTx.append(txToAdd); + } + return finalTx.add(afterKeccak); + } else { + let finalTx = tx; + for (const txToAdd of txsToAdd) { + finalTx = finalTx.prepend(txToAdd); + } + return finalTx; + } +} + +const MAX_TX_SIZE = 1232; + +// Dummy blockhash for size checking (all zeros, 32 bytes base58 encoded) +const DUMMY_BLOCKHASH = "11111111111111111111111111111111"; + +/** + * Safely checks if a transaction can be serialized and returns its actual size. + * Returns undefined if serialization fails. + */ +export function getActualTxSize( + umi: Umi, + tx: TransactionBuilder +): number | undefined { + try { + // Set a dummy blockhash if not already set, just for size checking + const txWithBlockhash = tx.setBlockhash(DUMMY_BLOCKHASH); + // Build the transaction and convert to web3.js format + const builtTx = txWithBlockhash.build(umi); + const web3Tx = toWeb3JsTransaction(builtTx); + // Actually serialize to get the real size + const serialized = web3Tx.serialize(); + return serialized.length; + } catch (e) { + // Serialization failed - transaction is too large or malformed + return undefined; + } +} + +/** + * Checks if a transaction can fit in a single transaction by actually serializing it. + * More accurate than getTransactionSize() estimation. + */ +export function canSerializeTransaction( + umi: Umi, + tx: TransactionBuilder, + buffer: number = 0 +): boolean { + const size = getActualTxSize(umi, tx); + if (size === undefined) { + return false; + } + return size + buffer <= MAX_TX_SIZE; +} + export function addTxOptimizations( umi: Umi, tx: TransactionBuilder, @@ -226,12 +299,14 @@ export function addTxOptimizations( const allOptimizations = tx.prepend(computePriceIx).prepend(computeLimitIx); const withCuPrice = tx.prepend(computePriceIx); const withCuLimit = tx.prepend(computeLimitIx); - if (allOptimizations.fitsInOneTransaction(umi)) { - return allOptimizations; - } else if (withCuPrice.fitsInOneTransaction(umi)) { - return withCuPrice; - } else if (withCuLimit.fitsInOneTransaction(umi)) { - return withCuLimit; + + // Use actual serialization check instead of estimate + if (canSerializeTransaction(umi, allOptimizations)) { + return prependTx(tx, [computePriceIx, computeLimitIx]); + } else if (canSerializeTransaction(umi, withCuPrice)) { + return prependTx(tx, [computePriceIx]); + } else if (canSerializeTransaction(umi, withCuLimit)) { + return prependTx(tx, [computeLimitIx]); } else { return tx; } @@ -331,6 +406,7 @@ export async function getQnComputeUnitPriceEstimate( return await customRpcCall(umi, "qn_estimatePriorityFees", { last_n_blocks: blockheight, account: programId.toString(), + api_version: 2, }); } @@ -387,27 +463,29 @@ async function spamSendTransactionUntilConfirmed( blockhash: BlockhashWithExpiryBlockHeight, spamInterval: number = 1500 ): Promise { - let transactionSignature: string | null = null; + let transactionSignature: string | undefined; const sendTx = async () => { try { const txSignature = await connection.sendRawTransaction( Buffer.from(transaction.serialize()), - { skipPreflight: true, maxRetries: 0 } + { skipPreflight: true, maxRetries: 3 } ); - transactionSignature = txSignature; + if (!transactionSignature) { + transactionSignature = txSignature; + } consoleLog(`Transaction sent`); } catch (e) {} }; - await sendTx(); - const sendIntervalId = setInterval(async () => { await sendTx(); }, spamInterval); + await new Promise((resolve) => setTimeout(resolve, spamInterval * 4)); + if (!transactionSignature) { - throw new Error("Failed to send"); + throw new Error("No transaction signature found"); } const resp = await connection @@ -451,7 +529,9 @@ export async function sendSingleOptimizedTransaction( ]); consoleLog("Unique account locks: ", Array.from(new Set(accounts)).length); - const blockhash = await connection.getLatestBlockhash("confirmed"); + const blockhash = await retryWithExponentialBackoff( + async () => await connection.getLatestBlockhash("confirmed") + ); if (abortController?.signal.aborted) { return; diff --git a/solauto-sdk/src/utils/solautoUtils.ts b/solauto-sdk/src/utils/solautoUtils.ts index f98ef1f4..651c5201 100644 --- a/solauto-sdk/src/utils/solautoUtils.ts +++ b/solauto-sdk/src/utils/solautoUtils.ts @@ -19,7 +19,7 @@ import { getSolautoPositionAccountDataSerializer, getSolautoPositionSize, } from "../generated"; -import { ALL_SUPPORTED_TOKENS, SOLAUTO_PROD_PROGRAM } from "../constants"; +import { SOLAUTO_PROD_PROGRAM } from "../constants"; import { SolautoPositionDetails } from "../types"; import { SolautoClient, @@ -403,12 +403,12 @@ export class ContextUpdates { ...dca.automation, intervalSeconds: BigInt(dca.automation.intervalSeconds), unixStartDate: BigInt(dca.automation.unixStartDate), - padding: new Uint8Array([]), - padding1: [], + padding: new Uint8Array(32), + padding1: new Array(4).fill(0), }, dcaInBaseUnit: BigInt(dca.dcaInBaseUnit), tokenType: dca.tokenType, - padding: [], + padding: new Array(31).fill(0), }; } else if (update.type === "cancellingDca") { this.cancellingDca = update.value; diff --git a/solauto-sdk/src/utils/stringUtils.ts b/solauto-sdk/src/utils/stringUtils.ts index 4f6593e4..baf85233 100644 --- a/solauto-sdk/src/utils/stringUtils.ts +++ b/solauto-sdk/src/utils/stringUtils.ts @@ -6,10 +6,10 @@ import { tokenInfo } from "./generalUtils"; export const StrategyTypes = ["Long", "Short", "Ratio"] as const; export type StrategyType = (typeof StrategyTypes)[number]; -function adjustedTicker(mint?: PublicKey) { +export function adjustedTicker(mint?: PublicKey) { const info = tokenInfo(mint); - if (info.ticker.toLowerCase() === "wbtc") { + if (info.ticker.toLowerCase().includes("btc")) { return "BTC"; } else if (info.ticker.toLowerCase() === "weth") { return "ETH"; diff --git a/solauto-sdk/src/utils/switchboardUtils.ts b/solauto-sdk/src/utils/switchboardUtils.ts index 7f635d6f..d55be1b7 100644 --- a/solauto-sdk/src/utils/switchboardUtils.ts +++ b/solauto-sdk/src/utils/switchboardUtils.ts @@ -9,16 +9,22 @@ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters"; import { AnchorProvider, Idl, Program } from "@coral-xyz/anchor"; import * as OnDemand from "@switchboard-xyz/on-demand"; import Big from "big.js"; -import switchboardIdl from "../idls/switchboard.json"; -import { PRICES, SWITCHBOARD_PRICE_FEED_IDS } from "../constants"; +import { + PRICES, + SWITCHBOARD_PRICE_FEED_IDS, + UPDATE_ORACLE_TX_NAME, +} from "../constants"; import { TransactionItemInputs } from "../types"; import { + consoleLog, currentUnixSeconds, retryWithExponentialBackoff, } from "./generalUtils"; import { getWrappedInstruction } from "./solanaUtils"; +import { CrossbarClient } from "@switchboard-xyz/common"; +import { SolautoClient, TransactionItem } from "../services"; -export function getPullFeed( +export async function getPullFeed( conn: Connection, mint: PublicKey, wallet?: PublicKey @@ -37,13 +43,24 @@ export function getPullFeed( dummyWallet, AnchorProvider.defaultOptions() ); - const program = new Program(switchboardIdl as Idl, provider); - const { PullFeed } = OnDemand; - return new PullFeed( - program, - new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) - ); + consoleLog("Pulling SWB program..."); + const { PullFeed, Queue, ON_DEMAND_MAINNET_PID } = OnDemand; + const sbProgram = await Program.at(ON_DEMAND_MAINNET_PID, provider); + + const crossbar = new CrossbarClient("https://integrator-crossbar.mrgn.app/"); + const queue = await Queue.loadDefault(sbProgram); + const gateway = await queue.fetchGatewayFromCrossbar(crossbar as any); + + consoleLog("Pulled SWB program!"); + consoleLog("Feed id:", SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId); + return { + gateway, + feed: new PullFeed( + sbProgram, + new PublicKey(SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId) + ), + }; } export async function buildSwbSubmitResponseTx( @@ -51,10 +68,17 @@ export async function buildSwbSubmitResponseTx( signer: Signer, mint: PublicKey ): Promise { - const feed = getPullFeed(conn, mint, toWeb3JsPublicKey(signer.publicKey)); - const [pullIx, responses] = await retryWithExponentialBackoff( + const { feed, gateway } = await getPullFeed( + conn, + mint, + toWeb3JsPublicKey(signer.publicKey) + ); + + consoleLog("Fetching crank IX..."); + const [pullIxs, responses] = await retryWithExponentialBackoff( async () => { const res = await feed.fetchUpdateIx({ + gateway: gateway.endpoint(), chain: "solana", network: "mainnet-beta", }); @@ -67,11 +91,13 @@ export async function buildSwbSubmitResponseTx( 200 ); - if (!pullIx) { + if (!pullIxs || !pullIxs.length) { throw new Error("Unable to fetch SWB crank IX"); } + consoleLog("Setting price locally..."); const price = (responses[0].value as Big).toNumber(); + consoleLog(price); PRICES[mint.toString()] = { realtimePrice: price, confInterval: 0, @@ -80,11 +106,15 @@ export async function buildSwbSubmitResponseTx( time: currentUnixSeconds(), }; + consoleLog("Returning SWB transaction data..."); return { - tx: transactionBuilder([getWrappedInstruction(signer, pullIx!)]), + tx: transactionBuilder( + pullIxs.map((x) => getWrappedInstruction(signer, x)) + ), lookupTableAddresses: responses .filter((x) => Boolean(x.oracle.lut?.key)) .map((x) => x.oracle.lut!.key.toString()), + orderPrio: -2, }; } @@ -103,7 +133,7 @@ export async function getSwitchboardFeedData( const results = await Promise.all( mints.map(async (mint) => { - const feed = getPullFeed(conn, mint); + const { feed } = await getPullFeed(conn, mint); const result = await feed.loadData(); const price = Number(result.result.value) / Math.pow(10, 18); const stale = @@ -119,3 +149,41 @@ export async function getSwitchboardFeedData( export function isSwitchboardMint(mint: PublicKey | string) { return Object.keys(SWITCHBOARD_PRICE_FEED_IDS).includes(mint.toString()); } + +export async function addSwbOraclePullTxs( + client: SolautoClient, + txs: TransactionItem[] +) { + const switchboardMints = [ + ...(isSwitchboardMint(client.pos.supplyMint) + ? [client.pos.supplyMint] + : []), + ...(isSwitchboardMint(client.pos.debtMint) ? [client.pos.debtMint] : []), + ]; + + if (txs.find((x) => x.oracleInteractor) && switchboardMints.length) { + consoleLog("Checking if oracle update(s) needed..."); + const staleOracles = + ( + await getSwitchboardFeedData(client.connection, switchboardMints) + ).filter((x) => x.stale).length > 0; + + if (staleOracles) { + consoleLog("Requires oracle update(s)..."); + const oracleTxs = switchboardMints.map( + (x) => + new TransactionItem( + async () => + await buildSwbSubmitResponseTx( + client.connection, + client.signer, + x + ), + UPDATE_ORACLE_TX_NAME + ) + ); + consoleLog("Set crank IXs in TX"); + txs.unshift(...oracleTxs); + } + } +} diff --git a/solauto-sdk/tests/transactions/shared.ts b/solauto-sdk/tests/transactions/shared.ts index 4394e2ca..7310e18c 100644 --- a/solauto-sdk/tests/transactions/shared.ts +++ b/solauto-sdk/tests/transactions/shared.ts @@ -22,6 +22,7 @@ import { closeSolautoPosition, getMarginfiAccounts, ClientTransactionsManager, + ProgramEnv, } from "../../src"; export async function e2eTransactionTest( @@ -29,13 +30,15 @@ export async function e2eTransactionTest( testProgram: boolean, lendingPlatform: LendingPlatform, withFlashLoan: boolean, - showLogs?: boolean + showLogs?: boolean, + lpEnv?: ProgramEnv ) { const client = getClient(lendingPlatform, { signer, showLogs, rpcUrl: LOCAL_IRONFORGE_API_URL, programId: testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM, + lpEnv, }); const supplyMint = new PublicKey(NATIVE_MINT); @@ -43,7 +46,7 @@ export async function e2eTransactionTest( await client.initializeNewSolautoPosition({ positionId: 1, - lpPoolAccount: getMarginfiAccounts().defaultGroup, + lpPoolAccount: getMarginfiAccounts(lpEnv).defaultGroup, supplyMint, debtMint, }); diff --git a/solauto-sdk/tests/transactions/solautoMarginfi.ts b/solauto-sdk/tests/transactions/solautoMarginfi.ts index a04d44f4..b8b02e3a 100644 --- a/solauto-sdk/tests/transactions/solautoMarginfi.ts +++ b/solauto-sdk/tests/transactions/solautoMarginfi.ts @@ -1,11 +1,13 @@ import { describe, it } from "mocha"; -import { LendingPlatform } from "../../src"; +import { LendingPlatform, ProgramEnv } from "../../src"; import { setupTest } from "../shared"; import { e2eTransactionTest } from "./shared"; describe("Solauto Marginfi tests", async () => { const signer = setupTest(); const testProgram = false; + const showLogs = false; + const lpEnv: ProgramEnv = "Prod"; it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => { await e2eTransactionTest( @@ -13,7 +15,8 @@ describe("Solauto Marginfi tests", async () => { testProgram, LendingPlatform.Marginfi, false, - false + showLogs, + lpEnv ); }); @@ -23,7 +26,8 @@ describe("Solauto Marginfi tests", async () => { testProgram, LendingPlatform.Marginfi, true, - false + showLogs, + lpEnv ); }); }); diff --git a/solauto-sdk/tests/unit/accounts.ts b/solauto-sdk/tests/unit/accounts.ts index d574ab59..0eac09c7 100644 --- a/solauto-sdk/tests/unit/accounts.ts +++ b/solauto-sdk/tests/unit/accounts.ts @@ -24,7 +24,6 @@ async function hasTokenAccounts(wallet: PublicKey) { ) ); for (let i = 0; i < tokenAccounts.length; i++) { - console.log(tokenAccounts[i].publicKey.toString()); if (!tokenAccounts[i].exists) { console.log( `Missing ${wallet.toString()} TA for `, @@ -55,7 +54,9 @@ describe("Assert Solauto fee token accounts are created", async () => { !ismAccounts.find((x) => group.equals(toWeb3JsPublicKey(x.group))) ); - console.log("Missing ISM accounts", missingIsmAccounts); + if (missingIsmAccounts.length > 0) { + console.log("Missing ISM accounts", missingIsmAccounts); + } assert(missingIsmAccounts.length === 0); }); });