From e0ff4399dfe164e71a1aea5e89687f44ba91b312 Mon Sep 17 00:00:00 2001 From: Swenschaeferjohann Date: Fri, 20 Dec 2024 05:04:43 +0000 Subject: [PATCH 1/7] wip airship --- package.json | 8 +- pnpm-lock.yaml | 1145 +++++++++++++++-- src/agent/index.ts | 26 +- src/langchain/index.ts | 42 +- src/tools/airdrop_compressed_tokens/index.ts | 228 ++++ src/tools/airdrop_compressed_tokens/types.ts | 69 + src/tools/airdrop_compressed_tokens/worker.ts | 128 ++ src/tools/index.ts | 3 +- src/utils/send_tx.ts | 9 +- 9 files changed, 1518 insertions(+), 140 deletions(-) create mode 100644 src/tools/airdrop_compressed_tokens/index.ts create mode 100644 src/tools/airdrop_compressed_tokens/types.ts create mode 100644 src/tools/airdrop_compressed_tokens/worker.ts diff --git a/package.json b/package.json index 20375b8..ccc197d 100644 --- a/package.json +++ b/package.json @@ -26,15 +26,21 @@ "@metaplex-foundation/umi-web3js-adapters": "^0.9.2", "@solana/spl-token": "^0.4.9", "@solana/web3.js": "^1.95.4", + "better-sqlite3": "^11.7.0", "bs58": "^6.0.0", "dotenv": "^16.4.5", + "drizzle-orm": "^0.38.2", "form-data": "^4.0.1", + "helius-airship-core": "file:../airship/packages/core", "langchain": "^0.3.6", "openai": "^4.75.0", + "sqlocal": "^0.13.0", "typedoc": "^0.26.11" }, "devDependencies": { + "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.9.0", - "ts-node": "^10.9.2" + "ts-node": "^10.9.2", + "typescript": "^5.7.2" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3aaf95d..d459533 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,19 +10,19 @@ importers: dependencies: '@bonfida/spl-name-service': specifier: ^3.0.7 - version: 3.0.7(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + version: 3.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) '@langchain/core': specifier: ^0.3.18 - version: 0.3.23(openai@4.76.3) + version: 0.3.23(openai@4.76.3(zod@3.24.1)) '@langchain/groq': specifier: ^0.1.2 - version: 0.1.2(@langchain/core@0.3.23) + version: 0.1.2(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) '@langchain/langgraph': specifier: ^0.2.27 - version: 0.2.33(@langchain/core@0.3.23) + version: 0.2.33(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) '@langchain/openai': specifier: ^0.3.13 - version: 0.3.14(@langchain/core@0.3.23) + version: 0.3.14(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) '@metaplex-foundation/mpl-core': specifier: ^1.1.1 version: 1.1.1(@metaplex-foundation/umi@0.9.2)(@noble/hashes@1.6.1) @@ -34,41 +34,59 @@ importers: version: 0.9.2 '@metaplex-foundation/umi-bundle-defaults': specifier: ^0.9.2 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@metaplex-foundation/umi-web3js-adapters': specifier: ^0.9.2 - version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8) + version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/spl-token': specifier: ^0.4.9 - version: 0.4.9(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) + version: 0.4.9(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) '@solana/web3.js': specifier: ^1.95.4 - version: 1.95.8 + version: 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + better-sqlite3: + specifier: ^11.7.0 + version: 11.7.0 bs58: specifier: ^6.0.0 version: 6.0.0 dotenv: specifier: ^16.4.5 version: 16.4.7 + drizzle-orm: + specifier: ^0.38.2 + version: 0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0) form-data: specifier: ^4.0.1 version: 4.0.1 + helius-airship-core: + specifier: file:../airship/packages/core + version: file:../airship/packages/core(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0)(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) langchain: specifier: ^0.3.6 - version: 0.3.7(@langchain/core@0.3.23)(@langchain/groq@0.1.2)(openai@4.76.3) + version: 0.3.7(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))(@langchain/groq@0.1.2(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))))(openai@4.76.3(zod@3.24.1)) openai: specifier: ^4.75.0 version: 4.76.3(zod@3.24.1) + sqlocal: + specifier: ^0.13.0 + version: 0.13.0(bufferutil@4.0.8)(drizzle-orm@0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0))(utf-8-validate@5.0.10) typedoc: specifier: ^0.26.11 - version: 0.26.11(typescript@5.6.3) + version: 0.26.11(typescript@5.7.2) devDependencies: + '@types/better-sqlite3': + specifier: ^7.6.12 + version: 7.6.12 '@types/node': specifier: ^22.9.0 version: 22.10.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.10.2)(typescript@5.6.3) + version: 10.9.2(@types/node@22.10.2)(typescript@5.7.2) + typescript: + specifier: ^5.7.2 + version: 5.7.2 packages: @@ -89,10 +107,27 @@ packages: '@cfworker/json-schema@4.0.3': resolution: {integrity: sha512-ZykIcDTVv5UNmKWSTLAs3VukO6NDJkkSKxrgUTDPBkAlORVT3H9n5DbRjRl8xIotklscHdbLIa0b9+y3mQq73g==} + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@coral-xyz/anchor@0.29.0': + resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.29.0': + resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -140,6 +175,14 @@ packages: peerDependencies: '@langchain/core': '>=0.2.21 <0.4.0' + '@lightprotocol/compressed-token@0.13.1': + resolution: {integrity: sha512-5vPP2wV0dI1zlPztxi6UD0vBcAHPM+0MiVMkWdfnlhqBhZUQy7aGnD8IcAf2g0M60RvmPiFSUIKmj64nuw5+sQ==} + peerDependencies: + '@lightprotocol/stateless.js': 0.13.1 + + '@lightprotocol/stateless.js@0.13.1': + resolution: {integrity: sha512-3dmsQJwDl/6oQWAvmai8DvYYi0LNi6yLST3WK6XQDSAX4hc8pMd0gjX7feSaX9aMPKrA3xvH6QsljGB5OKCXBw==} + '@metaplex-foundation/mpl-core@1.1.1': resolution: {integrity: sha512-h1kLw+cGaV8SiykoHDb1/G01+VYqtJXAt0uGuO5+2Towsdtc6ET4M62iqUnh4EacTVMIW1yYHsKsG/LYWBCKaA==} peerDependencies: @@ -372,6 +415,10 @@ packages: '@solana/web3.js@1.95.8': resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + '@sqlite.org/sqlite-wasm@3.47.1-build1': + resolution: {integrity: sha512-3qnVGab3sjJ8ov0ce1rQGZrMkglYEQ/q5fnq1s1BpRWFMYsiJVaLD1zKepcI9E9r3qx7929+2G27Hfsasvrm6Q==} + hasBin: true + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} @@ -387,6 +434,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/better-sqlite3@7.6.12': + resolution: {integrity: sha512-fnQmj8lELIj7BSrZQAdBMHEHX8OZLYIHXqAKT1O7tDfLxaINzf00PMjw22r3N/xXh0w/sGHlO6SVaCQ2mj78lg==} + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -414,6 +464,9 @@ packages: '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -432,6 +485,9 @@ packages: '@ungap/structured-clone@1.2.1': resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} + '@ungap/with-resolvers@0.1.0': + resolution: {integrity: sha512-g7f0IkJdPW2xhY7H4iE72DAsIyfuwEFc6JWc2tYFwKDMWWAF699vGjrM348cwQuOXgHpe1gWFe+Eiyjx/ewvvw==} + JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -463,6 +519,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -481,6 +540,9 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + better-sqlite3@11.7.0: + resolution: {integrity: sha512-mXpa5jnIKKHeoGzBrUJrc65cXFKcILGZpU3FXR0pradUEm9MA7UZz02qfEejaMcm9iXrSOCenwwYMJ/tZ1y5Ig==} + bigint-buffer@1.1.5: resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} engines: {node: '>= 10.0.0'} @@ -491,6 +553,9 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} @@ -515,6 +580,13 @@ packages: 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@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -539,6 +611,30 @@ packages: character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + coincident@1.2.3: + resolution: {integrity: sha512-Uxz3BMTWIslzeWjuQnizGWVg0j6khbvHUQ8+5BdM7WuJEm4ALXwq3wluYoB+uF68uPBz/oUOeJnYURKyfjexlA==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -560,10 +656,25 @@ packages: create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + delay@5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} @@ -576,6 +687,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -583,13 +698,203 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} + drizzle-orm@0.33.0: + resolution: {integrity: sha512-SHy72R2Rdkz0LEq0PSG/IdvnT3nGiWuRk+2tXZQ90GVq/XQhpCzu/EFT3V2rox+w8MlkBQxifF8pCStNYnERfA==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=3' + '@electric-sql/pglite': '>=0.1.1' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/react': '>=18' + '@types/sql.js': '*' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=13.2.0' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + react: '>=18' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/react': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + react: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + + drizzle-orm@0.38.2: + resolution: {integrity: sha512-eCE3yPRAskLo1WpM9OHpFaM70tBEDsWhwR/0M3CKyztAXKR9Qs3asZlcJOEliIcUSg8GuwrlY0dmYDgmm6y5GQ==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/react': '>=18' + '@types/sql.js': '*' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + react: '>=18' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@libsql/client-wasm': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/react': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + react: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -610,6 +915,10 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} @@ -620,9 +929,15 @@ packages: fastestsmallesttextencoderdecoder@1.0.22: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + form-data-encoder@1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} @@ -634,6 +949,15 @@ packages: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + gc-hook@0.3.1: + resolution: {integrity: sha512-E5M+O/h2o7eZzGhzRZGex6hbB3k4NWqO0eA+OzLRLXxhdbYPajZnynPwAtphnh+cRHPwsj5Z80dqZlfI4eK55A==} + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + graphemesplit@2.4.4: resolution: {integrity: sha512-lKrpp1mk1NH26USxC/Asw4OHbhSQf5XfrWZ+CDv/dFVvd1j17kFgMotdJvOesmHkbFX9P9sBfpH8VogxOWLg8w==} @@ -646,6 +970,9 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + helius-airship-core@file:../airship/packages/core: + resolution: {directory: ../airship/packages/core, type: directory} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -655,10 +982,23 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ipaddr.js@2.2.0: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + isomorphic-ws@4.0.1: resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: @@ -690,6 +1030,9 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + langchain@0.3.7: resolution: {integrity: sha512-6/Gkk9Zez3HkbsETFxZVo1iKLmaK3OzkDseC5MYFKVmYFDXFAOyJR3srJ9P61xF8heVdsPixqYIsejBn7/9dXg==} engines: {node: '>=18'} @@ -747,6 +1090,13 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + logform@2.7.0: + resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} + engines: {node: '>= 12.0.0'} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} @@ -786,10 +1136,20 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -797,6 +1157,16 @@ packages: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true + napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-abi@3.71.0: + resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} + engines: {node: '>=10'} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -814,6 +1184,12 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + oniguruma-to-es@0.7.0: resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} @@ -848,9 +1224,26 @@ packages: pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + papaparse@5.4.1: + resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==} + + prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} + engines: {node: '>=10'} + hasBin: true + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + proxy-target@3.0.2: + resolution: {integrity: sha512-FFE1XNwXX/FNC3/P8HiKaJSy/Qk68RitG/QEcLy/bVnTAPlgTAWPZKh0pARLAnpfXQPKyalBhk009NRTgsk8vQ==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -859,6 +1252,14 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -881,6 +1282,10 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} @@ -889,31 +1294,84 @@ packages: shiki@1.24.2: resolution: {integrity: sha512-TR1fi6mkRrzW+SKT5G6uKuc32Dj2EEa7Kj0k8kGqiBINb+C1TiflVOiT9ta6GqOJtC4fraxO5SLUaKBcSY38Fg==} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + sqlocal@0.13.0: + resolution: {integrity: sha512-C38F42jJ47oyDGvHSUHOad+3otFF/B2oL0/s6VkMuhX615P5SP9aZk7gF7y7Q5550wwROKl0Uk+lKQuFUoEYpA==} + peerDependencies: + drizzle-orm: '*' + kysely: '*' + peerDependenciesMeta: + drizzle-orm: + optional: true + kysely: + optional: true + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + 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'} + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -931,6 +1389,12 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + typedoc@0.26.11: resolution: {integrity: sha512-sFEgRRtrcDl2FxVP58Ze++ZK2UQAEvtvvH8rRlig1Ja3o7dDaMHmaBfvJmdGnNEFaLTpQsN8dpvZaTqJSu/Ugw==} engines: {node: '>= 18'} @@ -938,8 +1402,8 @@ packages: peerDependencies: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true @@ -974,6 +1438,9 @@ packages: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true @@ -1009,6 +1476,17 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + winston-transport@4.9.0: + resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} + engines: {node: '>= 12.0.0'} + + winston@3.17.0: + resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} + engines: {node: '>= 12.0.0'} + + 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'} @@ -1059,20 +1537,20 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@bonfida/sns-records@0.0.1(@solana/web3.js@1.95.8)': + '@bonfida/sns-records@0.0.1(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) borsh: 1.0.0 bs58: 5.0.0 buffer: 6.0.3 - '@bonfida/spl-name-service@3.0.7(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)': + '@bonfida/spl-name-service@3.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)': dependencies: - '@bonfida/sns-records': 0.0.1(@solana/web3.js@1.95.8) + '@bonfida/sns-records': 0.0.1(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@noble/curves': 1.7.0 '@scure/base': 1.2.1 - '@solana/spl-token': 0.4.6(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 + '@solana/spl-token': 0.4.6(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) borsh: 2.0.0 buffer: 6.0.3 graphemesplit: 2.4.4 @@ -1087,10 +1565,45 @@ snapshots: '@cfworker/json-schema@4.0.3': {} + '@colors/colors@1.6.0': {} + + '@coral-xyz/anchor@0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.6.1 + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + 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 + + '@coral-xyz/borsh@0.29.0(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer-layout: 1.2.2 + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.0': {} @@ -1100,14 +1613,14 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@langchain/core@0.3.23(openai@4.76.3)': + '@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))': dependencies: '@cfworker/json-schema': 4.0.3 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.15 - langsmith: 0.2.13(openai@4.76.3) + langsmith: 0.2.13(openai@4.76.3(zod@3.24.1)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -1117,19 +1630,19 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/groq@0.1.2(@langchain/core@0.3.23)': + '@langchain/groq@0.1.2(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.23(openai@4.76.3) - '@langchain/openai': 0.3.14(@langchain/core@0.3.23) + '@langchain/core': 0.3.23(openai@4.76.3(zod@3.24.1)) + '@langchain/openai': 0.3.14(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) groq-sdk: 0.5.0 zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) transitivePeerDependencies: - encoding - '@langchain/langgraph-checkpoint@0.0.13(@langchain/core@0.3.23)': + '@langchain/langgraph-checkpoint@0.0.13(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.23(openai@4.76.3) + '@langchain/core': 0.3.23(openai@4.76.3(zod@3.24.1)) uuid: 10.0.0 '@langchain/langgraph-sdk@0.0.32': @@ -1139,17 +1652,17 @@ snapshots: p-retry: 4.6.2 uuid: 9.0.1 - '@langchain/langgraph@0.2.33(@langchain/core@0.3.23)': + '@langchain/langgraph@0.2.33(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.23(openai@4.76.3) - '@langchain/langgraph-checkpoint': 0.0.13(@langchain/core@0.3.23) + '@langchain/core': 0.3.23(openai@4.76.3(zod@3.24.1)) + '@langchain/langgraph-checkpoint': 0.0.13(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) '@langchain/langgraph-sdk': 0.0.32 uuid: 10.0.0 zod: 3.24.1 - '@langchain/openai@0.3.14(@langchain/core@0.3.23)': + '@langchain/openai@0.3.14(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.23(openai@4.76.3) + '@langchain/core': 0.3.23(openai@4.76.3(zod@3.24.1)) js-tiktoken: 1.0.15 openai: 4.76.3(zod@3.24.1) zod: 3.24.1 @@ -1157,11 +1670,39 @@ snapshots: transitivePeerDependencies: - encoding - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.23)': + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.23(openai@4.76.3) + '@langchain/core': 0.3.23(openai@4.76.3(zod@3.24.1)) js-tiktoken: 1.0.15 + '@lightprotocol/compressed-token@0.13.1(@lightprotocol/stateless.js@0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lightprotocol/stateless.js': 0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.4.9(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + + '@lightprotocol/stateless.js@0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@noble/hashes': 1.6.1 + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + superstruct: 2.0.2 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + '@metaplex-foundation/mpl-core@1.1.1(@metaplex-foundation/umi@0.9.2)(@noble/hashes@1.6.1)': dependencies: '@metaplex-foundation/umi': 0.9.2 @@ -1177,18 +1718,18 @@ snapshots: dependencies: '@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-bundle-defaults@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.8)(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.8)(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.8)(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.8)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - encoding @@ -1196,12 +1737,12 @@ snapshots: 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.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.8)(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) + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@noble/curves': 1.7.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@metaplex-foundation/umi-http-fetch@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: @@ -1224,11 +1765,11 @@ snapshots: 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.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.8)(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 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@metaplex-foundation/umi-serializer-data-view@0.9.2(@metaplex-foundation/umi@0.9.2)': dependencies: @@ -1252,16 +1793,16 @@ snapshots: '@metaplex-foundation/umi-serializers-encodings': 0.8.9 '@metaplex-foundation/umi-serializers-numbers': 0.8.9 - '@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(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.8)(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 + '@metaplex-foundation/umi-web3js-adapters': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(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)': + '@metaplex-foundation/umi-web3js-adapters@0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.95.8(bufferutil@4.0.8)(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.8)(utf-8-validate@5.0.10) buffer: 6.0.3 '@metaplex-foundation/umi@0.9.2': @@ -1309,10 +1850,10 @@ snapshots: '@shikijs/vscode-textmate@9.3.1': {} - '@solana/buffer-layout-utils@0.2.0': + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) bigint-buffer: 1.1.5 bignumber.js: 9.1.2 transitivePeerDependencies: @@ -1328,10 +1869,10 @@ snapshots: dependencies: '@solana/errors': 2.0.0-preview.2 - '@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3)': + '@solana/codecs-core@2.0.0-rc.1(typescript@5.7.2)': dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.6.3) - typescript: 5.6.3 + '@solana/errors': 2.0.0-rc.1(typescript@5.7.2) + typescript: 5.7.2 '@solana/codecs-data-structures@2.0.0-preview.2': dependencies: @@ -1339,23 +1880,23 @@ snapshots: '@solana/codecs-numbers': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 - '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3)': + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.7.2)': 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 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.7.2) + '@solana/errors': 2.0.0-rc.1(typescript@5.7.2) + typescript: 5.7.2 '@solana/codecs-numbers@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 - '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3)': + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.7.2)': 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 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) + '@solana/errors': 2.0.0-rc.1(typescript@5.7.2) + typescript: 5.7.2 '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: @@ -1364,13 +1905,13 @@ snapshots: '@solana/errors': 2.0.0-preview.2 fastestsmallesttextencoderdecoder: 1.0.22 - '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)': + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': 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) + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.7.2) + '@solana/errors': 2.0.0-rc.1(typescript@5.7.2) fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.6.3 + typescript: 5.7.2 '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: @@ -1382,14 +1923,14 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)': + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': 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 + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.7.2) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.7.2) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder @@ -1398,59 +1939,59 @@ snapshots: chalk: 5.3.0 commander: 12.1.0 - '@solana/errors@2.0.0-rc.1(typescript@5.6.3)': + '@solana/errors@2.0.0-rc.1(typescript@5.7.2)': dependencies: chalk: 5.3.0 commander: 12.1.0 - typescript: 5.6.3 + typescript: 5.7.2 '@solana/options@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 - '@solana/options@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.7.2)': 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.7.2) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.7.2) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.7.2) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/errors': 2.0.0-rc.1(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/spl-token-group@0.0.4(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)': + '@solana/spl-token-group@0.0.4(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.8 + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)': + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)': + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - '@solana/spl-token@0.4.6(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)': + '@solana/spl-token@0.4.6(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(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.4(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22) - '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.4(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -1459,13 +2000,13 @@ snapshots: - typescript - utf-8-validate - '@solana/spl-token@0.4.9(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)': + '@solana/spl-token@0.4.9(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(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.7(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3) - '@solana/web3.js': 1.95.8 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -1478,7 +2019,7 @@ snapshots: dependencies: buffer: 6.0.3 - '@solana/web3.js@1.95.8': + '@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.26.0 '@noble/curves': 1.7.0 @@ -1491,7 +2032,7 @@ snapshots: bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.1.3 + jayson: 4.1.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) node-fetch: 2.7.0 rpc-websockets: 9.0.4 superstruct: 2.0.2 @@ -1500,6 +2041,8 @@ snapshots: - encoding - utf-8-validate + '@sqlite.org/sqlite-wasm@3.47.1-build1': {} + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -1512,6 +2055,10 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@types/better-sqlite3@7.6.12': + dependencies: + '@types/node': 22.10.2 + '@types/connect@3.4.38': dependencies: '@types/node': 22.10.2 @@ -1543,6 +2090,8 @@ snapshots: '@types/retry@0.12.0': {} + '@types/triple-beam@1.3.5': {} + '@types/unist@3.0.3': {} '@types/uuid@10.0.0': {} @@ -1559,6 +2108,8 @@ snapshots: '@ungap/structured-clone@1.2.1': {} + '@ungap/with-resolvers@0.1.0': {} + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -1584,6 +2135,8 @@ snapshots: argparse@2.0.1: {} + async@3.2.6: {} + asynckit@0.4.0: {} balanced-match@1.0.2: {} @@ -1598,6 +2151,11 @@ snapshots: base64-js@1.5.1: {} + better-sqlite3@11.7.0: + dependencies: + bindings: 1.5.0 + prebuild-install: 7.1.2 + bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 @@ -1608,6 +2166,12 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + bn.js@5.2.1: {} borsh@0.7.0: @@ -1636,6 +2200,13 @@ snapshots: dependencies: base-x: 5.0.0 + buffer-layout@1.2.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -1644,6 +2215,7 @@ snapshots: bufferutil@4.0.8: dependencies: node-gyp-build: 4.8.4 + optional: true camelcase@6.3.0: {} @@ -1655,6 +2227,43 @@ snapshots: character-entities-legacy@3.0.0: {} + chownr@1.1.4: {} + + coincident@1.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@ungap/structured-clone': 1.2.1 + '@ungap/with-resolvers': 0.1.0 + gc-hook: 0.3.1 + proxy-target: 3.0.2 + optionalDependencies: + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -1669,24 +2278,61 @@ snapshots: create-require@1.1.1: {} + cross-fetch@3.1.8: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + crypto-hash@1.3.0: {} + decamelize@1.2.0: {} + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + delay@5.0.0: {} delayed-stream@1.0.0: {} dequal@2.0.3: {} + detect-libc@2.0.3: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 diff@4.0.2: {} + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + dotenv@16.4.7: {} + drizzle-orm@0.33.0(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0): + optionalDependencies: + '@types/better-sqlite3': 7.6.12 + better-sqlite3: 11.7.0 + + drizzle-orm@0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0): + optionalDependencies: + '@types/better-sqlite3': 7.6.12 + better-sqlite3: 11.7.0 + emoji-regex-xs@1.0.0: {} + enabled@2.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + entities@4.5.0: {} es6-promise@4.2.8: {} @@ -1701,14 +2347,20 @@ snapshots: eventemitter3@5.0.1: {} + expand-template@2.0.3: {} + eyes@0.1.8: {} fast-stable-stringify@1.0.0: {} fastestsmallesttextencoderdecoder@1.0.22: {} + fecha@4.2.3: {} + file-uri-to-path@1.0.0: {} + fn.name@1.1.0: {} + form-data-encoder@1.7.2: {} form-data@4.0.1: @@ -1722,6 +2374,12 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 + fs-constants@1.0.0: {} + + gc-hook@0.3.1: {} + + github-from-package@0.0.0: {} + graphemesplit@2.4.4: dependencies: js-base64: 3.7.7 @@ -1758,6 +2416,54 @@ snapshots: dependencies: '@types/hast': 3.0.4 + helius-airship-core@file:../airship/packages/core(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0)(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10): + dependencies: + '@lightprotocol/compressed-token': 0.13.1(@lightprotocol/stateless.js@0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) + '@lightprotocol/stateless.js': 0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.4.9(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + bs58: 6.0.0 + drizzle-orm: 0.33.0(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0) + logform: 2.7.0 + papaparse: 5.4.1 + winston: 3.17.0 + winston-transport: 4.9.0 + transitivePeerDependencies: + - '@aws-sdk/client-rds-data' + - '@cloudflare/workers-types' + - '@electric-sql/pglite' + - '@libsql/client' + - '@neondatabase/serverless' + - '@op-engineering/op-sqlite' + - '@opentelemetry/api' + - '@planetscale/database' + - '@prisma/client' + - '@tidbcloud/serverless' + - '@types/better-sqlite3' + - '@types/pg' + - '@types/react' + - '@types/sql.js' + - '@vercel/postgres' + - '@xata.io/client' + - better-sqlite3 + - bufferutil + - bun-types + - encoding + - expo-sqlite + - fastestsmallesttextencoderdecoder + - knex + - kysely + - mysql2 + - pg + - postgres + - prisma + - react + - sql.js + - sqlite3 + - typescript + - utf-8-validate + html-void-elements@3.0.0: {} humanize-ms@1.2.1: @@ -1766,13 +2472,21 @@ snapshots: ieee754@1.2.1: {} + inherits@2.0.4: {} + + ini@1.3.8: {} + ipaddr.js@2.2.0: {} - isomorphic-ws@4.0.1(ws@7.5.10): - dependencies: - ws: 7.5.10 + is-arrayish@0.3.2: {} - jayson@4.1.3: + is-stream@2.0.1: {} + + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@types/connect': 3.4.38 '@types/node': 12.20.55 @@ -1782,10 +2496,10 @@ snapshots: 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.8)(utf-8-validate@5.0.10)) json-stringify-safe: 5.0.1 uuid: 8.3.2 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -1806,40 +2520,57 @@ snapshots: jsonpointer@5.0.1: {} - langchain@0.3.7(@langchain/core@0.3.23)(@langchain/groq@0.1.2)(openai@4.76.3): + kuler@2.0.0: {} + + langchain@0.3.7(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))(@langchain/groq@0.1.2(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))))(openai@4.76.3(zod@3.24.1)): dependencies: - '@langchain/core': 0.3.23(openai@4.76.3) - '@langchain/groq': 0.1.2(@langchain/core@0.3.23) - '@langchain/openai': 0.3.14(@langchain/core@0.3.23) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.23) + '@langchain/core': 0.3.23(openai@4.76.3(zod@3.24.1)) + '@langchain/openai': 0.3.14(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) js-tiktoken: 1.0.15 js-yaml: 4.1.0 jsonpointer: 5.0.1 - langsmith: 0.2.13(openai@4.76.3) + langsmith: 0.2.13(openai@4.76.3(zod@3.24.1)) openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 10.0.0 yaml: 2.6.1 zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) + optionalDependencies: + '@langchain/groq': 0.1.2(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) transitivePeerDependencies: - encoding - openai - langsmith@0.2.13(openai@4.76.3): + langsmith@0.2.13(openai@4.76.3(zod@3.24.1)): dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 - openai: 4.76.3(zod@3.24.1) p-queue: 6.6.2 p-retry: 4.6.2 semver: 7.6.3 uuid: 10.0.0 + optionalDependencies: + openai: 4.76.3(zod@3.24.1) linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 + logform@2.7.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + lunr@2.3.9: {} make-error@1.3.6: {} @@ -1890,21 +2621,47 @@ snapshots: dependencies: mime-db: 1.52.0 + mimic-response@3.1.0: {} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 + minimist@1.2.8: {} + + mkdirp-classic@0.5.3: {} + ms@2.1.3: {} mustache@4.2.0: {} + napi-build-utils@1.0.2: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-abi@3.71.0: + dependencies: + semver: 7.6.3 + node-domexception@1.0.0: {} node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - node-gyp-build@4.8.4: {} + node-gyp-build@4.8.4: + optional: true + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 oniguruma-to-es@0.7.0: dependencies: @@ -1921,6 +2678,7 @@ snapshots: form-data-encoder: 1.7.2 formdata-node: 4.4.1 node-fetch: 2.7.0 + optionalDependencies: zod: 3.24.1 transitivePeerDependencies: - encoding @@ -1945,12 +2703,51 @@ snapshots: pako@0.2.9: {} + pako@2.1.0: {} + + papaparse@5.4.1: {} + + prebuild-install@7.1.2: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.71.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + property-information@6.5.0: {} + proxy-target@3.0.2: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode.js@2.3.1: {} punycode@2.3.1: {} + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + regenerator-runtime@0.14.1: {} regex-recursion@4.3.0: @@ -1980,6 +2777,8 @@ snapshots: safe-buffer@5.2.1: {} + safe-stable-stringify@2.5.0: {} + semver@7.6.3: {} shiki@1.24.2: @@ -1991,26 +2790,84 @@ snapshots: '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + space-separated-tokens@2.0.2: {} + sqlocal@0.13.0(bufferutil@4.0.8)(drizzle-orm@0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0))(utf-8-validate@5.0.10): + dependencies: + '@sqlite.org/sqlite-wasm': 3.47.1-build1 + coincident: 1.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + drizzle-orm: 0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + stack-trace@0.0.10: {} + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-json-comments@2.0.1: {} + + superstruct@0.15.5: {} + superstruct@2.0.2: {} + tar-fs@2.1.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + text-encoding-utf-8@1.0.2: {} + text-hex@1.0.0: {} + through@2.3.8: {} tiny-inflate@1.0.3: {} + toml@3.0.0: {} + tr46@0.0.3: {} trim-lines@3.0.1: {} - ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.3): + triple-beam@1.4.1: {} + + ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -2024,22 +2881,28 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.3 + typescript: 5.7.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 tslib@2.8.1: {} - typedoc@0.26.11(typescript@5.6.3): + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + tweetnacl@1.0.3: {} + + typedoc@0.26.11(typescript@5.7.2): dependencies: lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 shiki: 1.24.2 - typescript: 5.6.3 + typescript: 5.7.2 yaml: 2.6.1 - typescript@5.6.3: {} + typescript@5.7.2: {} uc.micro@2.1.0: {} @@ -2078,6 +2941,9 @@ snapshots: utf-8-validate@5.0.10: dependencies: node-gyp-build: 4.8.4 + optional: true + + util-deprecate@1.0.2: {} uuid@10.0.0: {} @@ -2108,10 +2974,35 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - ws@7.5.10: {} + winston-transport@4.9.0: + dependencies: + logform: 2.7.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.17.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.7.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + + wrappy@1.0.2: {} + + ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - dependencies: + optionalDependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 diff --git a/src/agent/index.ts b/src/agent/index.ts index 28e2814..efe4925 100644 --- a/src/agent/index.ts +++ b/src/agent/index.ts @@ -17,6 +17,8 @@ import { getTokenDataByAddress, getTokenDataByTicker, stakeWithJup, + createCompressedAirdrop, + sendCompressedAirdrop, } from "../tools"; import { CollectionOptions, PumpFunTokenOptions } from "../types"; import { DEFAULT_OPTIONS } from "../constants"; @@ -57,7 +59,7 @@ export class SolanaAgentKit { uri: string, symbol: string, decimals: number = DEFAULT_OPTIONS.TOKEN_DECIMALS, - initialSupply?: number, + initialSupply?: number ) { return deploy_token(this, name, uri, symbol, decimals, initialSupply); } @@ -87,11 +89,11 @@ export class SolanaAgentKit { } async resolveSolDomain(domain: string) { - return resolveSolDomain(this, domain) + return resolveSolDomain(this, domain); } async getPrimaryDomain(account: PublicKey) { - return getPrimaryDomain(this, account) + return getPrimaryDomain(this, account); } async trade( @@ -136,9 +138,21 @@ export class SolanaAgentKit { ); } - async stake( - amount: number, - ) { + async stake(amount: number) { return stakeWithJup(this, amount); } + + async airdropCompressedTokens( + mintAddress: string, + amount: number, + recipients: string[] + ) { + await createCompressedAirdrop( + this, + new PublicKey(mintAddress), + BigInt(amount), + recipients.map((recipient) => new PublicKey(recipient)) + ); + return await sendCompressedAirdrop(this); + } } diff --git a/src/langchain/index.ts b/src/langchain/index.ts index 71465b4..c2c1d8b 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -181,7 +181,6 @@ export class SolanaMintNFTTool extends Tool { try { const parsedInput = JSON.parse(input); - const result = await this.solanaKit.mintNFT( new PublicKey(parsedInput.collectionMint), { @@ -703,6 +702,46 @@ export class SolanaTokenDataByTickerTool extends Tool { } } +export class SolanaAirdropCompressedTokensTool extends Tool { + name = "solana_airdrop_compressed_tokens"; + description = `Airdrop tokens with zk compression + + Inputs: + - mintAddress: string, the mint address of the token, e.g., "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" + - amount: number, the amount of tokens to airdrop per recipient, e.g., 42 + - recipients: string[], the recipient addresses, e.g., ["JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN", "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"] + `; + + constructor(private solanaKit: SolanaAgentKit) { + super(); + } + + protected async _call(input: string): Promise { + try { + const parsedInput = JSON.parse(input); + if (parsedInput.recipients.length <= 100) { + throw new Error("Recipients array must contain at least 420 addresses"); + } + await this.solanaKit.airdropCompressedTokens( + parsedInput.mintAddress, + parsedInput.amount, + parsedInput.recipients + ); + + return JSON.stringify({ + status: "success", + message: `Airdropped ${parsedInput.amount} tokens to ${parsedInput.recipients.length} recipients.`, + }); + } catch (error: any) { + return JSON.stringify({ + status: "error", + message: error.message, + code: error.code || "UNKNOWN_ERROR", + }); + } + } +} + export function createSolanaTools(solanaKit: SolanaAgentKit) { return [ new SolanaBalanceTool(solanaKit), @@ -724,5 +763,6 @@ export function createSolanaTools(solanaKit: SolanaAgentKit) { new SolanaGetDomainTool(solanaKit), new SolanaTokenDataTool(solanaKit), new SolanaTokenDataByTickerTool(solanaKit), + new SolanaAirdropCompressedTokensTool(solanaKit), ]; } diff --git a/src/tools/airdrop_compressed_tokens/index.ts b/src/tools/airdrop_compressed_tokens/index.ts new file mode 100644 index 0000000..86a25ee --- /dev/null +++ b/src/tools/airdrop_compressed_tokens/index.ts @@ -0,0 +1,228 @@ +import { PublicKey } from "@solana/web3.js"; +import type { DrizzleDb, WorkerMessage, WorkerData } from "./types"; +import { SolanaAgentKit } from "../../agent/index.js"; + +let db: DrizzleDb | null = null; +let dbInitPromise: Promise | null = null; + +async function configureForBrowser() { + try { + const [{ SQLocalDrizzle }, { drizzle }, { sql }, heliusCore] = + await Promise.all([ + // @ts-ignore + import("sqlocal/drizzle"), + import("drizzle-orm/sqlite-proxy"), + import("drizzle-orm"), + import("helius-airship-core"), + ]); + + const { databaseFile } = heliusCore; + + const { driver, batchDriver } = new SQLocalDrizzle({ + databasePath: databaseFile, + verbose: false, + }); + + const database = drizzle(driver, batchDriver); + await database.run(sql`PRAGMA journal_mode = WAL;`); + await database.run(sql`PRAGMA synchronous = normal;`); + + return database; + } catch (error) { + console.error("Browser database configuration failed:", error); + throw error; + } +} + +async function configureForNode() { + try { + const [{ drizzle }, { default: Database }, { databaseFile }] = + await Promise.all([ + import("drizzle-orm/better-sqlite3"), + import("better-sqlite3"), + import("helius-airship-core"), + ]); + + const sqlite = new Database(databaseFile); + sqlite.exec("PRAGMA journal_mode = WAL;"); + sqlite.exec("PRAGMA synchronous = normal;"); + + return drizzle(sqlite); + } catch (error) { + console.error("Node database configuration failed:", error); + throw error; + } +} + +async function configureDatabase(): Promise { + if (!dbInitPromise) { + dbInitPromise = (async () => { + if (!db) { + db = + typeof window !== "undefined" + ? await configureForBrowser() + : await configureForNode(); + } + return db; + })(); + } + + const database = await dbInitPromise; + if (!database) throw new Error("Database initialization failed"); + return database; +} +async function createWorker(): Promise< + Worker | import("worker_threads").Worker +> { + if (typeof window !== "undefined") { + const origin = new URL(window.location.href).origin; + if ( + !origin.startsWith("https://") && + !origin.startsWith("http://localhost") + ) { + throw new Error("Invalid origin protocol"); + } + + const workerCode = ` + self.importScripts('${origin}/airdrop-worker.js'.replace(/[<>'"]/g, '')); + `; + + const blobOptions = { + type: "application/javascript", + headers: { + "Content-Security-Policy": "default-src 'self'", + }, + }; + + const blob = new Blob([workerCode], blobOptions); + const workerUrl = URL.createObjectURL(blob); + const worker = new Worker(workerUrl); + URL.revokeObjectURL(workerUrl); + return worker; + } else { + // Node + const { Worker } = await import("worker_threads"); + const path = await import("path"); + + return new Worker(path.resolve(__dirname, "worker.js")); + } +} + +/** + * Create airdrop with zk compression + * @param agent Agent + * @param mintAddress Token mint public key (non token-2022) + * @param amount amount of tokens to airdrop per recipient + * @param recipients Recipient public keys + */ +export async function createCompressedAirdrop( + agent: SolanaAgentKit, + mintAddress: PublicKey, + amount: bigint, + recipients: PublicKey[] +): Promise { + try { + const database = await configureDatabase(); + const { create, init } = await import("helius-airship-core"); + + await init({ + db: database as any, + }); + + await create({ + db: database as any, + signer: agent.wallet.publicKey, + addresses: recipients, + amount, + mintAddress, + }); + } catch (error) { + console.error("Create operation failed:", error); + throw error; + } +} + +/** + * Send airdrop. must be called after `createCompressedAirdrop` + * @param agent Agent + * @param onProgress Callback for progress updates + * @param onError Callback for error handling + */ +export async function sendCompressedAirdrop( + agent: SolanaAgentKit, + onProgress?: (progress: number) => void, + onError?: (error: Error) => void +): Promise { + let worker: Worker | import("worker_threads").Worker | null = null; + const { databaseFile } = await import("helius-airship-core"); + + return new Promise(async (resolve, reject) => { + const cleanup = () => { + if (worker) { + try { + if ("terminate" in worker) { + worker.terminate(); + } + } catch (error) { + console.error("[Main] Worker cleanup error:", error); + } + } + }; + + try { + worker = await createWorker(); + + const message: WorkerData = { + type: "send", + data: { + secretKey: Array.from(agent.wallet.secretKey), + url: agent.connection.rpcEndpoint, + dbPath: databaseFile, + }, + }; + + const handleMessage = (event: MessageEvent) => { + if (event.data === undefined) { + cleanup(); + reject(new Error()); + return; + } + const { type, data, error } = event.data; + switch (type) { + case "progress": + onProgress?.(data!); + break; + case "error": + cleanup(); + const errorObj = new Error(error); + onError?.(errorObj); + reject(errorObj); + break; + case "complete": + cleanup(); + resolve(); + break; + } + }; + + if (typeof window !== "undefined") { + (worker as Worker).onmessage = handleMessage; + } else { + (worker as import("worker_threads").Worker).on( + "message", + handleMessage + ); + } + + worker.postMessage(message); + } catch (error) { + cleanup(); + console.error("[Main] Send operation failed:", { + error: error instanceof Error ? error.message : String(error), + stack: error instanceof Error ? error.stack : undefined, + }); + onError?.(error instanceof Error ? error : new Error(String(error))); + reject(error); + } + }); +} diff --git a/src/tools/airdrop_compressed_tokens/types.ts b/src/tools/airdrop_compressed_tokens/types.ts new file mode 100644 index 0000000..d4353b8 --- /dev/null +++ b/src/tools/airdrop_compressed_tokens/types.ts @@ -0,0 +1,69 @@ +import type { BetterSQLite3Database } from "drizzle-orm/better-sqlite3"; +import type { SqliteRemoteDatabase } from "drizzle-orm/sqlite-proxy"; + +export interface Closeable { + close(): Promise | void; +} + +export type DrizzleDb = BetterSQLite3Database | SqliteRemoteDatabase; + +export interface WorkerMessage { + type: "progress" | "error" | "complete"; + data?: number; + error?: string; +} + +export interface WorkerData { + type: "send" | "poll"; + data: { + dbPath: string; + url: string; + secretKey?: number[]; + }; +} + +export interface WorkerError extends Error { + code?: string; + type: "worker_error"; +} + +export interface DatabaseError extends Error { + code?: string; + type: "database_error"; +} + +export function isWorkerMessage(message: any): message is WorkerMessage { + return ( + message && + typeof message === "object" && + "type" in message && + (message.type === "progress" || + message.type === "error" || + message.type === "complete") + ); +} + +export function isWorkerData(data: any): data is WorkerData { + return ( + data && + typeof data === "object" && + "type" in data && + (data.type === "send" || data.type === "poll") && + "data" in data && + typeof data.data === "object" && + typeof data.data.dbPath === "string" && + typeof data.data.url === "string" + ); +} + +export function isWorkerError(error: any): error is WorkerError { + return ( + error instanceof Error && "type" in error && error.type === "worker_error" + ); +} + +export function isDatabaseError(error: any): error is DatabaseError { + return ( + error instanceof Error && "type" in error && error.type === "database_error" + ); +} diff --git a/src/tools/airdrop_compressed_tokens/worker.ts b/src/tools/airdrop_compressed_tokens/worker.ts new file mode 100644 index 0000000..f43123c --- /dev/null +++ b/src/tools/airdrop_compressed_tokens/worker.ts @@ -0,0 +1,128 @@ +import { send } from "helius-airship-core"; +import { Keypair } from "@solana/web3.js"; +import type { WorkerMessage, WorkerData, DrizzleDb, Closeable } from "./types"; + +let db: DrizzleDb | null = null; +let dbInitPromise: Promise | null = null; + +async function initializeDb(dbPath: string): Promise { + if (!dbInitPromise) { + dbInitPromise = (async () => { + if (!db) { + try { + if (typeof window !== "undefined") { + const [{ SQLocalDrizzle }, { drizzle }, { sql }] = + await Promise.all([ + // @ts-ignore + import("sqlocal/drizzle"), + import("drizzle-orm/sqlite-proxy"), + import("drizzle-orm"), + ]); + + const { driver, batchDriver } = new SQLocalDrizzle({ + databasePath: dbPath, + verbose: false, + }); + + db = drizzle(driver, batchDriver); + await db.run(sql`PRAGMA journal_mode = WAL;`); + await db.run(sql`PRAGMA synchronous = normal;`); + } else { + const [{ drizzle }, { default: Database }] = await Promise.all([ + import("drizzle-orm/better-sqlite3"), + import("better-sqlite3"), + ]); + + const sqlite = new Database(dbPath); + sqlite.exec("PRAGMA journal_mode = WAL;"); + sqlite.exec("PRAGMA synchronous = normal;"); + db = drizzle(sqlite); + } + } catch (error) { + console.error("Worker database initialization failed:", error); + throw error; + } + } + return db; + })(); + } + + const database = await dbInitPromise; + if (!database) throw new Error("Worker database initialization failed"); + return database; +} + +function postMessage(message: WorkerMessage) { + if (typeof window !== "undefined") { + self.postMessage(message); + } else { + const { parentPort } = require("worker_threads"); + parentPort?.postMessage(message); + } +} + +async function handleMessage(data: WorkerData) { + let database: DrizzleDb | null = null; + + try { + database = await initializeDb(data.data.dbPath); + + switch (data.type) { + case "send": + if (!data.data.secretKey) { + throw new Error("Secret key is required for send operation"); + } + + await send({ + db: database, + keypair: Keypair.fromSecretKey(new Uint8Array(data.data.secretKey)), + url: data.data.url, + }); + + break; + } + + postMessage({ type: "complete" }); + } catch (error) { + console.error("[Worker] Operation failed:", { + error: error instanceof Error ? error.message : String(error), + stack: error instanceof Error ? error.stack : undefined, + type: data.type, + url: data.data.url, + }); + + postMessage({ + type: "error", + error: error instanceof Error ? error.message : String(error), + }); + } finally { + if (database && "close" in database) { + try { + await (database as Closeable).close(); + } catch (error) { + console.error("Error closing database connection:", error); + } + } + } +} + +if (typeof window !== "undefined") { + self.onmessage = (event: MessageEvent) => { + handleMessage(event.data).catch((error) => { + postMessage({ + type: "error", + error: error instanceof Error ? error.message : String(error), + }); + }); + }; +} else { + const { parentPort } = require("worker_threads"); + parentPort?.on("message", (data: WorkerData) => { + handleMessage(data).catch((error) => { + postMessage({ + type: "error", + error: error instanceof Error ? error.message : String(error), + }); + }); + }); +} diff --git a/src/tools/index.ts b/src/tools/index.ts index 57764b8..0e6af80 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -12,5 +12,6 @@ export * from "./launch_pumpfun_token"; export * from "./lend"; export * from "./get_tps"; export * from "./get_token_data"; -export * from './stake_with_jup'; +export * from "./stake_with_jup"; export * from "./fetch_price"; +export * from "./airdrop_compressed_tokens"; diff --git a/src/utils/send_tx.ts b/src/utils/send_tx.ts index 593cbc8..903ddd5 100644 --- a/src/utils/send_tx.ts +++ b/src/utils/send_tx.ts @@ -41,7 +41,7 @@ export async function getPriorityFees(connection: Connection): Promise<{ const median = sortedFees.length % 2 === 0 ? ((sortedFees[mid - 1] ?? 0) + (sortedFees[mid] ?? 0)) / 2 - : (sortedFees[mid] ?? 0); + : sortedFees[mid] ?? 0; // Helper to create priority fee IX based on chosen strategy const createPriorityFeeIx = (fee: number) => { @@ -76,7 +76,7 @@ export async function getPriorityFees(connection: Connection): Promise<{ export async function sendTx( agent: SolanaAgentKit, tx: Transaction, - otherKeypairs?: Keypair[], + otherKeypairs?: Keypair[] ) { tx.recentBlockhash = (await agent.connection.getLatestBlockhash()).blockhash; tx.feePayer = agent.wallet_address; @@ -90,8 +90,9 @@ export async function sendTx( await agent.connection.confirmTransaction({ signature: txid, blockhash: (await agent.connection.getLatestBlockhash()).blockhash, - lastValidBlockHeight: (await agent.connection.getLatestBlockhash()) - .lastValidBlockHeight, + lastValidBlockHeight: ( + await agent.connection.getLatestBlockhash() + ).lastValidBlockHeight, }); return txid; } From c13ab12aeee04c6e8d1f32150425418921c1f03e Mon Sep 17 00:00:00 2001 From: Swenschaeferjohann Date: Fri, 20 Dec 2024 06:12:30 +0000 Subject: [PATCH 2/7] add airdrop --- package.json | 2 + pnpm-lock.yaml | 208 ++++++++ src/agent/index.ts | 18 +- src/langchain/index.ts | 12 +- src/tools/airdrop_compressed_tokens/index.ts | 468 ++++++++++-------- src/tools/airdrop_compressed_tokens/types.ts | 69 --- src/tools/airdrop_compressed_tokens/worker.ts | 128 ----- 7 files changed, 483 insertions(+), 422 deletions(-) delete mode 100644 src/tools/airdrop_compressed_tokens/types.ts delete mode 100644 src/tools/airdrop_compressed_tokens/worker.ts diff --git a/package.json b/package.json index ccc197d..1421ad5 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "@langchain/groq": "^0.1.2", "@langchain/langgraph": "^0.2.27", "@langchain/openai": "^0.3.13", + "@lightprotocol/compressed-token": "^0.17.1", + "@lightprotocol/stateless.js": "^0.17.1", "@metaplex-foundation/mpl-core": "^1.1.1", "@metaplex-foundation/mpl-token-metadata": "^3.3.0", "@metaplex-foundation/umi": "^0.9.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d459533..ed7c5f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,12 @@ importers: '@langchain/openai': specifier: ^0.3.13 version: 0.3.14(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))) + '@lightprotocol/compressed-token': + specifier: ^0.17.1 + version: 0.17.1(@lightprotocol/stateless.js@0.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) + '@lightprotocol/stateless.js': + specifier: ^0.17.1 + version: 0.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@metaplex-foundation/mpl-core': specifier: ^1.1.1 version: 1.1.1(@metaplex-foundation/umi@0.9.2)(@noble/hashes@1.6.1) @@ -180,9 +186,17 @@ packages: peerDependencies: '@lightprotocol/stateless.js': 0.13.1 + '@lightprotocol/compressed-token@0.17.1': + resolution: {integrity: sha512-493KCmZGw1BcHVRJaeRm8EEs+L7gX8dwY7JG13w2pfgOMtZXZ7Wxt261jFJxQJzRLTrUSlrbRJOmfW1+S1Y8SQ==} + peerDependencies: + '@lightprotocol/stateless.js': 0.17.1 + '@lightprotocol/stateless.js@0.13.1': resolution: {integrity: sha512-3dmsQJwDl/6oQWAvmai8DvYYi0LNi6yLST3WK6XQDSAX4hc8pMd0gjX7feSaX9aMPKrA3xvH6QsljGB5OKCXBw==} + '@lightprotocol/stateless.js@0.17.1': + resolution: {integrity: sha512-EjId1n33A6dBwpce33Wsa/fs/CDKtMtRrkxbApH0alXrnEXmbW6QhIViXOrKYXjZ4uJQM1xsBtsKe0vqJ4nbtQ==} + '@metaplex-foundation/mpl-core@1.1.1': resolution: {integrity: sha512-h1kLw+cGaV8SiykoHDb1/G01+VYqtJXAt0uGuO5+2Towsdtc6ET4M62iqUnh4EacTVMIW1yYHsKsG/LYWBCKaA==} peerDependencies: @@ -283,6 +297,10 @@ packages: resolution: {integrity: sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.6.0': resolution: {integrity: sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==} engines: {node: ^14.21.3 || >=16} @@ -320,6 +338,11 @@ packages: '@solana/codecs-core@2.0.0-preview.2': resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + '@solana/codecs-core@2.0.0-preview.4': + resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==} + peerDependencies: + typescript: '>=5' + '@solana/codecs-core@2.0.0-rc.1': resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} peerDependencies: @@ -328,6 +351,11 @@ packages: '@solana/codecs-data-structures@2.0.0-preview.2': resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + '@solana/codecs-data-structures@2.0.0-preview.4': + resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==} + peerDependencies: + typescript: '>=5' + '@solana/codecs-data-structures@2.0.0-rc.1': resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: @@ -336,6 +364,11 @@ packages: '@solana/codecs-numbers@2.0.0-preview.2': resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + '@solana/codecs-numbers@2.0.0-preview.4': + resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==} + peerDependencies: + typescript: '>=5' + '@solana/codecs-numbers@2.0.0-rc.1': resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: @@ -346,6 +379,12 @@ packages: peerDependencies: fastestsmallesttextencoderdecoder: ^1.0.22 + '@solana/codecs-strings@2.0.0-preview.4': + resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + '@solana/codecs-strings@2.0.0-rc.1': resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: @@ -355,6 +394,11 @@ packages: '@solana/codecs@2.0.0-preview.2': resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + '@solana/codecs@2.0.0-preview.4': + resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==} + peerDependencies: + typescript: '>=5' + '@solana/codecs@2.0.0-rc.1': resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: @@ -364,6 +408,12 @@ packages: resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} hasBin: true + '@solana/errors@2.0.0-preview.4': + resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==} + hasBin: true + peerDependencies: + typescript: '>=5' + '@solana/errors@2.0.0-rc.1': resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true @@ -373,6 +423,11 @@ packages: '@solana/options@2.0.0-preview.2': resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + '@solana/options@2.0.0-preview.4': + resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==} + peerDependencies: + typescript: '>=5' + '@solana/options@2.0.0-rc.1': resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: @@ -384,6 +439,12 @@ packages: peerDependencies: '@solana/web3.js': ^1.91.6 + '@solana/spl-token-group@0.0.5': + resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.94.0 + '@solana/spl-token-group@0.0.7': resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} engines: {node: '>=16'} @@ -402,6 +463,12 @@ packages: peerDependencies: '@solana/web3.js': ^1.91.6 + '@solana/spl-token@0.4.8': + resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.94.0 + '@solana/spl-token@0.4.9': resolution: {integrity: sha512-g3wbj4F4gq82YQlwqhPB0gHFXfgsC6UmyGMxtSLf/BozT/oKd59465DbnlUK8L8EcimKMavxsVAMoLcEdeCicg==} engines: {node: '>=16'} @@ -412,6 +479,9 @@ packages: resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} engines: {node: '>=16'} + '@solana/web3.js@1.95.3': + resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==} + '@solana/web3.js@1.95.8': resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} @@ -1690,6 +1760,21 @@ snapshots: - typescript - utf-8-validate + '@lightprotocol/compressed-token@0.17.1(@lightprotocol/stateless.js@0.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lightprotocol/stateless.js': 0.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.4.8(@solana/web3.js@1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + '@lightprotocol/stateless.js@0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -1703,6 +1788,19 @@ snapshots: - encoding - utf-8-validate + '@lightprotocol/stateless.js@0.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@noble/hashes': 1.5.0 + '@solana/web3.js': 1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + superstruct: 2.0.2 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + '@metaplex-foundation/mpl-core@1.1.1(@metaplex-foundation/umi@0.9.2)(@noble/hashes@1.6.1)': dependencies: '@metaplex-foundation/umi': 0.9.2 @@ -1817,6 +1915,8 @@ snapshots: dependencies: '@noble/hashes': 1.6.0 + '@noble/hashes@1.5.0': {} + '@noble/hashes@1.6.0': {} '@noble/hashes@1.6.1': {} @@ -1869,6 +1969,11 @@ snapshots: dependencies: '@solana/errors': 2.0.0-preview.2 + '@solana/codecs-core@2.0.0-preview.4(typescript@5.7.2)': + dependencies: + '@solana/errors': 2.0.0-preview.4(typescript@5.7.2) + typescript: 5.7.2 + '@solana/codecs-core@2.0.0-rc.1(typescript@5.7.2)': dependencies: '@solana/errors': 2.0.0-rc.1(typescript@5.7.2) @@ -1880,6 +1985,13 @@ snapshots: '@solana/codecs-numbers': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 + '@solana/codecs-data-structures@2.0.0-preview.4(typescript@5.7.2)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@5.7.2) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.7.2) + '@solana/errors': 2.0.0-preview.4(typescript@5.7.2) + typescript: 5.7.2 + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.7.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) @@ -1892,6 +2004,12 @@ snapshots: '@solana/codecs-core': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 + '@solana/codecs-numbers@2.0.0-preview.4(typescript@5.7.2)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@5.7.2) + '@solana/errors': 2.0.0-preview.4(typescript@5.7.2) + typescript: 5.7.2 + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.7.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) @@ -1905,6 +2023,14 @@ snapshots: '@solana/errors': 2.0.0-preview.2 fastestsmallesttextencoderdecoder: 1.0.22 + '@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@5.7.2) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.7.2) + '@solana/errors': 2.0.0-preview.4(typescript@5.7.2) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.7.2 + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) @@ -1923,6 +2049,17 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@5.7.2) + '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@5.7.2) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.7.2) + '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) @@ -1939,6 +2076,12 @@ snapshots: chalk: 5.3.0 commander: 12.1.0 + '@solana/errors@2.0.0-preview.4(typescript@5.7.2)': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + typescript: 5.7.2 + '@solana/errors@2.0.0-rc.1(typescript@5.7.2)': dependencies: chalk: 5.3.0 @@ -1950,6 +2093,17 @@ snapshots: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.4(typescript@5.7.2) + '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@5.7.2) + '@solana/codecs-numbers': 2.0.0-preview.4(typescript@5.7.2) + '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/errors': 2.0.0-preview.4(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.7.2) @@ -1969,6 +2123,15 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': + dependencies: + '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) @@ -1977,6 +2140,14 @@ snapshots: - fastestsmallesttextencoderdecoder - typescript + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/web3.js': 1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) @@ -2000,6 +2171,21 @@ snapshots: - typescript - utf-8-validate + '@solana/spl-token@0.4.8(@solana/web3.js@1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2) + '@solana/web3.js': 1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + '@solana/spl-token@0.4.9(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 @@ -2019,6 +2205,28 @@ snapshots: dependencies: buffer: 6.0.3 + '@solana/web3.js@1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.26.0 + '@noble/curves': 1.7.0 + '@noble/hashes': 1.6.1 + '@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.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + 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(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.26.0 diff --git a/src/agent/index.ts b/src/agent/index.ts index efe4925..58e5188 100644 --- a/src/agent/index.ts +++ b/src/agent/index.ts @@ -17,7 +17,6 @@ import { getTokenDataByAddress, getTokenDataByTicker, stakeWithJup, - createCompressedAirdrop, sendCompressedAirdrop, } from "../tools"; import { CollectionOptions, PumpFunTokenOptions } from "../types"; @@ -142,17 +141,20 @@ export class SolanaAgentKit { return stakeWithJup(this, amount); } - async airdropCompressedTokens( + async sendCompressedAirdrop( mintAddress: string, amount: number, - recipients: string[] - ) { - await createCompressedAirdrop( + recipients: string[], + priorityFeeInLamports: number, + shouldLog: boolean + ): Promise { + return await sendCompressedAirdrop( this, new PublicKey(mintAddress), - BigInt(amount), - recipients.map((recipient) => new PublicKey(recipient)) + amount, + recipients.map((recipient) => new PublicKey(recipient)), + priorityFeeInLamports, + shouldLog ); - return await sendCompressedAirdrop(this); } } diff --git a/src/langchain/index.ts b/src/langchain/index.ts index c2c1d8b..9e46783 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -710,6 +710,7 @@ export class SolanaAirdropCompressedTokensTool extends Tool { - mintAddress: string, the mint address of the token, e.g., "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" - amount: number, the amount of tokens to airdrop per recipient, e.g., 42 - recipients: string[], the recipient addresses, e.g., ["JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN", "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"] + - priorityFeeInLamports: number, the priority fee in lamports, e.g., 10_000. Default is 30_000. `; constructor(private solanaKit: SolanaAgentKit) { @@ -719,18 +720,19 @@ export class SolanaAirdropCompressedTokensTool extends Tool { protected async _call(input: string): Promise { try { const parsedInput = JSON.parse(input); - if (parsedInput.recipients.length <= 100) { - throw new Error("Recipients array must contain at least 420 addresses"); - } - await this.solanaKit.airdropCompressedTokens( + + const txs = await this.solanaKit.sendCompressedAirdrop( parsedInput.mintAddress, parsedInput.amount, - parsedInput.recipients + parsedInput.recipients, + parsedInput.priorityFeeInLamports || 30_000, + false // no logging ); return JSON.stringify({ status: "success", message: `Airdropped ${parsedInput.amount} tokens to ${parsedInput.recipients.length} recipients.`, + transactionHashes: txs, }); } catch (error: any) { return JSON.stringify({ diff --git a/src/tools/airdrop_compressed_tokens/index.ts b/src/tools/airdrop_compressed_tokens/index.ts index 86a25ee..91d59a8 100644 --- a/src/tools/airdrop_compressed_tokens/index.ts +++ b/src/tools/airdrop_compressed_tokens/index.ts @@ -1,228 +1,272 @@ -import { PublicKey } from "@solana/web3.js"; -import type { DrizzleDb, WorkerMessage, WorkerData } from "./types"; +import { + AddressLookupTableAccount, + ComputeBudgetProgram, + Connection, + Keypair, + PublicKey, + TransactionInstruction, +} from "@solana/web3.js"; import { SolanaAgentKit } from "../../agent/index.js"; +import { + buildAndSignTx, + calculateComputeUnitPrice, + createRpc, + Rpc, + sendAndConfirmTx, + sleep, +} from "@lightprotocol/stateless.js"; +import { + CompressedTokenProgram, + createTokenPool, +} from "@lightprotocol/compressed-token"; +import { Account, getOrCreateAssociatedTokenAccount } from "@solana/spl-token"; -let db: DrizzleDb | null = null; -let dbInitPromise: Promise | null = null; - -async function configureForBrowser() { - try { - const [{ SQLocalDrizzle }, { drizzle }, { sql }, heliusCore] = - await Promise.all([ - // @ts-ignore - import("sqlocal/drizzle"), - import("drizzle-orm/sqlite-proxy"), - import("drizzle-orm"), - import("helius-airship-core"), - ]); - - const { databaseFile } = heliusCore; - - const { driver, batchDriver } = new SQLocalDrizzle({ - databasePath: databaseFile, - verbose: false, - }); - - const database = drizzle(driver, batchDriver); - await database.run(sql`PRAGMA journal_mode = WAL;`); - await database.run(sql`PRAGMA synchronous = normal;`); - - return database; - } catch (error) { - console.error("Browser database configuration failed:", error); - throw error; - } -} - -async function configureForNode() { - try { - const [{ drizzle }, { default: Database }, { databaseFile }] = - await Promise.all([ - import("drizzle-orm/better-sqlite3"), - import("better-sqlite3"), - import("helius-airship-core"), - ]); - - const sqlite = new Database(databaseFile); - sqlite.exec("PRAGMA journal_mode = WAL;"); - sqlite.exec("PRAGMA synchronous = normal;"); - - return drizzle(sqlite); - } catch (error) { - console.error("Node database configuration failed:", error); - throw error; - } -} - -async function configureDatabase(): Promise { - if (!dbInitPromise) { - dbInitPromise = (async () => { - if (!db) { - db = - typeof window !== "undefined" - ? await configureForBrowser() - : await configureForNode(); - } - return db; - })(); - } - - const database = await dbInitPromise; - if (!database) throw new Error("Database initialization failed"); - return database; -} -async function createWorker(): Promise< - Worker | import("worker_threads").Worker -> { - if (typeof window !== "undefined") { - const origin = new URL(window.location.href).origin; - if ( - !origin.startsWith("https://") && - !origin.startsWith("http://localhost") - ) { - throw new Error("Invalid origin protocol"); - } - - const workerCode = ` - self.importScripts('${origin}/airdrop-worker.js'.replace(/[<>'"]/g, '')); - `; - - const blobOptions = { - type: "application/javascript", - headers: { - "Content-Security-Policy": "default-src 'self'", - }, - }; - - const blob = new Blob([workerCode], blobOptions); - const workerUrl = URL.createObjectURL(blob); - const worker = new Worker(workerUrl); - URL.revokeObjectURL(workerUrl); - return worker; - } else { - // Node - const { Worker } = await import("worker_threads"); - const path = await import("path"); - - return new Worker(path.resolve(__dirname, "worker.js")); - } -} - +const MAX_AIRDROP_RECIPIENTS = 1000; +const MAX_CONCURRENT = 30; /** - * Create airdrop with zk compression - * @param agent Agent - * @param mintAddress Token mint public key (non token-2022) - * @param amount amount of tokens to airdrop per recipient - * @param recipients Recipient public keys - */ -export async function createCompressedAirdrop( - agent: SolanaAgentKit, - mintAddress: PublicKey, - amount: bigint, - recipients: PublicKey[] -): Promise { - try { - const database = await configureDatabase(); - const { create, init } = await import("helius-airship-core"); - - await init({ - db: database as any, - }); - - await create({ - db: database as any, - signer: agent.wallet.publicKey, - addresses: recipients, - amount, - mintAddress, - }); - } catch (error) { - console.error("Create operation failed:", error); - throw error; - } -} - -/** - * Send airdrop. must be called after `createCompressedAirdrop` - * @param agent Agent - * @param onProgress Callback for progress updates - * @param onError Callback for error handling + * Send airdrop with ZK Compressed Tokens. + * @param agent Agent + * @param mintAddress SPL Mint address + * @param amount Amount to send per recipient + * @param recipients Recipient wallet addresses (no ATAs) + * @param shouldLog Whether to log progress to stdout. Defaults to false. */ export async function sendCompressedAirdrop( agent: SolanaAgentKit, - onProgress?: (progress: number) => void, - onError?: (error: Error) => void -): Promise { - let worker: Worker | import("worker_threads").Worker | null = null; - const { databaseFile } = await import("helius-airship-core"); + mintAddress: PublicKey, + amount: number, + recipients: PublicKey[], + prioFeeInLamports: number, + shouldLog: boolean = false +): Promise { + if (recipients.length > MAX_AIRDROP_RECIPIENTS) { + throw new Error( + `Max airdrop can be ${MAX_AIRDROP_RECIPIENTS} recipients at a time. For more scale, use open source ZK Compression airdrop tools such as https://github.com/helius-labs/airship.` + ); + } + let sourceTokenAccount: Account; + try { + sourceTokenAccount = await getOrCreateAssociatedTokenAccount( + agent.connection, + agent.wallet, + mintAddress, + agent.wallet.publicKey + ); + } catch (error) { + throw new Error( + "Source token account not found and failed to create it. Please add funds to your wallet and try again." + ); + } - return new Promise(async (resolve, reject) => { - const cleanup = () => { - if (worker) { - try { - if ("terminate" in worker) { - worker.terminate(); - } - } catch (error) { - console.error("[Main] Worker cleanup error:", error); - } - } - }; + try { + await createTokenPool( + agent.connection as unknown as Rpc, + agent.wallet, + mintAddress + ); + } catch (error: any) { + if (error.message.includes("already in use")) { + // skip + } else { + throw error; + } + } - try { - worker = await createWorker(); + return await processAll( + agent, + amount, + mintAddress, + recipients, + prioFeeInLamports, + shouldLog + ); +} +async function processAll( + agent: SolanaAgentKit, + amount: number, + mint: PublicKey, + recipients: PublicKey[], + prioFeeInLamports: number, + shouldLog: boolean +): Promise { + const mintAddress = mint; + const payer = agent.wallet; - const message: WorkerData = { - type: "send", - data: { - secretKey: Array.from(agent.wallet.secretKey), - url: agent.connection.rpcEndpoint, - dbPath: databaseFile, - }, - }; + const sourceTokenAccount = await getOrCreateAssociatedTokenAccount( + agent.connection, + agent.wallet, + mintAddress, + agent.wallet.publicKey + ); - const handleMessage = (event: MessageEvent) => { - if (event.data === undefined) { - cleanup(); - reject(new Error()); - return; - } - const { type, data, error } = event.data; - switch (type) { - case "progress": - onProgress?.(data!); - break; - case "error": - cleanup(); - const errorObj = new Error(error); - onError?.(errorObj); - reject(errorObj); - break; - case "complete": - cleanup(); - resolve(); - break; - } - }; + const maxRecipientsPerInstruction = 5; + const maxIxs = 3; // empirically determined (as of 12/15/2024) + const lookupTableAddress = new PublicKey( + "9NYFyEqPkyXUhkerbGHXUXkvb4qpzeEdHuGpgbgpH1NJ" + ); - if (typeof window !== "undefined") { - (worker as Worker).onmessage = handleMessage; - } else { - (worker as import("worker_threads").Worker).on( - "message", - handleMessage + const lookupTableAccount = ( + await agent.connection.getAddressLookupTable(lookupTableAddress) + ).value!; + + const batches: PublicKey[][] = []; + for ( + let i = 0; + i < recipients.length; + i += maxRecipientsPerInstruction * maxIxs + ) { + batches.push(recipients.slice(i, i + maxRecipientsPerInstruction * maxIxs)); + } + + const instructionSets = await Promise.all( + batches.map(async (recipientBatch) => { + const instructions: TransactionInstruction[] = [ + ComputeBudgetProgram.setComputeUnitLimit({ units: 500_000 }), + ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: calculateComputeUnitPrice(prioFeeInLamports, 500_000), + }), + ]; + + const compressIxPromises = []; + for ( + let i = 0; + i < recipientBatch.length; + i += maxRecipientsPerInstruction + ) { + const batch = recipientBatch.slice(i, i + maxRecipientsPerInstruction); + compressIxPromises.push( + CompressedTokenProgram.compress({ + payer: payer.publicKey, + owner: payer.publicKey, + source: sourceTokenAccount.address, + toAddress: batch, + amount: batch.map(() => amount), + mint: mintAddress, + }) ); } - worker.postMessage(message); - } catch (error) { - cleanup(); - console.error("[Main] Send operation failed:", { - error: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined, - }); - onError?.(error instanceof Error ? error : new Error(String(error))); - reject(error); + const compressIxs = await Promise.all(compressIxPromises); + return [...instructions, ...compressIxs]; + }) + ); + + const url = agent.connection.rpcEndpoint; + if (url.includes("devnet")) { + throw new Error("Devnet is not supported for airdrop. Please use mainnet."); + } + if (!url.includes("helius")) { + console.warn( + "Warning: Must use RPC with ZK Compression support. Double check with your RPC provider if in doubt." + ); + } + const rpc = createRpc(url, url, url); + + const results = []; + let confirmedCount = 0; + const totalBatches = instructionSets.length; + + const renderProgressBar = (current: number, total: number) => { + const percentage = Math.floor((current / total) * 100); + const filled = Math.floor((percentage / 100) * 20); + const empty = 20 - filled; + const bar = "█".repeat(filled) + "░".repeat(empty); + return `Airdropped to ${Math.min(current * 15, recipients.length)}/${ + recipients.length + } recipients [${bar}] ${percentage}%`; + }; + + const log = (message: string) => { + if (shouldLog && typeof process !== "undefined" && process.stdout) { + process.stdout.write(message); } - }); + }; + + for (let i = 0; i < instructionSets.length; i += MAX_CONCURRENT) { + const batchPromises = instructionSets + .slice(i, i + MAX_CONCURRENT) + .map((instructions, idx) => + sendTransactionWithRetry( + rpc, + instructions, + payer, + lookupTableAccount, + i + idx + ).then((signature) => { + confirmedCount++; + log("\r" + renderProgressBar(confirmedCount, totalBatches)); + return signature; + }) + ); + + const batchResults = await Promise.allSettled(batchPromises); + results.push(...batchResults); + } + + log("\n"); + + const failures = results + .filter((r) => r.status === "rejected") + .map((r, idx) => ({ + index: idx, + error: (r as PromiseRejectedResult).reason, + })); + + if (failures.length > 0) { + throw new Error( + `Failed to process ${failures.length} batches: ${failures + .map((f) => f.error) + .join(", ")}` + ); + } + + return results.map((r) => (r as PromiseFulfilledResult).value); +} + +async function sendTransactionWithRetry( + connection: Rpc, + instructions: TransactionInstruction[], + payer: Keypair, + lookupTableAccount: AddressLookupTableAccount, + batchIndex: number +): Promise { + const MAX_RETRIES = 3; + const INITIAL_BACKOFF = 500; // ms + + for (let attempt = 0; attempt < MAX_RETRIES; attempt++) { + try { + const { blockhash } = await connection.getLatestBlockhash(); + const tx = buildAndSignTx( + instructions, + payer, + blockhash, + [], + [lookupTableAccount] + ); + + const signature = await sendAndConfirmTx(connection, tx); + + return signature; + } catch (error: any) { + const isRetryable = + error.message?.includes("blockhash not found") || + error.message?.includes("timeout") || + error.message?.includes("rate limit") || + error.message?.includes("too many requests"); + + if (!isRetryable || attempt === MAX_RETRIES - 1) { + throw new Error( + `Batch ${batchIndex} failed after ${attempt + 1} attempts: ${ + error.message + }` + ); + } + + const backoff = + INITIAL_BACKOFF * Math.pow(2, attempt) * (0.5 + Math.random()); + await sleep(backoff); + } + } + + throw new Error("Unreachable"); } diff --git a/src/tools/airdrop_compressed_tokens/types.ts b/src/tools/airdrop_compressed_tokens/types.ts deleted file mode 100644 index d4353b8..0000000 --- a/src/tools/airdrop_compressed_tokens/types.ts +++ /dev/null @@ -1,69 +0,0 @@ -import type { BetterSQLite3Database } from "drizzle-orm/better-sqlite3"; -import type { SqliteRemoteDatabase } from "drizzle-orm/sqlite-proxy"; - -export interface Closeable { - close(): Promise | void; -} - -export type DrizzleDb = BetterSQLite3Database | SqliteRemoteDatabase; - -export interface WorkerMessage { - type: "progress" | "error" | "complete"; - data?: number; - error?: string; -} - -export interface WorkerData { - type: "send" | "poll"; - data: { - dbPath: string; - url: string; - secretKey?: number[]; - }; -} - -export interface WorkerError extends Error { - code?: string; - type: "worker_error"; -} - -export interface DatabaseError extends Error { - code?: string; - type: "database_error"; -} - -export function isWorkerMessage(message: any): message is WorkerMessage { - return ( - message && - typeof message === "object" && - "type" in message && - (message.type === "progress" || - message.type === "error" || - message.type === "complete") - ); -} - -export function isWorkerData(data: any): data is WorkerData { - return ( - data && - typeof data === "object" && - "type" in data && - (data.type === "send" || data.type === "poll") && - "data" in data && - typeof data.data === "object" && - typeof data.data.dbPath === "string" && - typeof data.data.url === "string" - ); -} - -export function isWorkerError(error: any): error is WorkerError { - return ( - error instanceof Error && "type" in error && error.type === "worker_error" - ); -} - -export function isDatabaseError(error: any): error is DatabaseError { - return ( - error instanceof Error && "type" in error && error.type === "database_error" - ); -} diff --git a/src/tools/airdrop_compressed_tokens/worker.ts b/src/tools/airdrop_compressed_tokens/worker.ts deleted file mode 100644 index f43123c..0000000 --- a/src/tools/airdrop_compressed_tokens/worker.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { send } from "helius-airship-core"; -import { Keypair } from "@solana/web3.js"; -import type { WorkerMessage, WorkerData, DrizzleDb, Closeable } from "./types"; - -let db: DrizzleDb | null = null; -let dbInitPromise: Promise | null = null; - -async function initializeDb(dbPath: string): Promise { - if (!dbInitPromise) { - dbInitPromise = (async () => { - if (!db) { - try { - if (typeof window !== "undefined") { - const [{ SQLocalDrizzle }, { drizzle }, { sql }] = - await Promise.all([ - // @ts-ignore - import("sqlocal/drizzle"), - import("drizzle-orm/sqlite-proxy"), - import("drizzle-orm"), - ]); - - const { driver, batchDriver } = new SQLocalDrizzle({ - databasePath: dbPath, - verbose: false, - }); - - db = drizzle(driver, batchDriver); - await db.run(sql`PRAGMA journal_mode = WAL;`); - await db.run(sql`PRAGMA synchronous = normal;`); - } else { - const [{ drizzle }, { default: Database }] = await Promise.all([ - import("drizzle-orm/better-sqlite3"), - import("better-sqlite3"), - ]); - - const sqlite = new Database(dbPath); - sqlite.exec("PRAGMA journal_mode = WAL;"); - sqlite.exec("PRAGMA synchronous = normal;"); - db = drizzle(sqlite); - } - } catch (error) { - console.error("Worker database initialization failed:", error); - throw error; - } - } - return db; - })(); - } - - const database = await dbInitPromise; - if (!database) throw new Error("Worker database initialization failed"); - return database; -} - -function postMessage(message: WorkerMessage) { - if (typeof window !== "undefined") { - self.postMessage(message); - } else { - const { parentPort } = require("worker_threads"); - parentPort?.postMessage(message); - } -} - -async function handleMessage(data: WorkerData) { - let database: DrizzleDb | null = null; - - try { - database = await initializeDb(data.data.dbPath); - - switch (data.type) { - case "send": - if (!data.data.secretKey) { - throw new Error("Secret key is required for send operation"); - } - - await send({ - db: database, - keypair: Keypair.fromSecretKey(new Uint8Array(data.data.secretKey)), - url: data.data.url, - }); - - break; - } - - postMessage({ type: "complete" }); - } catch (error) { - console.error("[Worker] Operation failed:", { - error: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined, - type: data.type, - url: data.data.url, - }); - - postMessage({ - type: "error", - error: error instanceof Error ? error.message : String(error), - }); - } finally { - if (database && "close" in database) { - try { - await (database as Closeable).close(); - } catch (error) { - console.error("Error closing database connection:", error); - } - } - } -} - -if (typeof window !== "undefined") { - self.onmessage = (event: MessageEvent) => { - handleMessage(event.data).catch((error) => { - postMessage({ - type: "error", - error: error instanceof Error ? error.message : String(error), - }); - }); - }; -} else { - const { parentPort } = require("worker_threads"); - parentPort?.on("message", (data: WorkerData) => { - handleMessage(data).catch((error) => { - postMessage({ - type: "error", - error: error instanceof Error ? error.message : String(error), - }); - }); - }); -} From 2bac6399fc69db193bb3ab238f1acb427b34adcd Mon Sep 17 00:00:00 2001 From: Swenschaeferjohann Date: Fri, 20 Dec 2024 06:17:42 +0000 Subject: [PATCH 3/7] remove unnecessary imports, rename to send_compressed_airdrop --- package.json | 5 - pnpm-lock.yaml | 770 ------------------ src/langchain/index.ts | 12 +- src/tools/index.ts | 2 +- .../index.ts => send_compressed_airdrop.ts} | 3 +- 5 files changed, 9 insertions(+), 783 deletions(-) rename src/tools/{airdrop_compressed_tokens/index.ts => send_compressed_airdrop.ts} (99%) diff --git a/package.json b/package.json index 1421ad5..dbd600b 100644 --- a/package.json +++ b/package.json @@ -28,19 +28,14 @@ "@metaplex-foundation/umi-web3js-adapters": "^0.9.2", "@solana/spl-token": "^0.4.9", "@solana/web3.js": "^1.95.4", - "better-sqlite3": "^11.7.0", "bs58": "^6.0.0", "dotenv": "^16.4.5", - "drizzle-orm": "^0.38.2", "form-data": "^4.0.1", - "helius-airship-core": "file:../airship/packages/core", "langchain": "^0.3.6", "openai": "^4.75.0", - "sqlocal": "^0.13.0", "typedoc": "^0.26.11" }, "devDependencies": { - "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.9.0", "ts-node": "^10.9.2", "typescript": "^5.7.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed7c5f3..7ed26d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,40 +50,25 @@ importers: '@solana/web3.js': specifier: ^1.95.4 version: 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) - better-sqlite3: - specifier: ^11.7.0 - version: 11.7.0 bs58: specifier: ^6.0.0 version: 6.0.0 dotenv: specifier: ^16.4.5 version: 16.4.7 - drizzle-orm: - specifier: ^0.38.2 - version: 0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0) form-data: specifier: ^4.0.1 version: 4.0.1 - helius-airship-core: - specifier: file:../airship/packages/core - version: file:../airship/packages/core(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0)(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) langchain: specifier: ^0.3.6 version: 0.3.7(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))(@langchain/groq@0.1.2(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))))(openai@4.76.3(zod@3.24.1)) openai: specifier: ^4.75.0 version: 4.76.3(zod@3.24.1) - sqlocal: - specifier: ^0.13.0 - version: 0.13.0(bufferutil@4.0.8)(drizzle-orm@0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0))(utf-8-validate@5.0.10) typedoc: specifier: ^0.26.11 version: 0.26.11(typescript@5.7.2) devDependencies: - '@types/better-sqlite3': - specifier: ^7.6.12 - version: 7.6.12 '@types/node': specifier: ^22.9.0 version: 22.10.2 @@ -113,10 +98,6 @@ packages: '@cfworker/json-schema@4.0.3': resolution: {integrity: sha512-ZykIcDTVv5UNmKWSTLAs3VukO6NDJkkSKxrgUTDPBkAlORVT3H9n5DbRjRl8xIotklscHdbLIa0b9+y3mQq73g==} - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - '@coral-xyz/anchor@0.29.0': resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==} engines: {node: '>=11'} @@ -131,9 +112,6 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -181,19 +159,11 @@ packages: peerDependencies: '@langchain/core': '>=0.2.21 <0.4.0' - '@lightprotocol/compressed-token@0.13.1': - resolution: {integrity: sha512-5vPP2wV0dI1zlPztxi6UD0vBcAHPM+0MiVMkWdfnlhqBhZUQy7aGnD8IcAf2g0M60RvmPiFSUIKmj64nuw5+sQ==} - peerDependencies: - '@lightprotocol/stateless.js': 0.13.1 - '@lightprotocol/compressed-token@0.17.1': resolution: {integrity: sha512-493KCmZGw1BcHVRJaeRm8EEs+L7gX8dwY7JG13w2pfgOMtZXZ7Wxt261jFJxQJzRLTrUSlrbRJOmfW1+S1Y8SQ==} peerDependencies: '@lightprotocol/stateless.js': 0.17.1 - '@lightprotocol/stateless.js@0.13.1': - resolution: {integrity: sha512-3dmsQJwDl/6oQWAvmai8DvYYi0LNi6yLST3WK6XQDSAX4hc8pMd0gjX7feSaX9aMPKrA3xvH6QsljGB5OKCXBw==} - '@lightprotocol/stateless.js@0.17.1': resolution: {integrity: sha512-EjId1n33A6dBwpce33Wsa/fs/CDKtMtRrkxbApH0alXrnEXmbW6QhIViXOrKYXjZ4uJQM1xsBtsKe0vqJ4nbtQ==} @@ -485,10 +455,6 @@ packages: '@solana/web3.js@1.95.8': resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} - '@sqlite.org/sqlite-wasm@3.47.1-build1': - resolution: {integrity: sha512-3qnVGab3sjJ8ov0ce1rQGZrMkglYEQ/q5fnq1s1BpRWFMYsiJVaLD1zKepcI9E9r3qx7929+2G27Hfsasvrm6Q==} - hasBin: true - '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} @@ -504,9 +470,6 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@types/better-sqlite3@7.6.12': - resolution: {integrity: sha512-fnQmj8lELIj7BSrZQAdBMHEHX8OZLYIHXqAKT1O7tDfLxaINzf00PMjw22r3N/xXh0w/sGHlO6SVaCQ2mj78lg==} - '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -534,9 +497,6 @@ packages: '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -555,9 +515,6 @@ packages: '@ungap/structured-clone@1.2.1': resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} - '@ungap/with-resolvers@0.1.0': - resolution: {integrity: sha512-g7f0IkJdPW2xhY7H4iE72DAsIyfuwEFc6JWc2tYFwKDMWWAF699vGjrM348cwQuOXgHpe1gWFe+Eiyjx/ewvvw==} - JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -589,9 +546,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -610,9 +564,6 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - better-sqlite3@11.7.0: - resolution: {integrity: sha512-mXpa5jnIKKHeoGzBrUJrc65cXFKcILGZpU3FXR0pradUEm9MA7UZz02qfEejaMcm9iXrSOCenwwYMJ/tZ1y5Ig==} - bigint-buffer@1.1.5: resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} engines: {node: '>= 10.0.0'} @@ -623,9 +574,6 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} @@ -654,9 +602,6 @@ packages: resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} engines: {node: '>=4.5'} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -681,30 +626,6 @@ packages: character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - coincident@1.2.3: - resolution: {integrity: sha512-Uxz3BMTWIslzeWjuQnizGWVg0j6khbvHUQ8+5BdM7WuJEm4ALXwq3wluYoB+uF68uPBz/oUOeJnYURKyfjexlA==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - - colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -737,14 +658,6 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - delay@5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} @@ -757,10 +670,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -775,196 +684,9 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} - drizzle-orm@0.33.0: - resolution: {integrity: sha512-SHy72R2Rdkz0LEq0PSG/IdvnT3nGiWuRk+2tXZQ90GVq/XQhpCzu/EFT3V2rox+w8MlkBQxifF8pCStNYnERfA==} - peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=3' - '@electric-sql/pglite': '>=0.1.1' - '@libsql/client': '*' - '@neondatabase/serverless': '>=0.1' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' - '@types/better-sqlite3': '*' - '@types/pg': '*' - '@types/react': '>=18' - '@types/sql.js': '*' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=7' - bun-types: '*' - expo-sqlite: '>=13.2.0' - knex: '*' - kysely: '*' - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - react: '>=18' - sql.js: '>=1' - sqlite3: '>=5' - peerDependenciesMeta: - '@aws-sdk/client-rds-data': - optional: true - '@cloudflare/workers-types': - optional: true - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - '@neondatabase/serverless': - optional: true - '@op-engineering/op-sqlite': - optional: true - '@opentelemetry/api': - optional: true - '@planetscale/database': - optional: true - '@prisma/client': - optional: true - '@tidbcloud/serverless': - optional: true - '@types/better-sqlite3': - optional: true - '@types/pg': - optional: true - '@types/react': - optional: true - '@types/sql.js': - optional: true - '@vercel/postgres': - optional: true - '@xata.io/client': - optional: true - better-sqlite3: - optional: true - bun-types: - optional: true - expo-sqlite: - optional: true - knex: - optional: true - kysely: - optional: true - mysql2: - optional: true - pg: - optional: true - postgres: - optional: true - prisma: - optional: true - react: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - - drizzle-orm@0.38.2: - resolution: {integrity: sha512-eCE3yPRAskLo1WpM9OHpFaM70tBEDsWhwR/0M3CKyztAXKR9Qs3asZlcJOEliIcUSg8GuwrlY0dmYDgmm6y5GQ==} - peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=4' - '@electric-sql/pglite': '>=0.2.0' - '@libsql/client': '>=0.10.0' - '@libsql/client-wasm': '>=0.10.0' - '@neondatabase/serverless': '>=0.10.0' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' - '@types/better-sqlite3': '*' - '@types/pg': '*' - '@types/react': '>=18' - '@types/sql.js': '*' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=7' - bun-types: '*' - expo-sqlite: '>=14.0.0' - knex: '*' - kysely: '*' - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - react: '>=18' - sql.js: '>=1' - sqlite3: '>=5' - peerDependenciesMeta: - '@aws-sdk/client-rds-data': - optional: true - '@cloudflare/workers-types': - optional: true - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - '@libsql/client-wasm': - optional: true - '@neondatabase/serverless': - optional: true - '@op-engineering/op-sqlite': - optional: true - '@opentelemetry/api': - optional: true - '@planetscale/database': - optional: true - '@prisma/client': - optional: true - '@tidbcloud/serverless': - optional: true - '@types/better-sqlite3': - optional: true - '@types/pg': - optional: true - '@types/react': - optional: true - '@types/sql.js': - optional: true - '@vercel/postgres': - optional: true - '@xata.io/client': - optional: true - better-sqlite3: - optional: true - bun-types: - optional: true - expo-sqlite: - optional: true - knex: - optional: true - kysely: - optional: true - mysql2: - optional: true - pg: - optional: true - postgres: - optional: true - prisma: - optional: true - react: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -985,10 +707,6 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} @@ -999,15 +717,9 @@ packages: fastestsmallesttextencoderdecoder@1.0.22: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - form-data-encoder@1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} @@ -1019,15 +731,6 @@ packages: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - gc-hook@0.3.1: - resolution: {integrity: sha512-E5M+O/h2o7eZzGhzRZGex6hbB3k4NWqO0eA+OzLRLXxhdbYPajZnynPwAtphnh+cRHPwsj5Z80dqZlfI4eK55A==} - - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - graphemesplit@2.4.4: resolution: {integrity: sha512-lKrpp1mk1NH26USxC/Asw4OHbhSQf5XfrWZ+CDv/dFVvd1j17kFgMotdJvOesmHkbFX9P9sBfpH8VogxOWLg8w==} @@ -1040,9 +743,6 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - helius-airship-core@file:../airship/packages/core: - resolution: {directory: ../airship/packages/core, type: directory} - html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -1052,23 +752,10 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ipaddr.js@2.2.0: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - isomorphic-ws@4.0.1: resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: @@ -1100,9 +787,6 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - langchain@0.3.7: resolution: {integrity: sha512-6/Gkk9Zez3HkbsETFxZVo1iKLmaK3OzkDseC5MYFKVmYFDXFAOyJR3srJ9P61xF8heVdsPixqYIsejBn7/9dXg==} engines: {node: '>=18'} @@ -1160,10 +844,6 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -1206,20 +886,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1227,16 +897,9 @@ packages: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true - napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} - no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-abi@3.71.0: - resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} - engines: {node: '>=10'} - node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -1254,12 +917,6 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - oniguruma-to-es@0.7.0: resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} @@ -1297,23 +954,9 @@ packages: pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - papaparse@5.4.1: - resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==} - - prebuild-install@7.1.2: - resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} - engines: {node: '>=10'} - hasBin: true - property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - proxy-target@3.0.2: - resolution: {integrity: sha512-FFE1XNwXX/FNC3/P8HiKaJSy/Qk68RitG/QEcLy/bVnTAPlgTAWPZKh0pARLAnpfXQPKyalBhk009NRTgsk8vQ==} - - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -1322,14 +965,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -1352,10 +987,6 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} @@ -1364,45 +995,15 @@ packages: shiki@1.24.2: resolution: {integrity: sha512-TR1fi6mkRrzW+SKT5G6uKuc32Dj2EEa7Kj0k8kGqiBINb+C1TiflVOiT9ta6GqOJtC4fraxO5SLUaKBcSY38Fg==} - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - sqlocal@0.13.0: - resolution: {integrity: sha512-C38F42jJ47oyDGvHSUHOad+3otFF/B2oL0/s6VkMuhX615P5SP9aZk7gF7y7Q5550wwROKl0Uk+lKQuFUoEYpA==} - peerDependencies: - drizzle-orm: '*' - kysely: '*' - peerDependenciesMeta: - drizzle-orm: - optional: true - kysely: - optional: true - - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - superstruct@0.15.5: resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} @@ -1410,19 +1011,9 @@ packages: resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} engines: {node: '>=14.0.0'} - tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -1438,10 +1029,6 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -1459,9 +1046,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} @@ -1508,9 +1092,6 @@ packages: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true @@ -1546,17 +1127,6 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.17.0: - resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} - engines: {node: '>= 12.0.0'} - - 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'} @@ -1635,8 +1205,6 @@ snapshots: '@cfworker/json-schema@4.0.3': {} - '@colors/colors@1.6.0': {} - '@coral-xyz/anchor@0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) @@ -1668,12 +1236,6 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@dabh/diagnostics@2.0.3': - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.0': {} @@ -1745,21 +1307,6 @@ snapshots: '@langchain/core': 0.3.23(openai@4.76.3(zod@3.24.1)) js-tiktoken: 1.0.15 - '@lightprotocol/compressed-token@0.13.1(@lightprotocol/stateless.js@0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)': - dependencies: - '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@lightprotocol/stateless.js': 0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@solana/spl-token': 0.4.9(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) - buffer: 6.0.3 - tweetnacl: 1.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - '@lightprotocol/compressed-token@0.17.1(@lightprotocol/stateless.js@0.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -1775,19 +1322,6 @@ snapshots: - typescript - utf-8-validate - '@lightprotocol/stateless.js@0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': - dependencies: - '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@noble/hashes': 1.6.1 - '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) - buffer: 6.0.3 - superstruct: 2.0.2 - tweetnacl: 1.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - '@lightprotocol/stateless.js@0.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@coral-xyz/anchor': 0.29.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -2249,8 +1783,6 @@ snapshots: - encoding - utf-8-validate - '@sqlite.org/sqlite-wasm@3.47.1-build1': {} - '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -2263,10 +1795,6 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@types/better-sqlite3@7.6.12': - dependencies: - '@types/node': 22.10.2 - '@types/connect@3.4.38': dependencies: '@types/node': 22.10.2 @@ -2298,8 +1826,6 @@ snapshots: '@types/retry@0.12.0': {} - '@types/triple-beam@1.3.5': {} - '@types/unist@3.0.3': {} '@types/uuid@10.0.0': {} @@ -2316,8 +1842,6 @@ snapshots: '@ungap/structured-clone@1.2.1': {} - '@ungap/with-resolvers@0.1.0': {} - JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -2343,8 +1867,6 @@ snapshots: argparse@2.0.1: {} - async@3.2.6: {} - asynckit@0.4.0: {} balanced-match@1.0.2: {} @@ -2359,11 +1881,6 @@ snapshots: base64-js@1.5.1: {} - better-sqlite3@11.7.0: - dependencies: - bindings: 1.5.0 - prebuild-install: 7.1.2 - bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 @@ -2374,12 +1891,6 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - bn.js@5.2.1: {} borsh@0.7.0: @@ -2410,11 +1921,6 @@ snapshots: buffer-layout@1.2.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -2435,43 +1941,6 @@ snapshots: character-entities-legacy@3.0.0: {} - chownr@1.1.4: {} - - coincident@1.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): - dependencies: - '@ungap/structured-clone': 1.2.1 - '@ungap/with-resolvers': 0.1.0 - gc-hook: 0.3.1 - proxy-target: 3.0.2 - optionalDependencies: - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - color@3.2.1: - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - - colorspace@1.1.4: - dependencies: - color: 3.2.1 - text-hex: 1.0.0 - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -2496,20 +1965,12 @@ snapshots: decamelize@1.2.0: {} - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - deep-extend@0.6.0: {} - delay@5.0.0: {} delayed-stream@1.0.0: {} dequal@2.0.3: {} - detect-libc@2.0.3: {} - devlop@1.1.0: dependencies: dequal: 2.0.3 @@ -2523,24 +1984,8 @@ snapshots: dotenv@16.4.7: {} - drizzle-orm@0.33.0(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0): - optionalDependencies: - '@types/better-sqlite3': 7.6.12 - better-sqlite3: 11.7.0 - - drizzle-orm@0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0): - optionalDependencies: - '@types/better-sqlite3': 7.6.12 - better-sqlite3: 11.7.0 - emoji-regex-xs@1.0.0: {} - enabled@2.0.0: {} - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - entities@4.5.0: {} es6-promise@4.2.8: {} @@ -2555,20 +2000,14 @@ snapshots: eventemitter3@5.0.1: {} - expand-template@2.0.3: {} - eyes@0.1.8: {} fast-stable-stringify@1.0.0: {} fastestsmallesttextencoderdecoder@1.0.22: {} - fecha@4.2.3: {} - file-uri-to-path@1.0.0: {} - fn.name@1.1.0: {} - form-data-encoder@1.7.2: {} form-data@4.0.1: @@ -2582,12 +2021,6 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 - fs-constants@1.0.0: {} - - gc-hook@0.3.1: {} - - github-from-package@0.0.0: {} - graphemesplit@2.4.4: dependencies: js-base64: 3.7.7 @@ -2624,54 +2057,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - helius-airship-core@file:../airship/packages/core(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0)(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10): - dependencies: - '@lightprotocol/compressed-token': 0.13.1(@lightprotocol/stateless.js@0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) - '@lightprotocol/stateless.js': 0.13.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@solana/spl-token': 0.4.9(@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) - bn.js: 5.2.1 - bs58: 6.0.0 - drizzle-orm: 0.33.0(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0) - logform: 2.7.0 - papaparse: 5.4.1 - winston: 3.17.0 - winston-transport: 4.9.0 - transitivePeerDependencies: - - '@aws-sdk/client-rds-data' - - '@cloudflare/workers-types' - - '@electric-sql/pglite' - - '@libsql/client' - - '@neondatabase/serverless' - - '@op-engineering/op-sqlite' - - '@opentelemetry/api' - - '@planetscale/database' - - '@prisma/client' - - '@tidbcloud/serverless' - - '@types/better-sqlite3' - - '@types/pg' - - '@types/react' - - '@types/sql.js' - - '@vercel/postgres' - - '@xata.io/client' - - better-sqlite3 - - bufferutil - - bun-types - - encoding - - expo-sqlite - - fastestsmallesttextencoderdecoder - - knex - - kysely - - mysql2 - - pg - - postgres - - prisma - - react - - sql.js - - sqlite3 - - typescript - - utf-8-validate - html-void-elements@3.0.0: {} humanize-ms@1.2.1: @@ -2680,16 +2065,8 @@ snapshots: ieee754@1.2.1: {} - inherits@2.0.4: {} - - ini@1.3.8: {} - ipaddr.js@2.2.0: {} - is-arrayish@0.3.2: {} - - is-stream@2.0.1: {} - isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)): dependencies: ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -2728,8 +2105,6 @@ snapshots: jsonpointer@5.0.1: {} - kuler@2.0.0: {} - langchain@0.3.7(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1)))(@langchain/groq@0.1.2(@langchain/core@0.3.23(openai@4.76.3(zod@3.24.1))))(openai@4.76.3(zod@3.24.1)): dependencies: '@langchain/core': 0.3.23(openai@4.76.3(zod@3.24.1)) @@ -2766,15 +2141,6 @@ snapshots: dependencies: uc.micro: 2.1.0 - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -2829,31 +2195,19 @@ snapshots: dependencies: mime-db: 1.52.0 - mimic-response@3.1.0: {} - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - minimist@1.2.8: {} - - mkdirp-classic@0.5.3: {} - ms@2.1.3: {} mustache@4.2.0: {} - napi-build-utils@1.0.2: {} - no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.8.1 - node-abi@3.71.0: - dependencies: - semver: 7.6.3 - node-domexception@1.0.0: {} node-fetch@2.7.0: @@ -2863,14 +2217,6 @@ snapshots: node-gyp-build@4.8.4: optional: true - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - oniguruma-to-es@0.7.0: dependencies: emoji-regex-xs: 1.0.0 @@ -2913,49 +2259,12 @@ snapshots: pako@2.1.0: {} - papaparse@5.4.1: {} - - prebuild-install@7.1.2: - dependencies: - detect-libc: 2.0.3 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 1.0.2 - node-abi: 3.71.0 - pump: 3.0.2 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.1 - tunnel-agent: 0.6.0 - property-information@6.5.0: {} - proxy-target@3.0.2: {} - - pump@3.0.2: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - punycode.js@2.3.1: {} punycode@2.3.1: {} - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - regenerator-runtime@0.14.1: {} regex-recursion@4.3.0: @@ -2985,8 +2294,6 @@ snapshots: safe-buffer@5.2.1: {} - safe-stable-stringify@2.5.0: {} - semver@7.6.3: {} shiki@1.24.2: @@ -2998,18 +2305,6 @@ snapshots: '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -3017,52 +2312,17 @@ snapshots: space-separated-tokens@2.0.2: {} - sqlocal@0.13.0(bufferutil@4.0.8)(drizzle-orm@0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0))(utf-8-validate@5.0.10): - dependencies: - '@sqlite.org/sqlite-wasm': 3.47.1-build1 - coincident: 1.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - optionalDependencies: - drizzle-orm: 0.38.2(@types/better-sqlite3@7.6.12)(better-sqlite3@11.7.0) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - stack-trace@0.0.10: {} - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - strip-json-comments@2.0.1: {} - superstruct@0.15.5: {} superstruct@2.0.2: {} - tar-fs@2.1.1: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.2 - tar-stream: 2.2.0 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - text-encoding-utf-8@1.0.2: {} - text-hex@1.0.0: {} - through@2.3.8: {} tiny-inflate@1.0.3: {} @@ -3073,8 +2333,6 @@ snapshots: trim-lines@3.0.1: {} - triple-beam@1.4.1: {} - ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -3095,10 +2353,6 @@ snapshots: tslib@2.8.1: {} - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - tweetnacl@1.0.3: {} typedoc@0.26.11(typescript@5.7.2): @@ -3151,8 +2405,6 @@ snapshots: node-gyp-build: 4.8.4 optional: true - util-deprecate@1.0.2: {} - uuid@10.0.0: {} uuid@8.3.2: {} @@ -3182,28 +2434,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.17.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.3 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - - wrappy@1.0.2: {} - ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.8 diff --git a/src/langchain/index.ts b/src/langchain/index.ts index 9e46783..72a699d 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -702,15 +702,15 @@ export class SolanaTokenDataByTickerTool extends Tool { } } -export class SolanaAirdropCompressedTokensTool extends Tool { - name = "solana_airdrop_compressed_tokens"; - description = `Airdrop tokens with zk compression +export class SolanaCompressedAirdropTool extends Tool { + name = "solana_compressed_airdrop"; + description = `Airdrop SPL tokens with ZK Compression Inputs: - mintAddress: string, the mint address of the token, e.g., "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" - amount: number, the amount of tokens to airdrop per recipient, e.g., 42 - - recipients: string[], the recipient addresses, e.g., ["JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN", "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"] - - priorityFeeInLamports: number, the priority fee in lamports, e.g., 10_000. Default is 30_000. + - recipients: string[], the recipient addresses, e.g., ["1nc1nerator11111111111111111111111111111111", "1nc1nerator11111111111111111111111111111111"] + - priorityFeeInLamports: number, the priority fee in lamports. Default is 30_000. `; constructor(private solanaKit: SolanaAgentKit) { @@ -765,6 +765,6 @@ export function createSolanaTools(solanaKit: SolanaAgentKit) { new SolanaGetDomainTool(solanaKit), new SolanaTokenDataTool(solanaKit), new SolanaTokenDataByTickerTool(solanaKit), - new SolanaAirdropCompressedTokensTool(solanaKit), + new SolanaCompressedAirdropTool(solanaKit), ]; } diff --git a/src/tools/index.ts b/src/tools/index.ts index 0e6af80..80607f3 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -14,4 +14,4 @@ export * from "./get_tps"; export * from "./get_token_data"; export * from "./stake_with_jup"; export * from "./fetch_price"; -export * from "./airdrop_compressed_tokens"; +export * from "./send_compressed_airdrop"; diff --git a/src/tools/airdrop_compressed_tokens/index.ts b/src/tools/send_compressed_airdrop.ts similarity index 99% rename from src/tools/airdrop_compressed_tokens/index.ts rename to src/tools/send_compressed_airdrop.ts index 91d59a8..4d3e8be 100644 --- a/src/tools/airdrop_compressed_tokens/index.ts +++ b/src/tools/send_compressed_airdrop.ts @@ -6,7 +6,7 @@ import { PublicKey, TransactionInstruction, } from "@solana/web3.js"; -import { SolanaAgentKit } from "../../agent/index.js"; +import { SolanaAgentKit } from "../agent/index.js"; import { buildAndSignTx, calculateComputeUnitPrice, @@ -81,6 +81,7 @@ export async function sendCompressedAirdrop( shouldLog ); } + async function processAll( agent: SolanaAgentKit, amount: number, From 8865c4a3a8434d3bdf244271e0f51030195d4884 Mon Sep 17 00:00:00 2001 From: Swenschaeferjohann Date: Fri, 20 Dec 2024 06:30:58 +0000 Subject: [PATCH 4/7] add example in readme.md --- README.md | 89 ++++++++++++++++++++-------- src/tools/send_compressed_airdrop.ts | 29 ++++++++- 2 files changed, 89 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 2272d47..2013b60 100644 --- a/README.md +++ b/README.md @@ -44,9 +44,9 @@ import { SolanaAgentKit, createSolanaTools } from "solana-agent-kit"; // Initialize with private key and optional RPC URL const agent = new SolanaAgentKit( - "your-wallet-private-key-as-base58", - "https://api.mainnet-beta.solana.com", - "your-openai-api-key" + "your-wallet-private-key-as-base58", + "https://api.mainnet-beta.solana.com", + "your-openai-api-key" ); // Create LangChain tools @@ -61,9 +61,9 @@ const tools = createSolanaTools(agent); import { deploy_token } from "solana-agent-kit"; const result = await deploy_token( - agent, - 9, // decimals - 1000000 // initial supply + agent, + 9, // decimals + 1000000 // initial supply ); console.log("Token Mint Address:", result.mint.toString()); @@ -75,15 +75,15 @@ console.log("Token Mint Address:", result.mint.toString()); import { deploy_collection } from "solana-agent-kit"; const collection = await deploy_collection(agent, { - name: "My NFT Collection", - uri: "https://arweave.net/metadata.json", - royaltyBasisPoints: 500, // 5% - creators: [ - { - address: "creator-wallet-address", - percentage: 100, - }, - ], + name: "My NFT Collection", + uri: "https://arweave.net/metadata.json", + royaltyBasisPoints: 500, // 5% + creators: [ + { + address: "creator-wallet-address", + percentage: 100, + }, + ], }); ``` @@ -94,11 +94,11 @@ import { trade } from "solana-agent-kit"; import { PublicKey } from "@solana/web3.js"; const signature = await trade( - agent, - new PublicKey("target-token-mint"), - 100, // amount - new PublicKey("source-token-mint"), - 300 // 3% slippage + agent, + new PublicKey("target-token-mint"), + 100, // amount + new PublicKey("source-token-mint"), + 300 // 3% slippage ); ``` @@ -109,8 +109,8 @@ import { lendAsset } from "solana-agent-kit"; import { PublicKey } from "@solana/web3.js"; const signature = await lendAsset( - agent, - 100 // amount + agent, + 100 // amount ); ``` @@ -120,8 +120,8 @@ const signature = await lendAsset( import { stakeWithJup } from "solana-agent-kit"; const signature = await stakeWithJup( - agent, - 1 // amount in SOL + agent, + 1 // amount in SOL ); ``` @@ -131,13 +131,44 @@ const signature = await stakeWithJup( import { fetchPrice } from "solana-agent-kit"; const price = await fetchPrice( - agent, - "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" // Token mint address + agent, + "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" // Token mint address ); console.log("Price in USDC:", price); ``` +### Send an SPL Token Airdrop via ZK Compression + +```typescript +import { + sendCompressedAirdrop, + getAirdropCostEstimate, +} from "solana-agent-kit"; +import { PublicKey } from "@solana/web3.js"; + +(async () => { + console.log( + "~Airdrop cost estimate:", + getAirdropCostEstimate( + 1000, // recipients + 30_000 // priority fee in lamports + ) + ); + + const signature = await sendCompressedAirdrop( + agent, + new PublicKey("JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"), // mint + 42, // amount per recipient + [ + new PublicKey("1nc1nerator11111111111111111111111111111111"), + // ... add more recipients + ], + 30_000 // priority fee in lamports + ); +})(); +``` + ## API Reference ### Core Functions @@ -174,6 +205,10 @@ Lend idle assets to earn interest with Lulo. Stake SOL with Jupiter to earn rewards. +#### `sendCompressedAirdrop(agent, mintAddress, amount, recipients, priorityFeeInLamports?, shouldLog?)` + +Send an SPL token airdrop to many recipients at low cost via ZK Compression. + ## Dependencies The toolkit relies on several key Solana and Metaplex libraries: @@ -183,6 +218,8 @@ The toolkit relies on several key Solana and Metaplex libraries: - @metaplex-foundation/mpl-token-metadata - @metaplex-foundation/mpl-core - @metaplex-foundation/umi +- @lightprotocol/compressed-token +- @lightprotocol/stateless.js ## Contributing diff --git a/src/tools/send_compressed_airdrop.ts b/src/tools/send_compressed_airdrop.ts index 4d3e8be..3ba30a0 100644 --- a/src/tools/send_compressed_airdrop.ts +++ b/src/tools/send_compressed_airdrop.ts @@ -21,8 +21,31 @@ import { } from "@lightprotocol/compressed-token"; import { Account, getOrCreateAssociatedTokenAccount } from "@solana/spl-token"; +// arbitrary const MAX_AIRDROP_RECIPIENTS = 1000; -const MAX_CONCURRENT = 30; +const MAX_CONCURRENT_TXS = 30; + +/** + * Estimate the cost of an airdrop in lamports. + * @param numberOfRecipients Number of recipients + * @param priorityFeeInLamports Priority fee in lamports + * @returns Estimated cost in lamports + */ +export const getAirdropCostEstimate = ( + numberOfRecipients: number, + priorityFeeInLamports: number +) => { + const baseFee = 5000; + const perRecipientCompressedStateFee = 300; + + const txsNeeded = Math.ceil(numberOfRecipients / 15); + const totalPriorityFees = txsNeeded * (baseFee + priorityFeeInLamports); + + return ( + perRecipientCompressedStateFee * numberOfRecipients + totalPriorityFees + ); +}; + /** * Send airdrop with ZK Compressed Tokens. * @param agent Agent @@ -183,9 +206,9 @@ async function processAll( } }; - for (let i = 0; i < instructionSets.length; i += MAX_CONCURRENT) { + for (let i = 0; i < instructionSets.length; i += MAX_CONCURRENT_TXS) { const batchPromises = instructionSets - .slice(i, i + MAX_CONCURRENT) + .slice(i, i + MAX_CONCURRENT_TXS) .map((instructions, idx) => sendTransactionWithRetry( rpc, From 4c95f3251f88ce914f988120624f625ac46483c4 Mon Sep 17 00:00:00 2001 From: Swenschaeferjohann Date: Fri, 20 Dec 2024 06:34:36 +0000 Subject: [PATCH 5/7] fmt docstring --- src/tools/send_compressed_airdrop.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tools/send_compressed_airdrop.ts b/src/tools/send_compressed_airdrop.ts index 3ba30a0..720dc31 100644 --- a/src/tools/send_compressed_airdrop.ts +++ b/src/tools/send_compressed_airdrop.ts @@ -27,9 +27,9 @@ const MAX_CONCURRENT_TXS = 30; /** * Estimate the cost of an airdrop in lamports. - * @param numberOfRecipients Number of recipients - * @param priorityFeeInLamports Priority fee in lamports - * @returns Estimated cost in lamports + * @param numberOfRecipients Number of recipients + * @param priorityFeeInLamports Priority fee in lamports + * @returns Estimated cost in lamports */ export const getAirdropCostEstimate = ( numberOfRecipients: number, From d3176859f6d2b7287d1866b6323e2a366285228c Mon Sep 17 00:00:00 2001 From: aryan Date: Fri, 20 Dec 2024 18:46:54 +0530 Subject: [PATCH 6/7] feat: decimal --- src/agent/index.ts | 2 ++ src/langchain/index.ts | 18 +++++++------- src/tools/send_compressed_airdrop.ts | 36 ++++++++++++++++++---------- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/agent/index.ts b/src/agent/index.ts index 58e5188..b8aa154 100644 --- a/src/agent/index.ts +++ b/src/agent/index.ts @@ -144,6 +144,7 @@ export class SolanaAgentKit { async sendCompressedAirdrop( mintAddress: string, amount: number, + decimals: number, recipients: string[], priorityFeeInLamports: number, shouldLog: boolean @@ -152,6 +153,7 @@ export class SolanaAgentKit { this, new PublicKey(mintAddress), amount, + decimals, recipients.map((recipient) => new PublicKey(recipient)), priorityFeeInLamports, shouldLog diff --git a/src/langchain/index.ts b/src/langchain/index.ts index 72a699d..1f5f717 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -704,14 +704,15 @@ export class SolanaTokenDataByTickerTool extends Tool { export class SolanaCompressedAirdropTool extends Tool { name = "solana_compressed_airdrop"; - description = `Airdrop SPL tokens with ZK Compression + description = `Airdrop SPL tokens with ZK Compression (also called as airdropping tokens) - Inputs: - - mintAddress: string, the mint address of the token, e.g., "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" - - amount: number, the amount of tokens to airdrop per recipient, e.g., 42 - - recipients: string[], the recipient addresses, e.g., ["1nc1nerator11111111111111111111111111111111", "1nc1nerator11111111111111111111111111111111"] - - priorityFeeInLamports: number, the priority fee in lamports. Default is 30_000. - `; + Inputs (input is a JSON string): + mintAddress: string, the mint address of the token, e.g., "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" (required) + amount: number, the amount of tokens to airdrop per recipient, e.g., 42 (required) + decimals: number, the decimals of the token, e.g., 6 (required) + recipients: string[], the recipient addresses, e.g., ["1nc1nerator11111111111111111111111111111111"] (required) + priorityFeeInLamports: number, the priority fee in lamports. Default is 30_000. (optional) + shouldLog: boolean, whether to log progress to stdout. Default is false. (optional)`; constructor(private solanaKit: SolanaAgentKit) { super(); @@ -724,9 +725,10 @@ export class SolanaCompressedAirdropTool extends Tool { const txs = await this.solanaKit.sendCompressedAirdrop( parsedInput.mintAddress, parsedInput.amount, + parsedInput.decimals, parsedInput.recipients, parsedInput.priorityFeeInLamports || 30_000, - false // no logging + parsedInput.shouldLog || false ); return JSON.stringify({ diff --git a/src/tools/send_compressed_airdrop.ts b/src/tools/send_compressed_airdrop.ts index 720dc31..313bbdb 100644 --- a/src/tools/send_compressed_airdrop.ts +++ b/src/tools/send_compressed_airdrop.ts @@ -51,15 +51,18 @@ export const getAirdropCostEstimate = ( * @param agent Agent * @param mintAddress SPL Mint address * @param amount Amount to send per recipient + * @param decimals Decimals of the token * @param recipients Recipient wallet addresses (no ATAs) + * @param priorityFeeInLamports Priority fee in lamports * @param shouldLog Whether to log progress to stdout. Defaults to false. */ export async function sendCompressedAirdrop( agent: SolanaAgentKit, mintAddress: PublicKey, amount: number, + decimals: number, recipients: PublicKey[], - prioFeeInLamports: number, + priorityFeeInLamports: number, shouldLog: boolean = false ): Promise { if (recipients.length > MAX_AIRDROP_RECIPIENTS) { @@ -67,6 +70,18 @@ export async function sendCompressedAirdrop( `Max airdrop can be ${MAX_AIRDROP_RECIPIENTS} recipients at a time. For more scale, use open source ZK Compression airdrop tools such as https://github.com/helius-labs/airship.` ); } + + + const url = agent.connection.rpcEndpoint; + if (url.includes("devnet")) { + throw new Error("Devnet is not supported for airdrop. Please use mainnet."); + } + if (!url.includes("helius")) { + console.warn( + "Warning: Must use RPC with ZK Compression support. Double check with your RPC provider if in doubt." + ); + } + let sourceTokenAccount: Account; try { sourceTokenAccount = await getOrCreateAssociatedTokenAccount( @@ -97,10 +112,10 @@ export async function sendCompressedAirdrop( return await processAll( agent, - amount, + amount * 10 ** decimals, mintAddress, recipients, - prioFeeInLamports, + priorityFeeInLamports, shouldLog ); } @@ -110,7 +125,7 @@ async function processAll( amount: number, mint: PublicKey, recipients: PublicKey[], - prioFeeInLamports: number, + priorityFeeInLamports: number, shouldLog: boolean ): Promise { const mintAddress = mint; @@ -147,7 +162,10 @@ async function processAll( const instructions: TransactionInstruction[] = [ ComputeBudgetProgram.setComputeUnitLimit({ units: 500_000 }), ComputeBudgetProgram.setComputeUnitPrice({ - microLamports: calculateComputeUnitPrice(prioFeeInLamports, 500_000), + microLamports: calculateComputeUnitPrice( + priorityFeeInLamports, + 500_000 + ), }), ]; @@ -176,14 +194,6 @@ async function processAll( ); const url = agent.connection.rpcEndpoint; - if (url.includes("devnet")) { - throw new Error("Devnet is not supported for airdrop. Please use mainnet."); - } - if (!url.includes("helius")) { - console.warn( - "Warning: Must use RPC with ZK Compression support. Double check with your RPC provider if in doubt." - ); - } const rpc = createRpc(url, url, url); const results = []; From c736d31246d6fd5762d3d6d2d18954d7f4d87aee Mon Sep 17 00:00:00 2001 From: aryan Date: Fri, 20 Dec 2024 18:51:01 +0530 Subject: [PATCH 7/7] chore: docs --- docs/CNAME | 1 - docs/assets/search.js | 2 +- docs/classes/SolanaAgentKit.html | 11 +++++----- docs/functions/createSolanaTools.html | 2 +- docs/index.html | 22 ++++++++++++------- docs/interfaces/CollectionDeployment.html | 4 ++-- docs/interfaces/CollectionOptions.html | 4 ++-- docs/interfaces/Creator.html | 4 ++-- docs/interfaces/FetchPriceResponse.html | 4 ++-- docs/interfaces/JupiterTokenData.html | 4 ++-- .../LuloAccountDetailsResponse.html | 4 ++-- .../interfaces/MintCollectionNFTResponse.html | 4 ++-- docs/interfaces/PumpFunTokenOptions.html | 4 ++-- docs/interfaces/PumpfunLaunchResponse.html | 4 ++-- src/tools/deploy_token.ts | 6 ----- src/tools/get_token_data.ts | 2 -- 16 files changed, 40 insertions(+), 42 deletions(-) delete mode 100644 docs/CNAME diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 2708636..0000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -solanaagentkit.xyz \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 619590d..0ec3fb6 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAE7Wc23LbOBKG34W+VTnGkbbvksm6KrvZmdQkmRtVykVTsMM1RXJIKBmNK+++BR7EhtCUm2bmKikL3f0D+NAAQYBPUV1+b6Lr9VP0mBWb6Jrxy1VUJFsTXUcfyzwpktcPprD/yWy0inZ1Hl1HaZ40jWle+T+ff7XbPFoNv0bXUfRjNXhVjB+8pmXR2HqX2rKmuDzzywP3q6hKalPYUOkYmF1wCSMXJrVZWVADj8WXxP2e5Lkhtd/ZoejyeLfJZlObppkRF5gsiV9Wpkiy26TKbh/NnhQ/MJkZn1/Ikdva/Lkzjb1JdqmxN7tiQ2sD1GyJjo2p8nL/qXw0NOD88ssj/1Lm+QzeEaMlGh6MfZPkSZEaUnSv+JK426ywv958IgUdyy6JaOukaO4NLZ2BwssYf8gaa+q35TbJaP0bmCyL35T5N/OxzGcpCIwWEvahzrZJvZ+hATFa2PcbGuBDySXRclNsXjeNsbSM5hVf2NKfPnyktm9XdGk8lwbfJjZ5s389YyKbsvx5aj5l6SNxrE8YLiIg2RXp1w+7bXWzK+hTC2q2REdjk0ca90PJmdE0WLfVJrGmK/mpLPORhPtd0U5VzaugzMn1KFf64P0XZwnWollhTX2fpKZ51f900pW38jleck34OntunTVomghTmTo1hU0ezLORvKLUYF7zHNYDv1VtU6MhjwvRm6z9h+zyrC8+UZNA60TQXZ3NiNmVXhiyLvdJbvdvkiZrPpRZYWc05BlqvFBQ2nX7HBnAZH5wHKq37aJz68xP6hjL0dFKD9bHMwglxBlm/ly1QXUmRDXZQ5HYXf0M9MdioNmLRMDm/29W2LH4rzeffjdNVRYNqmmyML0j3DJ7vuuz3gyv7nQdpkQYm2wSm7xEyGj6cjGwA+BEfCKtIsXojW6/Z9YadF6b8ns22uD1xHRPhTe5eaiT7bz4o9FiAd/NXZNZFOnJ+KPN4vBZkdksyd9nf+6yTWb3H397P0sKbr9YVpNnVZU8mDfVLOLOfLvFMqo6K+vM7m/MvA7y7V4i43gY3u+K9+3i+FQORAvSh+LJnD/tm5D08RrMTMMnFJxMwfOC9zn0M770OqXBs/wJUkxd4+v9EyIGm5eFh9C93+Xl6zQtd4V9a2yS5c0p8qZLz5gJSpvkfyT57iURzjxrvPonqjSZHa2pTWP/ldSF2bxEVuDhZ0mrTZLbbGteV/uX6PLNf5aoxlibFQ9ozn5OEbBdIEcrJUaIb2/tvnoRToOa84OLuaLODxWaev/wvcDXPTO1nQ+OXqxwqOTUdkGel9/N5kNd2jKF+xoLNCM+/yn5X8utuUtelLcC2cDXPyV3mxXZdrf9PcEXhXMV++5+omg4Wfx7V2XW1IddREz4cZmfsl2FOn123yqQO3PTB496cs+HGrLZb+/KnB70UH5Z2I1Js22CD208MLBYFtom+HyBh+1LLwuZlw/l59/f0aOOBgubOcny/e23Mt/NAevIapmE+9qYv81tsrNf20cUugzEcpkUt2p/iZDAbpmMytTbpDCFvd245/qJvItLQW2XyTF/WVM0U3stuAzPZnZ46prpudjPrZUCeyB7cm80Kx5M+li+Q1ffREXnvpvZ6k5PfjfGpl8/1FlqTj0hhaVmPJjbxO5QHCa8nh0s8Loikicfyh5NgTf+VOzRZGnwyhV6V3z++PaXOQJ8s6UitqZpJl5hTQkYTZYGT8vNrMh9eXrYL6soKzbmr+j6Kfpmaod7dB3xc3F+Fa2i+8zkG3fublgKpeW2fwmyKdNd+98vfbE/TNq+dLled6VfXUSr9cVKXJ3HWn/5sloPxu0P7R8GH+NfWkMWrdYMM2SBIfMMebRac8yQB4bcMxTRai0wQxEYCs9QRqu1xAxlYCg9QxWt1gozVIGh8gx1tFprzFAHhtozjKPVOsYM48Aw9gwvo9X6EjO8DAwvPcOraLW+wgyvAsMrHwDHA0PZYSE87IieFh+cHwQgnyDmuGAoQyyEiPkUMccGQzliIUjMJ4k5PhjKEgthYj5NzDHCUJ5YCBTziWKOE4YyxUKomE8Vc6wwlCsWgsV8spjjhaFssRAu5tPFHDMM5YuFgDGfMO6Y4ShhPCSM+4RxxwxHCeMhYfwoR7VJCs9SSJryCeOOGY4SxkPCuE8Yd8xwuRLyXKvYNw4J4z5h3DHDUcJ4SBj3CeOOGY4SxkPCuE8Yd8zwGJUdEsZ9wrhjhqOE8ZAw7hPGHTMcJYyHhHGfMOGYEShhIiRM+IQJx4xACRMhYcInTDhmBEqYCAkTRzNhOxUKrLUFMhn6hAnHjEBzmAgJEz5hwjEjFBo5JEz4hAnHjEAJEyFhwidMOGYEmsNESJjwCROOGYESJkLChE+YcMwIlDAREiZ8wqRjRqKEyZAw6RMmHTMSJUyGhEmfMOmYkShhMiRM+oRJx4xEc5gMCZNH6612wYWvuJAll0+YVJNsy5Aw6RMm9SSeMiRM+oRJx4xEs6cMCZM+YdIxI1G2ZUiY9AmTjhmJsi1DwqRPmGoJQ9lWIWHKJ0y1hKFsq5Aw5ROmHDMKZVuFhCmfMOWYUSjbKiRM+YQpx4ziWD+rkDB1tKpvl/Uo2wpZ2PuEKceMQtlWIWHKJ0w5ZhT+RBESpnzClGNGoYSpkDDlE6YcMwolTIWEKZ8wfTG5JtEhYdonTLPJlYEOCdM+YbolDGVbh4RpnzDdEoayrUPCtE+YdsxolG0dEqZ9wrRjRqNs65AwffTs2D48onlbI4+PPmHaMaNRtnVImPYJ044ZjbKtQ8K0T5h2zGiUbR0Spn3CYseMRtmOQ8Jin7CYTSaDOCQs9gmLHTMaf+QOCYt9wmLHjEbxjEPCYp+wuCUMxTMOCYt9wmLHTIziGYeExT5hsWMmRvGMQ8Liox2KdosCxTNGNil8wmLHTIziGYeE9X9qd7++mdqazbtuF2y9PmyAP0W3/daYOlwLfYqUjK6ffqyimLl/f4xbYu1fD7ti7jcX8fAqcvQ2bu89Rbz3pi9o3rq35tX41hyIBG6VJrnrdgtHF7EYXcSXRBf9znq2gZ50DDxxoqfhYCrSZgL0gJjrbwMObwOXDLikdeboshxOw4Ju1aBbqe0/Xt0FjoAfqpvx6vHoB9SPWL32ckrTXk6x5RFeHMoi6hqurAAvgDAu5njxcbgAfUcbOv5LVEAqqJemddv46huMvivghlaxDssUXGQd3V2O3mjjsHNmuytTYESDYUjy0x8gHD1IgLWkaYFvI0FDA0cxrc/u3QuL9m1OfXizBhyCRoppTR6+wgbuAJqa1lgPxt4Nl4FHR4CEK6qbqrvruenveoJBDLI6k1R3LQfuMOrdHkmmDDQco3Wp79P2VwSBS1BpRq61rXxdgFZG64HxPBYYigpMhDQ3/Sn2fDjF3rgjNWAMgFQqabl0OPdp+nOfwBloKkVz9r/u1fShB7zagkZTtJbvbllW3WHgIGVwkFs5bZy6C7xJf4EXdCcY8IyWWd05m/YaGxiWoO21onnZ5WXSHWfbdMfZsPQhQcNJWsMd3uuCBAumj5gG23hNB0xooK0Era0GN0ftJQH9kiioOyJYt6dXAFlAk6Klie4cPqgWECNUZySJ1Ts65AOIAClR03WNE21xbzEgBPAraKnW+S3uvSozMHwYbfh079bBCARk8rh/QKBliuMPlIDeBJ1Jc9WdKgYewASpaD7gtV5QP6CFkx0F56wAEcChpg3ldlWRFbtmk3rDGWSbmAbqcNfn3vjpBbSWpK1O+ozcpWc0ZQFCJY1QmOWRhxYBUBO0bDHcHEgqny/AvaI9Hwxf+kBWPSCrMqqz9rM49+1nce67z+IAQgAgRHftN0CaMkfUga5ltK7tb0bfuZvRVX8zGgwIsCTgNH7H2xKgCwC8iqYLXN0CUID6CdFnbdo4He7f3fkrOwn6U9L6s3sMTdwXFx4zL8MC0Gj5tf+0A2hv0FCclliHA3UAKdBpMW0wDoe1QZeBpbimNUx3AhroAO2haTrG+6ug00F1BI3BNqn4+z4xEBPTkGkvbn3rLm4BYkDDKFo391+uAeMUTAuMKObw2SPgBm6k0Gg5XFAG7QsqJGirlqOVHQceOM3D8J02IAOomOHiFnmMhJMRzdVwbRn4ALxIQjd/WUVVVpk8K0x0vf7y48f/AVBOKSsaUAAA"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAE7WcXXOcuBKG/wu+nXKiT2zf5eO4Kufk7KY22b2ZSrkwyBOOGWBBk+xsKv/9lGAYWqNm3JjsVVJjdfcr6VFLCInvUVN9a6Ob9ffoMS+z6Ibxq1VUJlsT3UQfqyIpk1cbU9r/5DZaRbumiG6itEja1rQv/D9ffrHbIloNf41uoujHavCqGD96Tauytc0utVVDcXnhlwfuV1GdNKa0odIxMHvJJYxcmtTmVUkNPBZfEvdbUhSG1H4Xx6LL490lWdaYtp0RF5gsiV/Vpkzyu6TO7x7NnhQ/MJkZn7+UI7eN+XNnWnub7FJjb3dlRmsD1GyJjszURbX/VD0aGnB++eWR31RFMYN3xGiJho2xr5MiKVNDiu4VXxJ3m5f2l9tPpKBj2SURbZOU7YOhpTNQeBnjm7y1pnlbbZOc1r+BybL4bVV8NR+rYpaCwGghYR+afJs0+xkaEKOFfZ/RAB9KLolWmDJ71bbG0jKaV3xhS3/68JHavn3RpfFcGnyb2OT1/tWMiWzK8uep+ZSnj8SxPmG4iIBkV6ZfPuy29e2upE8tqNkSHa1NHmncDyUXRTNl9qba1q4zTfYqb7KmqmnRJyxnqtFgFdmYxJq+5KeqKkYuH3ZlN3G2L4IyZ1fHXOmj9zfOEqyM89Ka5iFJTfvi8Kezrrx12OkCcMLXxVOrvkHTRJjaNKkpbbIxT0byilKDec1zXJ38WndNjYY8LURvsu4fssuLQ/GJmgRaJ4LumnxGzL70wpBNtU8Ku3+dtHn7ocpLO6MhL1DjhYLSvtvnyAAm84PjUL3tlsBbZ35Wx1iOjlZ6tD6dzyghLjDzp6oNqjMhqs03ZWJ3zRPQn4qBZs8SAZv/v3lpx+K/3H76zbR1VbaopsnC9I5wi/75ri8OZnh1p+swJcLYJEts8hwho+nzxcAOgMuCM2kVKUZvdPstt9ag89qU34vRBq8npnsqvCnMpkm28+KPRosFfDP3bW5RpCfjjzaLw+dlbvOkeJ//ucuz3O4//vp+lhTcfrGstsjrOtmY1/Us4i58u8Uy6iavmtzub828DvLtniPjdBg+7Mr33VL9XA5EC9KH4tmcP+2bkPTxGsxMw2cUnE3B84Ifcujv+NLrnAbP8idIMU2Dr/fPiBhsnhceQvd+V1Sv0rTalfatsUletOfImy49YyaobFL8kRS750S48Kzx6p+p0mR2tKYxrf1X0pQme46swMPPktaYpLD51ryq98/R5Zv/LFGtsTYvN2jOfkoRsF0gRyslRojv7uy+fhZOg5rLo4u5oi6PFZp6G/KtxNc9M7VdDo6erXCo5NR2QVFU30z2oalslcJ9jQWaEZ//lPwv1dbcJ8/KW4Fs4OufkrvNy3y72/6W4IvCuYp9dz9RNJws/r2rc2ua454mJvy0zE/ZrkKdPrlvFciduemDRz2750MN2e6391VBD3osvyxsZtJ8m+BDGw8MLJaFtgk+X+BhD6WXhSyqTfX7b+/oUUeDhc2c5MX+7mtV7OaAdWK1TMJDY8zf5i7Z2S/dIwpdBmK5TIpbtT9HSGC3TEZtmm1SmtLeZe65fiLv4lJQ22VyzF/WlO3UXgsuw7OZHZ66Znoq9lNrpcAeyJ7cG83LjUkfq3fo6puo6NJ3M1vd+cnv1tj0y4cmT825J6Sw1IwHc5vYHYrDhNeLowVeV0Ty5EPZoynxxp+KPZosDV67Qu/K3z++fTNHgG+2VMTWtO3EK6wpAaPJ0uBplc2KfChPD/t5FeVlZv6Kbr5HX03jcI9uIn4pLq+jVfSQmyJzpwCHpVBabQ8vQbIq3XX//Xwo9odJu5cuN+u+9IuX0Wr9ciWuL6+uP39erQfb7vfuh8HF+Etnx6LVmiF2LLBjnh2PVmuO2PHAjnt2IlqtBWInAjvh2clotZaInQzspGenotVaIXYqsFOenY5Wa43Y6cBOe3ZxtFrHiF0c2MWe3VW0Wl8hdleB3ZVndx2t1teI3XVgd+33u8OAYcSwEBl2wkwHDUoNgo3PDXM4MIwcFqLDfHaYQ4Jh9LAQH+bzwxwWDCOIhQgxnyHm0GAYRSzEiPkcMYcHw0hiIUrMZ4k5RBhGEwtxYj5PzGHCMKJYiBTzmWIOFYZRxUKsmM8Vd6hwjCsecsV9rrhDhWNc8ZArfpKPuoSEZiQkJflccYcKx7jiIVfc54o7VDjGFQ+54j5X3KHC1UrIy/iK+8YhWNwHiztWOAYWD8HiPljcscIxsHgIFvfB4o4VfoWKDsniPlncwcIxsnhIFvfJEg4WgZElQrKET5ZwsAiMLBGSJXyyhINFYGSJkCxxMtt10x063yETnk+WcLAIiTW0CNESPlrCwSKwlCVCsoRPlnCwCI0GDtESPlrC0SIwtESIlvDREg4WgeUsEZIlfLKEg0VgZImQLOGTJR0sEiNLhmRJnyzpYJEYWTIkS/pkSQeLxMiSIVnSJ0s6WCRGlgzJkidrqW4xha6mkOWUD5Z0rEgMLBmCJX2wpJ4kWoZgSR8sGU9SKUOypE+WdLBILFnKkCzpkyUdLBIjWoZkSZ8s1ZGFEa1CspRPlurIwohWIVnKJ0s5WBRGtArJUj5ZysGiMKJVSJbyyVIOFoURrUKy1MlKvVuqC6yDFbJa99FSDhaFIa1CspRPlnKsKPQhIQRL+WApx4rCwFIhWMoHSzlWFAaWCsFSPljasaIwsHQIlvbB0mxy2aFDsrRPluaT078O0dI+WrpDC0Nah2hpHy3taNEY0jpES/toaQeLxpDWIVn65EGwexLEkNbIs6BPlnawaCxJ65As7ZOlHSwaI1qHZGmfLO1g0RjROiRL+2TFDhaNER2HZMU+WbFjRaOPvyFYsQ9WzCeHfxyCFftgxY4VjQ2HOAQr9sGKO7AwKOMQrNgHK3asxBiUcQhW7IMVO1ZiDMo4BCs+2WXothkwKGNko8EHK3asxBiUcQhW7IMVO1ZiDMo4BOvwU7fp9dU01mTv+s2v9fq47/09ujvsiCkx7MN9j5SKbr7/WEUxd//+GHfCul+Pm2Huby7i8Q3k6I2r0Rs/eNOM5q1/WV6PL8uBSOBWxSR3/Sbh6CKWo4v4mujisKGeZ9CTvgKeBNHTcB4VaTMBekDM9ZeBM9vAJQcuaZ05uqyGQ7CgW2PQrdT2H+8PA0fAD9XNeP959MNGPzS6+jspbXcnxVYneHHQA5zYA8NNFeAFEMblHC8+DqBuglY5/90pIBXUS9O6bXzjDdy8BG5oFeuxTMFt2tEdGD5XM5zZ/t4WGNFgGJL8HM4Njh4kcCFpOQG+hAQtBLXQ+uzBvafoXuI0xxdqwOE1cEhr8vDNNXAH0NS0Rt8Yez/cSB4dAVm09toYW/cXTrPDhVMwiIEqRqvkxtiOA3cG9X6PJFMG6GLkmgKf9nBPEbgElWbkWtva1wUIYTRcx2NYYCLUYCKkVe9weL0YDq+37iQNGAMgJUtaTh6Oe5rDcU8gD2QKRXP2v/6N9LEHPHegM/VLkrv+qmfdnwEOUgYH+jjRoZN1uEUMuhP0A9M0R9Wm6m6vgWEJ2l4TveyKKulPsWX9KTYsfUjQcIpWz+PrXJBgwfQR02Abb+eACQ2gL2joD25O2kuCVpdEQf3JwKY7tALIApoUbUz3x+9BtYAYoXsjSazeydkeQARY6Gq6rnGiLR8sBoQAfoUi+y0fvCozMHwYDav+lToYgYBMfnV4QKBlitOvpIDeBJ1Jc9UfJgYewFSkaCMR3uYF9QNUcLKj4HgVIAI4jGlt3q0q8nLXZqk3nEG2iWmgDld8HoyfXkBrSdrEfcjIfXpGUxboREnrRZjlkYcWAVATtGwxXBhIap8vsCRXtOeD4XMjyKoHdAOjkX/4Ns9D922eh/7bPIAQkDKI7roPkbRVgagDOZ8Rq9pfiL53F6Lrw4Vo0AsgZwgav+6rBenxqwXJ8NUCMMjgYyStCceLF6BbgRtFwxjcAgNVBMNByMNMQOuK4Srfvb9alKAXJK0X+kfbxH284TH3sjboAGL799+sAO0N+Oe0x5vhbB5IP0BHTBvgw7lv0GVgLa5pDdMfpgbDBVRG03SMV2FBF4HqSFq7donK30uKgZiYhkx3B+xrfwcMyAENo2hddPgkDxj7IAUzYsscv+cE3MDNGaKU4a4zGFSgQoK2EjpZLXLggdM8DB+gAzKAihku7pBHUzhp0lwNN6CBD9C2ktC2n1dRndemyEsT3aw///jxf5ujh0DzUAAA"; \ No newline at end of file diff --git a/docs/classes/SolanaAgentKit.html b/docs/classes/SolanaAgentKit.html index 2ca220c..a4ae6e7 100644 --- a/docs/classes/SolanaAgentKit.html +++ b/docs/classes/SolanaAgentKit.html @@ -1,7 +1,7 @@ SolanaAgentKit | solana-agent-kit

Class SolanaAgentKit

Main class for interacting with Solana blockchain Provides a unified interface for token operations, NFT management, and trading

SolanaAgentKit

-

Constructors

Constructors

Properties

connection openai_api_key wallet @@ -19,10 +19,11 @@ Provides a unified interface for token operations, NFT management, and tradingregisterDomain requestFaucetFunds resolveSolDomain +sendCompressedAirdrop stake trade transfer -

Constructors

  • Parameters

    • private_key: string
    • rpc_url: string = "https://api.mainnet-beta.solana.com"
    • openai_api_key: string

    Returns SolanaAgentKit

Properties

connection: Connection

Solana RPC connection

-
openai_api_key: string
wallet: Keypair

Wallet keypair for signing transactions

-
wallet_address: PublicKey

Public key of the wallet

-

Methods

  • Parameters

    • name: string
    • uri: string
    • symbol: string
    • decimals: number = DEFAULT_OPTIONS.TOKEN_DECIMALS
    • OptionalinitialSupply: number

    Returns Promise<{
        mint: PublicKey;
    }>

  • Parameters

    • Optionaltoken_address: PublicKey

    Returns Promise<null | number>

  • Parameters

    • account: PublicKey

    Returns Promise<string>

  • Parameters

    • tokenName: string
    • tokenTicker: string
    • description: string
    • imageUrl: string
    • Optionaloptions: PumpFunTokenOptions

    Returns Promise<{
        metadataUri: any;
        mint: string;
        signature: string;
    }>

  • Parameters

    • amount: number

    Returns Promise<string>

  • Parameters

    • collectionMint: PublicKey
    • metadata: {
          creators?: {
              address: string;
              share: number;
          }[];
          name: string;
          sellerFeeBasisPoints?: number;
          uri: string;
      }
      • Optionalcreators?: {
            address: string;
            share: number;
        }[]
      • name: string
      • OptionalsellerFeeBasisPoints?: number
      • uri: string
    • Optionalrecipient: PublicKey

    Returns Promise<MintCollectionNFTResponse>

  • Parameters

    • name: string
    • OptionalspaceKB: number

    Returns Promise<string>

  • Returns Promise<string>

  • Parameters

    • domain: string

    Returns Promise<PublicKey>

  • Parameters

    • amount: number

    Returns Promise<string>

  • Parameters

    • outputMint: PublicKey
    • inputAmount: number
    • OptionalinputMint: PublicKey
    • slippageBps: number = DEFAULT_OPTIONS.SLIPPAGE_BPS

    Returns Promise<string>

  • Parameters

    • to: PublicKey
    • amount: number
    • Optionalmint: PublicKey

    Returns Promise<string>

+

Constructors

  • Parameters

    • private_key: string
    • rpc_url: string = "https://api.mainnet-beta.solana.com"
    • openai_api_key: string

    Returns SolanaAgentKit

Properties

connection: Connection

Solana RPC connection

+
openai_api_key: string
wallet: Keypair

Wallet keypair for signing transactions

+
wallet_address: PublicKey

Public key of the wallet

+

Methods

  • Parameters

    • name: string
    • uri: string
    • symbol: string
    • decimals: number = DEFAULT_OPTIONS.TOKEN_DECIMALS
    • OptionalinitialSupply: number

    Returns Promise<{
        mint: PublicKey;
    }>

  • Parameters

    • Optionaltoken_address: PublicKey

    Returns Promise<null | number>

  • Parameters

    • account: PublicKey

    Returns Promise<string>

  • Parameters

    • tokenName: string
    • tokenTicker: string
    • description: string
    • imageUrl: string
    • Optionaloptions: PumpFunTokenOptions

    Returns Promise<{
        metadataUri: any;
        mint: string;
        signature: string;
    }>

  • Parameters

    • amount: number

    Returns Promise<string>

  • Parameters

    • collectionMint: PublicKey
    • metadata: {
          creators?: {
              address: string;
              share: number;
          }[];
          name: string;
          sellerFeeBasisPoints?: number;
          uri: string;
      }
      • Optionalcreators?: {
            address: string;
            share: number;
        }[]
      • name: string
      • OptionalsellerFeeBasisPoints?: number
      • uri: string
    • Optionalrecipient: PublicKey

    Returns Promise<MintCollectionNFTResponse>

  • Parameters

    • name: string
    • OptionalspaceKB: number

    Returns Promise<string>

  • Returns Promise<string>

  • Parameters

    • domain: string

    Returns Promise<PublicKey>

  • Parameters

    • mintAddress: string
    • amount: number
    • decimals: number
    • recipients: string[]
    • priorityFeeInLamports: number
    • shouldLog: boolean

    Returns Promise<string[]>

  • Parameters

    • amount: number

    Returns Promise<string>

  • Parameters

    • outputMint: PublicKey
    • inputAmount: number
    • OptionalinputMint: PublicKey
    • slippageBps: number = DEFAULT_OPTIONS.SLIPPAGE_BPS

    Returns Promise<string>

  • Parameters

    • to: PublicKey
    • amount: number
    • Optionalmint: PublicKey

    Returns Promise<string>

diff --git a/docs/functions/createSolanaTools.html b/docs/functions/createSolanaTools.html index 61a720e..c2aab1d 100644 --- a/docs/functions/createSolanaTools.html +++ b/docs/functions/createSolanaTools.html @@ -1 +1 @@ -createSolanaTools | solana-agent-kit

Function createSolanaTools

  • Parameters

    Returns (
        | SolanaBalanceTool
        | SolanaTransferTool
        | SolanaDeployTokenTool
        | SolanaDeployCollectionTool
        | SolanaMintNFTTool
        | SolanaTradeTool
        | SolanaRequestFundsTool
        | SolanaRegisterDomainTool
        | SolanaResolveDomainTool
        | SolanaGetDomainTool
        | SolanaGetWalletAddressTool
        | SolanaPumpfunTokenLaunchTool
        | SolanaCreateImageTool
        | SolanaLendAssetTool
        | SolanaTPSCalculatorTool
        | SolanaStakeTool
        | SolanaFetchPriceTool
        | SolanaTokenDataTool
        | SolanaTokenDataByTickerTool)[]

+createSolanaTools | solana-agent-kit

Function createSolanaTools

  • Parameters

    Returns (
        | SolanaBalanceTool
        | SolanaTransferTool
        | SolanaDeployTokenTool
        | SolanaDeployCollectionTool
        | SolanaMintNFTTool
        | SolanaTradeTool
        | SolanaRequestFundsTool
        | SolanaRegisterDomainTool
        | SolanaResolveDomainTool
        | SolanaGetDomainTool
        | SolanaGetWalletAddressTool
        | SolanaPumpfunTokenLaunchTool
        | SolanaCreateImageTool
        | SolanaLendAssetTool
        | SolanaTPSCalculatorTool
        | SolanaStakeTool
        | SolanaFetchPriceTool
        | SolanaTokenDataTool
        | SolanaTokenDataByTickerTool
        | SolanaCompressedAirdropTool)[]

diff --git a/docs/index.html b/docs/index.html index 0bfab93..e7acd0e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -42,25 +42,28 @@
npm install solana-agent-kit
 
-
import { SolanaAgentKit, createSolanaTools } from "solana-agent-kit";

// Initialize with private key and optional RPC URL
const agent = new SolanaAgentKit(
"your-wallet-private-key-as-base58",
"https://api.mainnet-beta.solana.com",
"your-openai-api-key"
);

// Create LangChain tools
const tools = createSolanaTools(agent); +
import { SolanaAgentKit, createSolanaTools } from "solana-agent-kit";

// Initialize with private key and optional RPC URL
const agent = new SolanaAgentKit(
"your-wallet-private-key-as-base58",
"https://api.mainnet-beta.solana.com",
"your-openai-api-key"
);

// Create LangChain tools
const tools = createSolanaTools(agent);
-
import { deploy_token } from "solana-agent-kit";

const result = await deploy_token(
agent,
9, // decimals
1000000 // initial supply
);

console.log("Token Mint Address:", result.mint.toString()); +
import { deploy_token } from "solana-agent-kit";

const result = await deploy_token(
agent,
9, // decimals
1000000 // initial supply
);

console.log("Token Mint Address:", result.mint.toString());
-
import { deploy_collection } from "solana-agent-kit";

const collection = await deploy_collection(agent, {
name: "My NFT Collection",
uri: "https://arweave.net/metadata.json",
royaltyBasisPoints: 500, // 5%
creators: [
{
address: "creator-wallet-address",
percentage: 100,
},
],
}); +
import { deploy_collection } from "solana-agent-kit";

const collection = await deploy_collection(agent, {
name: "My NFT Collection",
uri: "https://arweave.net/metadata.json",
royaltyBasisPoints: 500, // 5%
creators: [
{
address: "creator-wallet-address",
percentage: 100,
},
],
});
-
import { trade } from "solana-agent-kit";
import { PublicKey } from "@solana/web3.js";

const signature = await trade(
agent,
new PublicKey("target-token-mint"),
100, // amount
new PublicKey("source-token-mint"),
300 // 3% slippage
); +
import { trade } from "solana-agent-kit";
import { PublicKey } from "@solana/web3.js";

const signature = await trade(
agent,
new PublicKey("target-token-mint"),
100, // amount
new PublicKey("source-token-mint"),
300 // 3% slippage
);
-
import { lendAsset } from "solana-agent-kit";
import { PublicKey } from "@solana/web3.js";

const signature = await lendAsset(
agent,
100 // amount
); +
import { lendAsset } from "solana-agent-kit";
import { PublicKey } from "@solana/web3.js";

const signature = await lendAsset(
agent,
100 // amount
);
-
import { stakeWithJup } from "solana-agent-kit";

const signature = await stakeWithJup(
agent,
1 // amount in SOL
); +
import { stakeWithJup } from "solana-agent-kit";

const signature = await stakeWithJup(
agent,
1 // amount in SOL
);
-
import { fetchPrice } from "solana-agent-kit";

const price = await fetchPrice(
agent,
"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" // Token mint address
);

console.log("Price in USDC:", price); +
import { fetchPrice } from "solana-agent-kit";

const price = await fetchPrice(
agent,
"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" // Token mint address
);

console.log("Price in USDC:", price); +
+ +
import {
sendCompressedAirdrop,
getAirdropCostEstimate,
} from "solana-agent-kit";
import { PublicKey } from "@solana/web3.js";

(async () => {
console.log(
"~Airdrop cost estimate:",
getAirdropCostEstimate(
1000, // recipients
30_000 // priority fee in lamports
)
);

const signature = await sendCompressedAirdrop(
agent,
new PublicKey("JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"), // mint
42, // amount per recipient
[
new PublicKey("1nc1nerator11111111111111111111111111111111"),
// ... add more recipients
],
30_000 // priority fee in lamports
);
})();

Deploy a new SPL token with optional initial supply. If not specified, decimals default to 9.

@@ -71,6 +74,7 @@

Check SOL or token balance for the agent's wallet.

Lend idle assets to earn interest with Lulo.

Stake SOL with Jupiter to earn rewards.

+

Send an SPL token airdrop to many recipients at low cost via ZK Compression.

The toolkit relies on several key Solana and Metaplex libraries:

  • @solana/web3.js
  • @@ -78,8 +82,10 @@
  • @metaplex-foundation/mpl-token-metadata
  • @metaplex-foundation/mpl-core
  • @metaplex-foundation/umi
  • +
  • @lightprotocol/compressed-token
  • +
  • @lightprotocol/stateless.js

Contributions are welcome! Please feel free to submit a Pull Request.

ISC License

This toolkit handles private keys and transactions. Always ensure you're using it in a secure environment and never share your private keys.

-
+
diff --git a/docs/interfaces/CollectionDeployment.html b/docs/interfaces/CollectionDeployment.html index b4aee88..0d71e30 100644 --- a/docs/interfaces/CollectionDeployment.html +++ b/docs/interfaces/CollectionDeployment.html @@ -1,3 +1,3 @@ -CollectionDeployment | solana-agent-kit

Interface CollectionDeployment

interface CollectionDeployment {
    collectionAddress: PublicKey;
    signature: Uint8Array;
}

Properties

collectionAddress +CollectionDeployment | solana-agent-kit

Interface CollectionDeployment

interface CollectionDeployment {
    collectionAddress: PublicKey;
    signature: Uint8Array<ArrayBufferLike>;
}

Properties

collectionAddress: PublicKey
signature: Uint8Array
+

Properties

collectionAddress: PublicKey
signature: Uint8Array<ArrayBufferLike>
diff --git a/docs/interfaces/CollectionOptions.html b/docs/interfaces/CollectionOptions.html index 36d0dec..903d39f 100644 --- a/docs/interfaces/CollectionOptions.html +++ b/docs/interfaces/CollectionOptions.html @@ -1,5 +1,5 @@ -CollectionOptions | solana-agent-kit

Interface CollectionOptions

interface CollectionOptions {
    creators?: Creator[];
    name: string;
    royaltyBasisPoints?: number;
    uri: string;
}

Properties

creators? +CollectionOptions | solana-agent-kit

Interface CollectionOptions

interface CollectionOptions {
    creators?: Creator[];
    name: string;
    royaltyBasisPoints?: number;
    uri: string;
}

Properties

creators?: Creator[]
name: string
royaltyBasisPoints?: number
uri: string
+

Properties

creators?: Creator[]
name: string
royaltyBasisPoints?: number
uri: string
diff --git a/docs/interfaces/Creator.html b/docs/interfaces/Creator.html index c29cb36..34aa17c 100644 --- a/docs/interfaces/Creator.html +++ b/docs/interfaces/Creator.html @@ -1,3 +1,3 @@ -Creator | solana-agent-kit

Interface Creator

interface Creator {
    address: string;
    percentage: number;
}

Properties

address +Creator | solana-agent-kit

Interface Creator

interface Creator {
    address: string;
    percentage: number;
}

Properties

Properties

address: string
percentage: number
+

Properties

address: string
percentage: number
diff --git a/docs/interfaces/FetchPriceResponse.html b/docs/interfaces/FetchPriceResponse.html index 60d787b..e48f8af 100644 --- a/docs/interfaces/FetchPriceResponse.html +++ b/docs/interfaces/FetchPriceResponse.html @@ -1,6 +1,6 @@ -FetchPriceResponse | solana-agent-kit

Interface FetchPriceResponse

interface FetchPriceResponse {
    code?: string;
    message?: string;
    priceInUSDC?: string;
    status: "success" | "error";
    tokenId?: string;
}

Properties

code? +FetchPriceResponse | solana-agent-kit

Interface FetchPriceResponse

interface FetchPriceResponse {
    code?: string;
    message?: string;
    priceInUSDC?: string;
    status: "success" | "error";
    tokenId?: string;
}

Properties

code?: string
message?: string
priceInUSDC?: string
status: "success" | "error"
tokenId?: string
+

Properties

code?: string
message?: string
priceInUSDC?: string
status: "success" | "error"
tokenId?: string
diff --git a/docs/interfaces/JupiterTokenData.html b/docs/interfaces/JupiterTokenData.html index c9fa775..180f3f4 100644 --- a/docs/interfaces/JupiterTokenData.html +++ b/docs/interfaces/JupiterTokenData.html @@ -1,4 +1,4 @@ -JupiterTokenData | solana-agent-kit

Interface JupiterTokenData

interface JupiterTokenData {
    address: string;
    daily_volume: number;
    decimals: number;
    extensions: {
        coingeckoId?: string;
    };
    freeze_authority: null | string;
    logoURI: string;
    mint_authority: null | string;
    name: string;
    permanent_delegate: null | string;
    symbol: string;
    tags: string[];
}

Properties

address +JupiterTokenData | solana-agent-kit

Interface JupiterTokenData

interface JupiterTokenData {
    address: string;
    daily_volume: number;
    decimals: number;
    extensions: {
        coingeckoId?: string;
    };
    freeze_authority: null | string;
    logoURI: string;
    mint_authority: null | string;
    name: string;
    permanent_delegate: null | string;
    symbol: string;
    tags: string[];
}

Properties

address: string
daily_volume: number
decimals: number
extensions: {
    coingeckoId?: string;
}
freeze_authority: null | string
logoURI: string
mint_authority: null | string
name: string
permanent_delegate: null | string
symbol: string
tags: string[]
+

Properties

address: string
daily_volume: number
decimals: number
extensions: {
    coingeckoId?: string;
}
freeze_authority: null | string
logoURI: string
mint_authority: null | string
name: string
permanent_delegate: null | string
symbol: string
tags: string[]
diff --git a/docs/interfaces/LuloAccountDetailsResponse.html b/docs/interfaces/LuloAccountDetailsResponse.html index 22a5efc..d5d3038 100644 --- a/docs/interfaces/LuloAccountDetailsResponse.html +++ b/docs/interfaces/LuloAccountDetailsResponse.html @@ -1,6 +1,6 @@ LuloAccountDetailsResponse | solana-agent-kit

Interface LuloAccountDetailsResponse

Lulo Account Details response format

-
interface LuloAccountDetailsResponse {
    interestEarned: number;
    realtimeApy: number;
    settings: {
        allowedProtocols: null | string;
        homebase: null | string;
        minimumRate: string;
        owner: string;
    };
    totalValue: number;
}

Properties

interface LuloAccountDetailsResponse {
    interestEarned: number;
    realtimeApy: number;
    settings: {
        allowedProtocols: null | string;
        homebase: null | string;
        minimumRate: string;
        owner: string;
    };
    totalValue: number;
}

Properties

interestEarned: number
realtimeApy: number
settings: {
    allowedProtocols: null | string;
    homebase: null | string;
    minimumRate: string;
    owner: string;
}
totalValue: number
+

Properties

interestEarned: number
realtimeApy: number
settings: {
    allowedProtocols: null | string;
    homebase: null | string;
    minimumRate: string;
    owner: string;
}
totalValue: number
diff --git a/docs/interfaces/MintCollectionNFTResponse.html b/docs/interfaces/MintCollectionNFTResponse.html index ad45b45..735a455 100644 --- a/docs/interfaces/MintCollectionNFTResponse.html +++ b/docs/interfaces/MintCollectionNFTResponse.html @@ -1,3 +1,3 @@ -MintCollectionNFTResponse | solana-agent-kit

Interface MintCollectionNFTResponse

interface MintCollectionNFTResponse {
    metadata: PublicKey;
    mint: PublicKey;
}

Properties

metadata +MintCollectionNFTResponse | solana-agent-kit

Interface MintCollectionNFTResponse

interface MintCollectionNFTResponse {
    metadata: PublicKey;
    mint: PublicKey;
}

Properties

Properties

metadata: PublicKey
mint: PublicKey
+

Properties

metadata: PublicKey
mint: PublicKey
diff --git a/docs/interfaces/PumpFunTokenOptions.html b/docs/interfaces/PumpFunTokenOptions.html index f4a8c97..69c0387 100644 --- a/docs/interfaces/PumpFunTokenOptions.html +++ b/docs/interfaces/PumpFunTokenOptions.html @@ -1,7 +1,7 @@ -PumpFunTokenOptions | solana-agent-kit

Interface PumpFunTokenOptions

interface PumpFunTokenOptions {
    initialLiquiditySOL?: number;
    priorityFee?: number;
    slippageBps?: number;
    telegram?: string;
    twitter?: string;
    website?: string;
}

Properties

initialLiquiditySOL? +PumpFunTokenOptions | solana-agent-kit

Interface PumpFunTokenOptions

interface PumpFunTokenOptions {
    initialLiquiditySOL?: number;
    priorityFee?: number;
    slippageBps?: number;
    telegram?: string;
    twitter?: string;
    website?: string;
}

Properties

initialLiquiditySOL?: number
priorityFee?: number
slippageBps?: number
telegram?: string
twitter?: string
website?: string
+

Properties

initialLiquiditySOL?: number
priorityFee?: number
slippageBps?: number
telegram?: string
twitter?: string
website?: string
diff --git a/docs/interfaces/PumpfunLaunchResponse.html b/docs/interfaces/PumpfunLaunchResponse.html index f832e9a..0e86c5b 100644 --- a/docs/interfaces/PumpfunLaunchResponse.html +++ b/docs/interfaces/PumpfunLaunchResponse.html @@ -1,5 +1,5 @@ -PumpfunLaunchResponse | solana-agent-kit

Interface PumpfunLaunchResponse

interface PumpfunLaunchResponse {
    error?: string;
    metadataUri?: string;
    mint: string;
    signature: string;
}

Properties

error? +PumpfunLaunchResponse | solana-agent-kit

Interface PumpfunLaunchResponse

interface PumpfunLaunchResponse {
    error?: string;
    metadataUri?: string;
    mint: string;
    signature: string;
}

Properties

error?: string
metadataUri?: string
mint: string
signature: string
+

Properties

error?: string
metadataUri?: string
mint: string
signature: string
diff --git a/src/tools/deploy_token.ts b/src/tools/deploy_token.ts index 39668da..a36d5de 100644 --- a/src/tools/deploy_token.ts +++ b/src/tools/deploy_token.ts @@ -57,16 +57,10 @@ export async function deploy_token( builder.sendAndConfirm(umi, { confirm: { commitment: 'finalized' } }); - console.log( - "Token deployed successfully. Mint address: ", - mint.publicKey.toString() - ); - return { mint: toWeb3JsPublicKey(mint.publicKey), }; } catch (error: any) { - console.log(error); throw new Error(`Token deployment failed: ${error.message}`); } } diff --git a/src/tools/get_token_data.ts b/src/tools/get_token_data.ts index 31d6032..110a801 100644 --- a/src/tools/get_token_data.ts +++ b/src/tools/get_token_data.ts @@ -44,8 +44,6 @@ export async function getTokenAddressFromTicker( .filter((pair: any) => pair.chainId === "solana") .sort((a: any, b: any) => (b.fdv || 0) - (a.fdv || 0)); - console.log("solanaPairs", solanaPairs); - solanaPairs = solanaPairs.filter( (pair: any) => pair.baseToken.symbol.toLowerCase() === ticker.toLowerCase()