keyring-agent-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/README.md +169 -0
  2. package/dist/agent/AgentCore.d.ts +220 -0
  3. package/dist/agent/AgentCore.d.ts.map +1 -0
  4. package/dist/agent/AgentCore.js +950 -0
  5. package/dist/agent/AgentCore.js.map +1 -0
  6. package/dist/agent/QueryRewriter.d.ts +67 -0
  7. package/dist/agent/QueryRewriter.d.ts.map +1 -0
  8. package/dist/agent/QueryRewriter.js +262 -0
  9. package/dist/agent/QueryRewriter.js.map +1 -0
  10. package/dist/agent/Router.d.ts +33 -0
  11. package/dist/agent/Router.d.ts.map +1 -0
  12. package/dist/agent/Router.js +191 -0
  13. package/dist/agent/Router.js.map +1 -0
  14. package/dist/agent/Subagent.d.ts +63 -0
  15. package/dist/agent/Subagent.d.ts.map +1 -0
  16. package/dist/agent/Subagent.js +240 -0
  17. package/dist/agent/Subagent.js.map +1 -0
  18. package/dist/agent/Synthesizer.d.ts +11 -0
  19. package/dist/agent/Synthesizer.d.ts.map +1 -0
  20. package/dist/agent/Synthesizer.js +86 -0
  21. package/dist/agent/Synthesizer.js.map +1 -0
  22. package/dist/agent/index.d.ts +10 -0
  23. package/dist/agent/index.d.ts.map +1 -0
  24. package/dist/agent/index.js +24 -0
  25. package/dist/agent/index.js.map +1 -0
  26. package/dist/agent/subagents/AiAgent.d.ts +6 -0
  27. package/dist/agent/subagents/AiAgent.d.ts.map +1 -0
  28. package/dist/agent/subagents/AiAgent.js +48 -0
  29. package/dist/agent/subagents/AiAgent.js.map +1 -0
  30. package/dist/agent/subagents/NftAgent.d.ts +6 -0
  31. package/dist/agent/subagents/NftAgent.d.ts.map +1 -0
  32. package/dist/agent/subagents/NftAgent.js +69 -0
  33. package/dist/agent/subagents/NftAgent.js.map +1 -0
  34. package/dist/agent/subagents/PoolAgent.d.ts +6 -0
  35. package/dist/agent/subagents/PoolAgent.d.ts.map +1 -0
  36. package/dist/agent/subagents/PoolAgent.js +184 -0
  37. package/dist/agent/subagents/PoolAgent.js.map +1 -0
  38. package/dist/agent/subagents/TokenAgent.d.ts +6 -0
  39. package/dist/agent/subagents/TokenAgent.d.ts.map +1 -0
  40. package/dist/agent/subagents/TokenAgent.js +75 -0
  41. package/dist/agent/subagents/TokenAgent.js.map +1 -0
  42. package/dist/agent/subagents/WalletAgent.d.ts +6 -0
  43. package/dist/agent/subagents/WalletAgent.d.ts.map +1 -0
  44. package/dist/agent/subagents/WalletAgent.js +92 -0
  45. package/dist/agent/subagents/WalletAgent.js.map +1 -0
  46. package/dist/agent/subagents/index.d.ts +14 -0
  47. package/dist/agent/subagents/index.d.ts.map +1 -0
  48. package/dist/agent/subagents/index.js +38 -0
  49. package/dist/agent/subagents/index.js.map +1 -0
  50. package/dist/constants/abi.d.ts +520 -0
  51. package/dist/constants/abi.d.ts.map +1 -0
  52. package/dist/constants/abi.js +667 -0
  53. package/dist/constants/abi.js.map +1 -0
  54. package/dist/functions/pool.d.ts +25 -0
  55. package/dist/functions/pool.d.ts.map +1 -0
  56. package/dist/functions/pool.js +151 -0
  57. package/dist/functions/pool.js.map +1 -0
  58. package/dist/functions/web3.d.ts +32 -0
  59. package/dist/functions/web3.d.ts.map +1 -0
  60. package/dist/functions/web3.js +277 -0
  61. package/dist/functions/web3.js.map +1 -0
  62. package/dist/index.d.ts +24 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +65 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/llm/GeminiProvider.d.ts +16 -0
  67. package/dist/llm/GeminiProvider.d.ts.map +1 -0
  68. package/dist/llm/GeminiProvider.js +248 -0
  69. package/dist/llm/GeminiProvider.js.map +1 -0
  70. package/dist/llm/index.d.ts +2 -0
  71. package/dist/llm/index.d.ts.map +1 -0
  72. package/dist/llm/index.js +6 -0
  73. package/dist/llm/index.js.map +1 -0
  74. package/dist/memory/ChatHistory.d.ts +83 -0
  75. package/dist/memory/ChatHistory.d.ts.map +1 -0
  76. package/dist/memory/ChatHistory.js +143 -0
  77. package/dist/memory/ChatHistory.js.map +1 -0
  78. package/dist/memory/KnowledgeBase.d.ts +38 -0
  79. package/dist/memory/KnowledgeBase.d.ts.map +1 -0
  80. package/dist/memory/KnowledgeBase.js +139 -0
  81. package/dist/memory/KnowledgeBase.js.map +1 -0
  82. package/dist/memory/Summarizer.d.ts +12 -0
  83. package/dist/memory/Summarizer.d.ts.map +1 -0
  84. package/dist/memory/Summarizer.js +39 -0
  85. package/dist/memory/Summarizer.js.map +1 -0
  86. package/dist/memory/UpstashKnowledgeBase.d.ts +124 -0
  87. package/dist/memory/UpstashKnowledgeBase.d.ts.map +1 -0
  88. package/dist/memory/UpstashKnowledgeBase.js +152 -0
  89. package/dist/memory/UpstashKnowledgeBase.js.map +1 -0
  90. package/dist/memory/historyUtils.d.ts +58 -0
  91. package/dist/memory/historyUtils.d.ts.map +1 -0
  92. package/dist/memory/historyUtils.js +190 -0
  93. package/dist/memory/historyUtils.js.map +1 -0
  94. package/dist/memory/index.d.ts +7 -0
  95. package/dist/memory/index.d.ts.map +1 -0
  96. package/dist/memory/index.js +12 -0
  97. package/dist/memory/index.js.map +1 -0
  98. package/dist/memory/ingestKnowledgeBase.d.ts +17 -0
  99. package/dist/memory/ingestKnowledgeBase.d.ts.map +1 -0
  100. package/dist/memory/ingestKnowledgeBase.js +35 -0
  101. package/dist/memory/ingestKnowledgeBase.js.map +1 -0
  102. package/dist/services/MoralisService.d.ts +1350 -0
  103. package/dist/services/MoralisService.d.ts.map +1 -0
  104. package/dist/services/MoralisService.js +1364 -0
  105. package/dist/services/MoralisService.js.map +1 -0
  106. package/dist/services/PantographService.d.ts +38 -0
  107. package/dist/services/PantographService.d.ts.map +1 -0
  108. package/dist/services/PantographService.js +199 -0
  109. package/dist/services/PantographService.js.map +1 -0
  110. package/dist/services/PoolService.d.ts +241 -0
  111. package/dist/services/PoolService.d.ts.map +1 -0
  112. package/dist/services/PoolService.js +507 -0
  113. package/dist/services/PoolService.js.map +1 -0
  114. package/dist/services/UniswapService.d.ts +289 -0
  115. package/dist/services/UniswapService.d.ts.map +1 -0
  116. package/dist/services/UniswapService.js +585 -0
  117. package/dist/services/UniswapService.js.map +1 -0
  118. package/dist/services/swap/BaseSwapService.d.ts +17 -0
  119. package/dist/services/swap/BaseSwapService.d.ts.map +1 -0
  120. package/dist/services/swap/BaseSwapService.js +19 -0
  121. package/dist/services/swap/BaseSwapService.js.map +1 -0
  122. package/dist/services/swap/DebridgeAdapter.d.ts +20 -0
  123. package/dist/services/swap/DebridgeAdapter.d.ts.map +1 -0
  124. package/dist/services/swap/DebridgeAdapter.js +175 -0
  125. package/dist/services/swap/DebridgeAdapter.js.map +1 -0
  126. package/dist/services/swap/RelayAdapter.d.ts +19 -0
  127. package/dist/services/swap/RelayAdapter.d.ts.map +1 -0
  128. package/dist/services/swap/RelayAdapter.js +189 -0
  129. package/dist/services/swap/RelayAdapter.js.map +1 -0
  130. package/dist/services/swap/SwapServiceFactory.d.ts +24 -0
  131. package/dist/services/swap/SwapServiceFactory.d.ts.map +1 -0
  132. package/dist/services/swap/SwapServiceFactory.js +74 -0
  133. package/dist/services/swap/SwapServiceFactory.js.map +1 -0
  134. package/dist/services/swap/addresses.d.ts +3 -0
  135. package/dist/services/swap/addresses.d.ts.map +1 -0
  136. package/dist/services/swap/addresses.js +68 -0
  137. package/dist/services/swap/addresses.js.map +1 -0
  138. package/dist/services/swap/affiliate.d.ts +17 -0
  139. package/dist/services/swap/affiliate.d.ts.map +1 -0
  140. package/dist/services/swap/affiliate.js +126 -0
  141. package/dist/services/swap/affiliate.js.map +1 -0
  142. package/dist/services/swap/config.d.ts +9 -0
  143. package/dist/services/swap/config.d.ts.map +1 -0
  144. package/dist/services/swap/config.js +19 -0
  145. package/dist/services/swap/config.js.map +1 -0
  146. package/dist/services/swap/index.d.ts +10 -0
  147. package/dist/services/swap/index.d.ts.map +1 -0
  148. package/dist/services/swap/index.js +22 -0
  149. package/dist/services/swap/index.js.map +1 -0
  150. package/dist/services/swap/types.d.ts +89 -0
  151. package/dist/services/swap/types.d.ts.map +1 -0
  152. package/dist/services/swap/types.js +6 -0
  153. package/dist/services/swap/types.js.map +1 -0
  154. package/dist/tools/BaseTool.d.ts +15 -0
  155. package/dist/tools/BaseTool.d.ts.map +1 -0
  156. package/dist/tools/BaseTool.js +35 -0
  157. package/dist/tools/BaseTool.js.map +1 -0
  158. package/dist/tools/ToolRegistry.d.ts +27 -0
  159. package/dist/tools/ToolRegistry.d.ts.map +1 -0
  160. package/dist/tools/ToolRegistry.js +80 -0
  161. package/dist/tools/ToolRegistry.js.map +1 -0
  162. package/dist/tools/builtin/ai/MoralisCortexTool.d.ts +33 -0
  163. package/dist/tools/builtin/ai/MoralisCortexTool.d.ts.map +1 -0
  164. package/dist/tools/builtin/ai/MoralisCortexTool.js +76 -0
  165. package/dist/tools/builtin/ai/MoralisCortexTool.js.map +1 -0
  166. package/dist/tools/builtin/ai/SolanaCortexTool.d.ts +22 -0
  167. package/dist/tools/builtin/ai/SolanaCortexTool.d.ts.map +1 -0
  168. package/dist/tools/builtin/ai/SolanaCortexTool.js +80 -0
  169. package/dist/tools/builtin/ai/SolanaCortexTool.js.map +1 -0
  170. package/dist/tools/builtin/ai/index.d.ts +5 -0
  171. package/dist/tools/builtin/ai/index.d.ts.map +1 -0
  172. package/dist/tools/builtin/ai/index.js +8 -0
  173. package/dist/tools/builtin/ai/index.js.map +1 -0
  174. package/dist/tools/builtin/index.d.ts +6 -0
  175. package/dist/tools/builtin/index.d.ts.map +1 -0
  176. package/dist/tools/builtin/index.js +22 -0
  177. package/dist/tools/builtin/index.js.map +1 -0
  178. package/dist/tools/builtin/nft/NFTContractInfoTool.d.ts +21 -0
  179. package/dist/tools/builtin/nft/NFTContractInfoTool.d.ts.map +1 -0
  180. package/dist/tools/builtin/nft/NFTContractInfoTool.js +54 -0
  181. package/dist/tools/builtin/nft/NFTContractInfoTool.js.map +1 -0
  182. package/dist/tools/builtin/nft/NFTMetadataTool.d.ts +121 -0
  183. package/dist/tools/builtin/nft/NFTMetadataTool.d.ts.map +1 -0
  184. package/dist/tools/builtin/nft/NFTMetadataTool.js +159 -0
  185. package/dist/tools/builtin/nft/NFTMetadataTool.js.map +1 -0
  186. package/dist/tools/builtin/nft/WalletNFTsTool.d.ts +82 -0
  187. package/dist/tools/builtin/nft/WalletNFTsTool.d.ts.map +1 -0
  188. package/dist/tools/builtin/nft/WalletNFTsTool.js +172 -0
  189. package/dist/tools/builtin/nft/WalletNFTsTool.js.map +1 -0
  190. package/dist/tools/builtin/nft/index.d.ts +7 -0
  191. package/dist/tools/builtin/nft/index.d.ts.map +1 -0
  192. package/dist/tools/builtin/nft/index.js +10 -0
  193. package/dist/tools/builtin/nft/index.js.map +1 -0
  194. package/dist/tools/builtin/pool/EstimatePoolYieldTool.d.ts +124 -0
  195. package/dist/tools/builtin/pool/EstimatePoolYieldTool.d.ts.map +1 -0
  196. package/dist/tools/builtin/pool/EstimatePoolYieldTool.js +235 -0
  197. package/dist/tools/builtin/pool/EstimatePoolYieldTool.js.map +1 -0
  198. package/dist/tools/builtin/pool/OpenAddLiquidityFormTool.d.ts +127 -0
  199. package/dist/tools/builtin/pool/OpenAddLiquidityFormTool.d.ts.map +1 -0
  200. package/dist/tools/builtin/pool/OpenAddLiquidityFormTool.js +517 -0
  201. package/dist/tools/builtin/pool/OpenAddLiquidityFormTool.js.map +1 -0
  202. package/dist/tools/builtin/pool/PoolByAddressTool.d.ts +127 -0
  203. package/dist/tools/builtin/pool/PoolByAddressTool.d.ts.map +1 -0
  204. package/dist/tools/builtin/pool/PoolByAddressTool.js +237 -0
  205. package/dist/tools/builtin/pool/PoolByAddressTool.js.map +1 -0
  206. package/dist/tools/builtin/pool/PoolDetailTool.d.ts +127 -0
  207. package/dist/tools/builtin/pool/PoolDetailTool.d.ts.map +1 -0
  208. package/dist/tools/builtin/pool/PoolDetailTool.js +272 -0
  209. package/dist/tools/builtin/pool/PoolDetailTool.js.map +1 -0
  210. package/dist/tools/builtin/pool/PoolSearchTool.d.ts +50 -0
  211. package/dist/tools/builtin/pool/PoolSearchTool.d.ts.map +1 -0
  212. package/dist/tools/builtin/pool/PoolSearchTool.js +159 -0
  213. package/dist/tools/builtin/pool/PoolSearchTool.js.map +1 -0
  214. package/dist/tools/builtin/pool/PreviewAddLiquidityTool.d.ts +123 -0
  215. package/dist/tools/builtin/pool/PreviewAddLiquidityTool.d.ts.map +1 -0
  216. package/dist/tools/builtin/pool/PreviewAddLiquidityTool.js +380 -0
  217. package/dist/tools/builtin/pool/PreviewAddLiquidityTool.js.map +1 -0
  218. package/dist/tools/builtin/pool/TopPoolsTool.d.ts +68 -0
  219. package/dist/tools/builtin/pool/TopPoolsTool.d.ts.map +1 -0
  220. package/dist/tools/builtin/pool/TopPoolsTool.js +158 -0
  221. package/dist/tools/builtin/pool/TopPoolsTool.js.map +1 -0
  222. package/dist/tools/builtin/pool/index.d.ts +15 -0
  223. package/dist/tools/builtin/pool/index.d.ts.map +1 -0
  224. package/dist/tools/builtin/pool/index.js +18 -0
  225. package/dist/tools/builtin/pool/index.js.map +1 -0
  226. package/dist/tools/builtin/token/TokenAnalyticsTool.d.ts +71 -0
  227. package/dist/tools/builtin/token/TokenAnalyticsTool.d.ts.map +1 -0
  228. package/dist/tools/builtin/token/TokenAnalyticsTool.js +146 -0
  229. package/dist/tools/builtin/token/TokenAnalyticsTool.js.map +1 -0
  230. package/dist/tools/builtin/token/TokenHoldersTool.d.ts +81 -0
  231. package/dist/tools/builtin/token/TokenHoldersTool.d.ts.map +1 -0
  232. package/dist/tools/builtin/token/TokenHoldersTool.js +138 -0
  233. package/dist/tools/builtin/token/TokenHoldersTool.js.map +1 -0
  234. package/dist/tools/builtin/token/TokenInfoTool.d.ts +36 -0
  235. package/dist/tools/builtin/token/TokenInfoTool.d.ts.map +1 -0
  236. package/dist/tools/builtin/token/TokenInfoTool.js +163 -0
  237. package/dist/tools/builtin/token/TokenInfoTool.js.map +1 -0
  238. package/dist/tools/builtin/token/TokenScoreTool.d.ts +63 -0
  239. package/dist/tools/builtin/token/TokenScoreTool.d.ts.map +1 -0
  240. package/dist/tools/builtin/token/TokenScoreTool.js +147 -0
  241. package/dist/tools/builtin/token/TokenScoreTool.js.map +1 -0
  242. package/dist/tools/builtin/token/TopGainersTool.d.ts +46 -0
  243. package/dist/tools/builtin/token/TopGainersTool.d.ts.map +1 -0
  244. package/dist/tools/builtin/token/TopGainersTool.js +110 -0
  245. package/dist/tools/builtin/token/TopGainersTool.js.map +1 -0
  246. package/dist/tools/builtin/token/TopLosersTool.d.ts +66 -0
  247. package/dist/tools/builtin/token/TopLosersTool.d.ts.map +1 -0
  248. package/dist/tools/builtin/token/TopLosersTool.js +128 -0
  249. package/dist/tools/builtin/token/TopLosersTool.js.map +1 -0
  250. package/dist/tools/builtin/token/TrendingTokensTool.d.ts +39 -0
  251. package/dist/tools/builtin/token/TrendingTokensTool.d.ts.map +1 -0
  252. package/dist/tools/builtin/token/TrendingTokensTool.js +75 -0
  253. package/dist/tools/builtin/token/TrendingTokensTool.js.map +1 -0
  254. package/dist/tools/builtin/token/index.d.ts +15 -0
  255. package/dist/tools/builtin/token/index.d.ts.map +1 -0
  256. package/dist/tools/builtin/token/index.js +18 -0
  257. package/dist/tools/builtin/token/index.js.map +1 -0
  258. package/dist/tools/builtin/wallet/TransactionByHashTool.d.ts +70 -0
  259. package/dist/tools/builtin/wallet/TransactionByHashTool.d.ts.map +1 -0
  260. package/dist/tools/builtin/wallet/TransactionByHashTool.js +110 -0
  261. package/dist/tools/builtin/wallet/TransactionByHashTool.js.map +1 -0
  262. package/dist/tools/builtin/wallet/WalletApprovalsTool.d.ts +107 -0
  263. package/dist/tools/builtin/wallet/WalletApprovalsTool.d.ts.map +1 -0
  264. package/dist/tools/builtin/wallet/WalletApprovalsTool.js +163 -0
  265. package/dist/tools/builtin/wallet/WalletApprovalsTool.js.map +1 -0
  266. package/dist/tools/builtin/wallet/WalletDefiPositionsTool.d.ts +61 -0
  267. package/dist/tools/builtin/wallet/WalletDefiPositionsTool.d.ts.map +1 -0
  268. package/dist/tools/builtin/wallet/WalletDefiPositionsTool.js +99 -0
  269. package/dist/tools/builtin/wallet/WalletDefiPositionsTool.js.map +1 -0
  270. package/dist/tools/builtin/wallet/WalletDefiProtocolPositionsTool.d.ts +68 -0
  271. package/dist/tools/builtin/wallet/WalletDefiProtocolPositionsTool.d.ts.map +1 -0
  272. package/dist/tools/builtin/wallet/WalletDefiProtocolPositionsTool.js +114 -0
  273. package/dist/tools/builtin/wallet/WalletDefiProtocolPositionsTool.js.map +1 -0
  274. package/dist/tools/builtin/wallet/WalletDefiSummaryTool.d.ts +50 -0
  275. package/dist/tools/builtin/wallet/WalletDefiSummaryTool.d.ts.map +1 -0
  276. package/dist/tools/builtin/wallet/WalletDefiSummaryTool.js +79 -0
  277. package/dist/tools/builtin/wallet/WalletDefiSummaryTool.js.map +1 -0
  278. package/dist/tools/builtin/wallet/WalletHistoryTool.d.ts +31 -0
  279. package/dist/tools/builtin/wallet/WalletHistoryTool.d.ts.map +1 -0
  280. package/dist/tools/builtin/wallet/WalletHistoryTool.js +153 -0
  281. package/dist/tools/builtin/wallet/WalletHistoryTool.js.map +1 -0
  282. package/dist/tools/builtin/wallet/WalletNetWorthTool.d.ts +44 -0
  283. package/dist/tools/builtin/wallet/WalletNetWorthTool.d.ts.map +1 -0
  284. package/dist/tools/builtin/wallet/WalletNetWorthTool.js +122 -0
  285. package/dist/tools/builtin/wallet/WalletNetWorthTool.js.map +1 -0
  286. package/dist/tools/builtin/wallet/WalletNftTransfersTool.d.ts +86 -0
  287. package/dist/tools/builtin/wallet/WalletNftTransfersTool.d.ts.map +1 -0
  288. package/dist/tools/builtin/wallet/WalletNftTransfersTool.js +264 -0
  289. package/dist/tools/builtin/wallet/WalletNftTransfersTool.js.map +1 -0
  290. package/dist/tools/builtin/wallet/WalletPnlSummaryTool.d.ts +43 -0
  291. package/dist/tools/builtin/wallet/WalletPnlSummaryTool.d.ts.map +1 -0
  292. package/dist/tools/builtin/wallet/WalletPnlSummaryTool.js +88 -0
  293. package/dist/tools/builtin/wallet/WalletPnlSummaryTool.js.map +1 -0
  294. package/dist/tools/builtin/wallet/WalletPnlTool.d.ts +43 -0
  295. package/dist/tools/builtin/wallet/WalletPnlTool.d.ts.map +1 -0
  296. package/dist/tools/builtin/wallet/WalletPnlTool.js +174 -0
  297. package/dist/tools/builtin/wallet/WalletPnlTool.js.map +1 -0
  298. package/dist/tools/builtin/wallet/WalletTokenBalancesTool.d.ts +35 -0
  299. package/dist/tools/builtin/wallet/WalletTokenBalancesTool.d.ts.map +1 -0
  300. package/dist/tools/builtin/wallet/WalletTokenBalancesTool.js +67 -0
  301. package/dist/tools/builtin/wallet/WalletTokenBalancesTool.js.map +1 -0
  302. package/dist/tools/builtin/wallet/WalletTokenTransfersTool.d.ts +109 -0
  303. package/dist/tools/builtin/wallet/WalletTokenTransfersTool.d.ts.map +1 -0
  304. package/dist/tools/builtin/wallet/WalletTokenTransfersTool.js +353 -0
  305. package/dist/tools/builtin/wallet/WalletTokenTransfersTool.js.map +1 -0
  306. package/dist/tools/builtin/wallet/index.d.ts +25 -0
  307. package/dist/tools/builtin/wallet/index.d.ts.map +1 -0
  308. package/dist/tools/builtin/wallet/index.js +28 -0
  309. package/dist/tools/builtin/wallet/index.js.map +1 -0
  310. package/dist/tools/index.d.ts +4 -0
  311. package/dist/tools/index.d.ts.map +1 -0
  312. package/dist/tools/index.js +23 -0
  313. package/dist/tools/index.js.map +1 -0
  314. package/dist/types/index.d.ts +566 -0
  315. package/dist/types/index.d.ts.map +1 -0
  316. package/dist/types/index.js +6 -0
  317. package/dist/types/index.js.map +1 -0
  318. package/package.json +52 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenInfoTool = void 0;
4
+ const BaseTool_1 = require("../../BaseTool");
5
+ const MoralisService_1 = require("../../../services/MoralisService");
6
+ const GeminiProvider_1 = require("../../../llm/GeminiProvider");
7
+ /**
8
+ * Tool: get-token-info
9
+ *
10
+ * Searches for a token by symbol/name and returns metadata, price,
11
+ * 24h change, and whether the user holds it in their wallet.
12
+ * Combines data from Pantograph search, Moralis metadata, and wallet balances.
13
+ */
14
+ class TokenInfoTool extends BaseTool_1.BaseTool {
15
+ name = 'get-token-info';
16
+ description = 'Get information about a specific cryptocurrency token: price, metadata, 24h change, market data, and user holdings. ' +
17
+ 'Use this when the user asks about: token price, token info, "what is X token", "tell me about X", ' +
18
+ '"how much is X worth", or any token-specific question. ' +
19
+ 'Supports: Ethereum, Optimism, BSC, Polygon, Base, Arbitrum, Avalanche, Linea';
20
+ category = 'blockchain-data';
21
+ parameters = [
22
+ {
23
+ name: 'keyword',
24
+ type: 'string',
25
+ description: 'Token symbol, name, or contract address (e.g. "USDC", "Pepe", "ETH", "0x1234…"). ' +
26
+ 'If a 0x address is provided, performs a precise contract lookup. Otherwise searches by name/symbol.',
27
+ required: true,
28
+ },
29
+ {
30
+ name: 'chain',
31
+ type: 'string',
32
+ description: 'Hex chain ID: "0x1" Ethereum, "0xa" Optimism, "0x38" BSC, "0x89" Polygon, "0x2105" Base, ' +
33
+ '"0xa4b1" Arbitrum, "0xa86a" Avalanche, "0xe708" Linea. Defaults to connected chain.',
34
+ required: true,
35
+ },
36
+ {
37
+ name: 'prompt',
38
+ type: 'string',
39
+ description: 'A rich, multi-angle research prompt sent to Gemini with Google Search grounding (real-time web access). ' +
40
+ "The prompt must be self-contained — Gemini does NOT see the user's original message, only this prompt. " +
41
+ 'ALWAYS include: the token symbol/name, the chain, and an instruction to use web search for up-to-date info. ' +
42
+ 'When the user asks an open/broad question (e.g. "show me X", "tell me about X", "what is X"), ' +
43
+ 'expand the prompt to cover ALL of these angles in one request: ' +
44
+ '(1) what the token/project is and its core utility, ' +
45
+ '(2) current USD price, 24h change, market cap, FDV, 24h volume, ' +
46
+ '(3) recent news, announcements, or notable events in the last 7-30 days, ' +
47
+ '(4) on-chain activity signals (holders, liquidity, unusual flows), ' +
48
+ '(5) team/protocol updates or roadmap items, ' +
49
+ '(6) key risks, red flags, or controversies, ' +
50
+ '(7) sentiment and notable community discussion. ' +
51
+ 'When the user asks a narrow question (e.g. "price of X"), still include 2-3 supporting angles for context. ' +
52
+ 'Aim for 3-6 sentences. Be specific to the token. Do not use generic filler. ' +
53
+ 'Example for "show me JPYT": "Research the JPYT token on Ethereum using up-to-date web sources. ' +
54
+ 'Cover: what JPYT is and who issues it; current USD price, 24h change, market cap, FDV, and 24h volume; ' +
55
+ 'recent news or announcements in the last 30 days; on-chain signals such as holder count, liquidity, ' +
56
+ 'and unusual volume patterns; team or protocol updates; key risks or red flags; and overall sentiment."',
57
+ required: true,
58
+ },
59
+ ];
60
+ service;
61
+ llm;
62
+ constructor(config) {
63
+ super();
64
+ this.service = new MoralisService_1.MoralisService(config);
65
+ this.llm = new GeminiProvider_1.GeminiProvider({});
66
+ }
67
+ async run(args, userContext) {
68
+ const keyword = args.keyword || '';
69
+ const chain = args.chain || userContext?.chain || '0x1';
70
+ const prompt = args.prompt || '';
71
+ const walletAddress = userContext?.walletAddress || undefined;
72
+ if (!keyword) {
73
+ return { error: 'Missing required parameter: keyword' };
74
+ }
75
+ return await this.searchToken(keyword, chain, prompt, walletAddress);
76
+ }
77
+ async searchToken(keyword, chain, prompt, walletAddress) {
78
+ const systemPrompt = [
79
+ walletAddress ? `User's connected wallet address: ${walletAddress}` : null,
80
+ chain ? `Current chain (hex chain ID): ${chain}, only consider tokens on this chain` : null,
81
+ 'Use this context to personalize your answer where relevant (e.g. whether the user holds the token, chain-specific data).',
82
+ ]
83
+ .filter(Boolean)
84
+ .join('\n');
85
+ // Run search, wallet check, and Gemini (with Google Search grounding) in parallel
86
+ const [searchRes, walletHolding, aiText] = await Promise.all([
87
+ this.service.searchTokensByKey({ key: keyword, chain }),
88
+ walletAddress ? this.findTokenInWallet(walletAddress, chain, keyword) : Promise.resolve(null),
89
+ prompt ? this.askGeminiWithSearch(prompt, systemPrompt) : Promise.resolve(null),
90
+ ]);
91
+ const list = searchRes.success && searchRes.data ? (Array.isArray(searchRes.data) ? searchRes.data : []) : [];
92
+ const kw = keyword.toLowerCase();
93
+ const isExactMatch = (t) => t.symbol?.toLowerCase() === kw || t.token_address?.toLowerCase() === kw;
94
+ const sortedList = [...list].sort((a, b) => (isExactMatch(a) ? 0 : 1) - (isExactMatch(b) ? 0 : 1));
95
+ // Get Moralis metadata for best match (richer price data)
96
+ let token = null;
97
+ const topResult = sortedList[0];
98
+ if (topResult?.token_address) {
99
+ const metaRes = await this.service.getTokenMetadata({
100
+ address: topResult.token_address,
101
+ chain,
102
+ });
103
+ if (metaRes.success && metaRes.data) {
104
+ token = metaRes.data;
105
+ }
106
+ }
107
+ // Fallback: use search result directly
108
+ if (!token && topResult) {
109
+ token = { ...topResult };
110
+ }
111
+ const data = {
112
+ _instructions: 'Present the token info in a clear summary. Include: token name & symbol, contract address (shortened), ' +
113
+ 'current USD price, 24h price change % (use ▲ for positive, ▼ for negative), market cap, ' +
114
+ 'fully diluted valuation, 24h trading volume, liquidity, and holder count (if available). ' +
115
+ 'If the user holds this token, prominently show their balance and USD value. ' +
116
+ 'If aiInsights is present, include it as a separate "AI Analysis" section after the token stats. ' +
117
+ 'Format numbers in a human-readable way (e.g. $1.23, +5.67%, $12.5M). If a field is null, omit it.',
118
+ chain,
119
+ userHoldsToken: !!walletHolding,
120
+ walletBalance: walletHolding,
121
+ token,
122
+ ...(list.length > 1
123
+ ? {
124
+ searchResults: sortedList.slice(0, 10),
125
+ }
126
+ : {}),
127
+ aiInsights: aiText,
128
+ };
129
+ return data;
130
+ }
131
+ async askGeminiWithSearch(prompt, systemPrompt) {
132
+ const now = Date.now();
133
+ try {
134
+ const res = await this.llm.chat([
135
+ ...(systemPrompt ? [{ role: 'system', content: systemPrompt, timestamp: now }] : []),
136
+ { role: 'user', content: prompt, timestamp: now },
137
+ ], undefined, { googleSearch: true, maxRetries: 1 });
138
+ return res.text?.trim() || null;
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ async findTokenInWallet(walletAddress, chain, keyword) {
145
+ if (!keyword)
146
+ return null;
147
+ const balancesRes = await this.service.getWalletTokenBalances({
148
+ address: walletAddress,
149
+ chain,
150
+ excludeSpam: true,
151
+ excludeUnverifiedContracts: true,
152
+ });
153
+ if (!balancesRes.success || !balancesRes.data?.result)
154
+ return null;
155
+ const kw = keyword.toLowerCase();
156
+ const match = balancesRes.data.result.find((t) => t.token_address.toLowerCase() === kw || t.symbol?.toLowerCase() === kw || t.name?.toLowerCase().includes(kw));
157
+ if (!match)
158
+ return null;
159
+ return match;
160
+ }
161
+ }
162
+ exports.TokenInfoTool = TokenInfoTool;
163
+ //# sourceMappingURL=TokenInfoTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenInfoTool.js","sourceRoot":"","sources":["../../../../src/tools/builtin/token/TokenInfoTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { BaseTool } from '../../BaseTool';
2
+ import type { ToolParameter, UserContext } from '../../../types';
3
+ import { type MoralisServiceConfig } from '../../../services/MoralisService';
4
+ export type TokenScoreToolConfig = MoralisServiceConfig;
5
+ /**
6
+ * Tool: get-token-score
7
+ *
8
+ * Queries `GET /tokens/{tokenAddress}/score` — a composite 0–100 health/safety
9
+ * score for a single token, plus the underlying metrics Moralis uses to
10
+ * compute it.
11
+ *
12
+ * Returned fields:
13
+ * - score: integer 0–100 (higher = safer / healthier)
14
+ * - updatedAt: ISO timestamp of last refresh
15
+ * - metrics.usdPrice, metrics.liquidityUsd
16
+ * - metrics.volumeUsd: 10m / 30m / 1h / 4h / 12h / 1d / 7d / 30d
17
+ * - metrics.transactions: same 8 buckets
18
+ * - metrics.supply: { total, top10Percent }
19
+ *
20
+ * Accepts either `tokenSymbol` (e.g. "PEPE") or `contractAddress` (0x…).
21
+ * Symbol → address resolution mirrors `TokenAnalyticsTool` / `TokenHoldersTool`:
22
+ * first checks the connected wallet's balances, then falls back to Pantograph
23
+ * search.
24
+ */
25
+ export declare class TokenScoreTool extends BaseTool {
26
+ name: string;
27
+ description: string;
28
+ category: string;
29
+ parameters: ToolParameter[];
30
+ private service;
31
+ constructor(config?: TokenScoreToolConfig);
32
+ protected run(args: Record<string, unknown>, userContext?: UserContext): Promise<{
33
+ error: string;
34
+ token?: undefined;
35
+ score?: undefined;
36
+ updatedAt?: undefined;
37
+ metrics?: undefined;
38
+ } | {
39
+ token: {
40
+ symbol: string | null;
41
+ name: string | null;
42
+ contractAddress: string;
43
+ chain: string;
44
+ };
45
+ score: number | null;
46
+ updatedAt: string | null;
47
+ metrics: {
48
+ usdPrice: number | null;
49
+ liquidityUsd: number | null;
50
+ volumeUsd: import("../../../services/MoralisService").TokenScoreTimeframeBuckets | null;
51
+ transactions: import("../../../services/MoralisService").TokenScoreTimeframeBuckets | null;
52
+ supply: import("../../../services/MoralisService").TokenScoreSupply | null;
53
+ };
54
+ error?: undefined;
55
+ }>;
56
+ /**
57
+ * Resolve a contract address from a token symbol.
58
+ * 1. Wallet balances (if wallet address available — most reliable)
59
+ * 2. Pantograph token search (fallback)
60
+ */
61
+ private resolveContractAddress;
62
+ }
63
+ //# sourceMappingURL=TokenScoreTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenScoreTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/builtin/token/TokenScoreTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAE7F,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,IAAI,SAAqB;IACzB,WAAW,SAauE;IAClF,QAAQ,SAAqB;IAC7B,UAAU,EAAE,aAAa,EAAE,CA0BzB;IAEF,OAAO,CAAC,OAAO,CAAiB;gBAEpB,MAAM,CAAC,EAAE,oBAAoB;cAKzB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;IA0D5E;;;;OAIG;YACW,sBAAsB;CA4BrC"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenScoreTool = void 0;
4
+ const BaseTool_1 = require("../../BaseTool");
5
+ const MoralisService_1 = require("../../../services/MoralisService");
6
+ /**
7
+ * Tool: get-token-score
8
+ *
9
+ * Queries `GET /tokens/{tokenAddress}/score` — a composite 0–100 health/safety
10
+ * score for a single token, plus the underlying metrics Moralis uses to
11
+ * compute it.
12
+ *
13
+ * Returned fields:
14
+ * - score: integer 0–100 (higher = safer / healthier)
15
+ * - updatedAt: ISO timestamp of last refresh
16
+ * - metrics.usdPrice, metrics.liquidityUsd
17
+ * - metrics.volumeUsd: 10m / 30m / 1h / 4h / 12h / 1d / 7d / 30d
18
+ * - metrics.transactions: same 8 buckets
19
+ * - metrics.supply: { total, top10Percent }
20
+ *
21
+ * Accepts either `tokenSymbol` (e.g. "PEPE") or `contractAddress` (0x…).
22
+ * Symbol → address resolution mirrors `TokenAnalyticsTool` / `TokenHoldersTool`:
23
+ * first checks the connected wallet's balances, then falls back to Pantograph
24
+ * search.
25
+ */
26
+ class TokenScoreTool extends BaseTool_1.BaseTool {
27
+ name = 'get-token-score';
28
+ description = 'Get a composite 0–100 health/safety score for a single ERC-20 token, plus the metrics behind it. ' +
29
+ 'Returns: overall score, last-updated timestamp, current USD price, paired liquidity, ' +
30
+ 'multi-timeframe volume buckets (10m / 30m / 1h / 4h / 12h / 1d / 7d / 30d), ' +
31
+ 'same buckets for transaction counts, and supply info (total supply + % held by top 10 holders). ' +
32
+ 'Use tokenSymbol (e.g. "PEPE") to look up by name — the tool auto-resolves the contract address. ' +
33
+ 'Use contractAddress when you already have the exact 0x address. ' +
34
+ 'Use this tool for questions like: ' +
35
+ '"Is PEPE a safe token?" (tokenSymbol=PEPE → score), ' +
36
+ '"What\'s the health/score of USDC?", ' +
37
+ '"How concentrated is X\'s supply among whales?" (→ metrics.supply.top10Percent), ' +
38
+ '"How much volume did this token do over the last 7 days?" (→ metrics.volumeUsd.7d), ' +
39
+ '"Transaction count for this token in the last hour?" (→ metrics.transactions.1h). ' +
40
+ 'Supports: Ethereum, Optimism, BSC, Polygon, Base, Arbitrum, Avalanche, Linea.';
41
+ category = 'blockchain-data';
42
+ parameters = [
43
+ {
44
+ name: 'tokenSymbol',
45
+ type: 'string',
46
+ description: 'Token symbol (e.g. "PEPE", "USDC", "WETH"). ' +
47
+ "The tool resolves the contract address automatically: first checks the connected wallet's balances, " +
48
+ 'then searches by symbol. Takes precedence over contractAddress when both are given.',
49
+ required: false,
50
+ },
51
+ {
52
+ name: 'contractAddress',
53
+ type: 'string',
54
+ description: 'ERC-20 token contract address (0x…). Use when the exact address is already known. ' +
55
+ 'Ignored if tokenSymbol is provided.',
56
+ required: false,
57
+ },
58
+ {
59
+ name: 'chain',
60
+ type: 'string',
61
+ description: 'Hex chain ID: "0x1" Ethereum, "0xa" Optimism, "0x38" BSC, "0x89" Polygon, "0x2105" Base, ' +
62
+ '"0xa4b1" Arbitrum, "0xa86a" Avalanche, "0xe708" Linea. Defaults to connected chain.',
63
+ required: true,
64
+ },
65
+ ];
66
+ service;
67
+ constructor(config) {
68
+ super();
69
+ this.service = new MoralisService_1.MoralisService(config);
70
+ }
71
+ async run(args, userContext) {
72
+ const chain = args.chain || userContext?.chain || undefined;
73
+ const walletAddress = userContext?.walletAddress || undefined;
74
+ const tokenSymbol = typeof args.tokenSymbol === 'string' && args.tokenSymbol ? args.tokenSymbol.trim() : undefined;
75
+ let contractAddress = typeof args.contractAddress === 'string' && args.contractAddress ? args.contractAddress.trim() : undefined;
76
+ if (!tokenSymbol && !contractAddress) {
77
+ return { error: 'Provide either tokenSymbol (e.g. "PEPE") or contractAddress (0x…).' };
78
+ }
79
+ let resolvedSymbol;
80
+ let resolvedName;
81
+ if (tokenSymbol) {
82
+ const resolved = await this.resolveContractAddress(tokenSymbol, chain, walletAddress);
83
+ if (!resolved) {
84
+ return {
85
+ error: `Cannot resolve token symbol "${tokenSymbol}" to a contract address on chain ${chain ?? 'default'}. Try passing contractAddress directly.`,
86
+ };
87
+ }
88
+ contractAddress = resolved.address;
89
+ resolvedSymbol = resolved.symbol;
90
+ resolvedName = resolved.name;
91
+ }
92
+ const result = await this.service.getTokenScore({
93
+ address: contractAddress,
94
+ chain,
95
+ });
96
+ if (!result.success) {
97
+ return { error: result.error || 'Failed to fetch token score' };
98
+ }
99
+ const data = result.data ?? {};
100
+ const metrics = data.metrics ?? {};
101
+ return {
102
+ token: {
103
+ symbol: resolvedSymbol ?? tokenSymbol ?? null,
104
+ name: resolvedName ?? null,
105
+ contractAddress: contractAddress,
106
+ chain: chain || 'default',
107
+ },
108
+ score: data.score ?? null,
109
+ updatedAt: data.updatedAt ?? null,
110
+ metrics: {
111
+ usdPrice: metrics.usdPrice ?? null,
112
+ liquidityUsd: metrics.liquidityUsd ?? null,
113
+ volumeUsd: metrics.volumeUsd ?? null,
114
+ transactions: metrics.transactions ?? null,
115
+ supply: metrics.supply ?? null,
116
+ },
117
+ };
118
+ }
119
+ /**
120
+ * Resolve a contract address from a token symbol.
121
+ * 1. Wallet balances (if wallet address available — most reliable)
122
+ * 2. Pantograph token search (fallback)
123
+ */
124
+ async resolveContractAddress(symbol, chain, walletAddress) {
125
+ const symLower = symbol.toLowerCase();
126
+ if (walletAddress) {
127
+ const balRes = await this.service.getWalletTokenBalances({ address: walletAddress, chain });
128
+ if (balRes.success && balRes.data?.result?.length) {
129
+ const match = balRes.data.result.find((t) => (t.symbol ?? '').toLowerCase() === symLower);
130
+ if (match) {
131
+ return { address: match.token_address, symbol: match.symbol, name: match.name };
132
+ }
133
+ }
134
+ }
135
+ const searchRes = await this.service.searchTokensByKey({ key: symbol, chain });
136
+ if (searchRes.success && searchRes.data?.length) {
137
+ const exact = searchRes.data.find((t) => (t.symbol ?? '').toLowerCase() === symLower);
138
+ const candidate = exact ?? searchRes.data[0];
139
+ if (candidate?.token_address) {
140
+ return { address: candidate.token_address, symbol: candidate.symbol, name: candidate.name };
141
+ }
142
+ }
143
+ return undefined;
144
+ }
145
+ }
146
+ exports.TokenScoreTool = TokenScoreTool;
147
+ //# sourceMappingURL=TokenScoreTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenScoreTool.js","sourceRoot":"","sources":["../../../../src/tools/builtin/token/TokenScoreTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { BaseTool } from '../../BaseTool';
2
+ import type { ToolParameter, UserContext } from '../../../types';
3
+ import { type MoralisServiceConfig, type TopGainerToken, type TopGainersTimeFrame } from '../../../services/MoralisService';
4
+ export type TopGainersToolConfig = MoralisServiceConfig;
5
+ /**
6
+ * Tool: get-top-gainers
7
+ *
8
+ * Queries `GET /discovery/tokens/top-gainers` — tokens with the largest USD
9
+ * price increase over a chosen timeframe. Supports filters for minimum market
10
+ * cap and minimum security score so the caller can exclude micro-cap or
11
+ * risky contracts.
12
+ *
13
+ * Each row carries multi-timeframe buckets (1h / 1d / 1w / 1M) for:
14
+ * - price_percent_change_usd
15
+ * - volume_change_usd / net_volume_change_usd
16
+ * - liquidity_change_usd
17
+ * - holders_change
18
+ * - experienced_net_buyers_change
19
+ */
20
+ export declare class TopGainersTool extends BaseTool {
21
+ name: string;
22
+ description: string;
23
+ category: string;
24
+ parameters: ToolParameter[];
25
+ private service;
26
+ constructor(config?: TopGainersToolConfig);
27
+ protected run(args: Record<string, unknown>, userContext?: UserContext): Promise<{
28
+ error: string;
29
+ _instructions?: undefined;
30
+ timeFrame?: undefined;
31
+ filters?: undefined;
32
+ count?: undefined;
33
+ tokens?: undefined;
34
+ } | {
35
+ _instructions: string;
36
+ timeFrame: TopGainersTimeFrame | null;
37
+ filters: {
38
+ minMarketCap: number | null;
39
+ securityScore: number | null;
40
+ };
41
+ count: number;
42
+ tokens: TopGainerToken[];
43
+ error?: undefined;
44
+ }>;
45
+ }
46
+ //# sourceMappingURL=TopGainersTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopGainersTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/builtin/token/TopGainersTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACzB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAIxD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,IAAI,SAAqB;IACzB,WAAW,SAUiF;IAC5F,QAAQ,SAAqB;IAC7B,UAAU,EAAE,aAAa,EAAE,CAmCzB;IAEF,OAAO,CAAC,OAAO,CAAiB;gBAEpB,MAAM,CAAC,EAAE,oBAAoB;cAKzB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;CA+C7E"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TopGainersTool = void 0;
4
+ const BaseTool_1 = require("../../BaseTool");
5
+ const MoralisService_1 = require("../../../services/MoralisService");
6
+ const ALLOWED_TIMEFRAMES = ['1h', '1d', '1w', '1M'];
7
+ /**
8
+ * Tool: get-top-gainers
9
+ *
10
+ * Queries `GET /discovery/tokens/top-gainers` — tokens with the largest USD
11
+ * price increase over a chosen timeframe. Supports filters for minimum market
12
+ * cap and minimum security score so the caller can exclude micro-cap or
13
+ * risky contracts.
14
+ *
15
+ * Each row carries multi-timeframe buckets (1h / 1d / 1w / 1M) for:
16
+ * - price_percent_change_usd
17
+ * - volume_change_usd / net_volume_change_usd
18
+ * - liquidity_change_usd
19
+ * - holders_change
20
+ * - experienced_net_buyers_change
21
+ */
22
+ class TopGainersTool extends BaseTool_1.BaseTool {
23
+ name = 'get-top-gainers';
24
+ description = 'List tokens with the highest USD price increase over a chosen timeframe (1h / 1d / 1w / 1M). ' +
25
+ 'Returns price, market cap, fully-diluted valuation, token age, Twitter followers, security score, ' +
26
+ 'on-chain strength index, and multi-timeframe change buckets for: price %, volume, net volume, ' +
27
+ 'liquidity, holder count, and experienced net buyers. ' +
28
+ 'Optionally filter out low-quality tokens via minMarketCap (USD floor) and securityScore (0–100, higher = safer). ' +
29
+ 'Use this tool for questions like: ' +
30
+ '"What are today\'s top gainers?", "Biggest pumps this week?", "Which tokens went up most in the last hour?", ' +
31
+ '"Show me safe tokens that gained this month (securityScore >= 80)", ' +
32
+ '"Top gainers on Base with market cap over $10M". ' +
33
+ 'Supports: Ethereum, Optimism, BSC, Polygon, Base, Arbitrum, Avalanche, Linea, and more.';
34
+ category = 'blockchain-data';
35
+ parameters = [
36
+ {
37
+ name: 'chain',
38
+ type: 'string',
39
+ description: 'Hex chain ID: "0x1" Ethereum, "0xa" Optimism, "0x38" BSC, "0x89" Polygon, "0x2105" Base, ' +
40
+ '"0xa4b1" Arbitrum, "0xa86a" Avalanche, "0xe708" Linea. Defaults to connected chain, ' +
41
+ 'or Ethereum (0x1) if no chain is connected.',
42
+ required: true,
43
+ },
44
+ {
45
+ name: 'timeFrame',
46
+ type: 'string',
47
+ description: 'Window over which the price change is measured. Allowed values: ' +
48
+ '"1h" (last hour), "1d" (last 24h), "1w" (last 7 days), "1M" (last 30 days). ' +
49
+ 'Pick the timeframe that matches the user\'s question — e.g. "today" → "1d", "this week" → "1w".',
50
+ required: false,
51
+ },
52
+ {
53
+ name: 'minMarketCap',
54
+ type: 'number',
55
+ description: 'Minimum token market cap in USD. Use to exclude micro-caps and meme dust. ' +
56
+ 'Example: 1000000 = $1M floor, 10000000 = $10M floor. Omit for no floor.',
57
+ required: false,
58
+ },
59
+ {
60
+ name: 'securityScore',
61
+ type: 'number',
62
+ description: 'Minimum security score threshold on a 0–100 scale (higher = safer). ' +
63
+ 'Typical values: 70 (moderate safety), 80 (safe), 90 (very safe). Omit for no filter.',
64
+ required: false,
65
+ },
66
+ ];
67
+ service;
68
+ constructor(config) {
69
+ super();
70
+ this.service = new MoralisService_1.MoralisService(config);
71
+ }
72
+ async run(args, userContext) {
73
+ const chain = args.chain || userContext?.chain || '0x1';
74
+ const rawTimeFrame = typeof args.timeFrame === 'string' ? args.timeFrame.trim() : undefined;
75
+ const timeFrame = rawTimeFrame && ALLOWED_TIMEFRAMES.includes(rawTimeFrame)
76
+ ? rawTimeFrame
77
+ : undefined;
78
+ if (rawTimeFrame && !timeFrame) {
79
+ return {
80
+ error: `Invalid timeFrame "${rawTimeFrame}". Allowed values: ${ALLOWED_TIMEFRAMES.join(', ')}.`,
81
+ };
82
+ }
83
+ const minMarketCap = typeof args.minMarketCap === 'number' && Number.isFinite(args.minMarketCap) && args.minMarketCap >= 0
84
+ ? args.minMarketCap
85
+ : undefined;
86
+ const securityScore = typeof args.securityScore === 'number' && Number.isFinite(args.securityScore) ? args.securityScore : undefined;
87
+ const result = await this.service.getTopGainers({ chain, timeFrame, minMarketCap, securityScore });
88
+ if (!result.success) {
89
+ return { error: result.error || 'Failed to fetch top gainers' };
90
+ }
91
+ const tokens = result.data ?? [];
92
+ return {
93
+ _instructions: 'Present the top gainers as a ranked list. For each token show: rank number, name & symbol, ' +
94
+ 'current USD price, price change % over the selected timeframe (use ▲ for positive, ▼ for negative), ' +
95
+ 'market cap, 24h volume change, liquidity change, and security score (if available). ' +
96
+ 'Format numbers in a human-readable way (e.g. $1.23, +5.67%, $12.5M). ' +
97
+ 'If securityScore is present, add a safety label: ≥80 = Safe, 60–79 = Moderate, <60 = Risky. ' +
98
+ 'If a field is null, omit it.',
99
+ timeFrame: timeFrame ?? null,
100
+ filters: {
101
+ minMarketCap: minMarketCap ?? null,
102
+ securityScore: securityScore ?? null,
103
+ },
104
+ count: tokens.length,
105
+ tokens: tokens,
106
+ };
107
+ }
108
+ }
109
+ exports.TopGainersTool = TopGainersTool;
110
+ //# sourceMappingURL=TopGainersTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopGainersTool.js","sourceRoot":"","sources":["../../../../src/tools/builtin/token/TopGainersTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { BaseTool } from '../../BaseTool';
2
+ import type { ToolParameter, UserContext } from '../../../types';
3
+ import { type MoralisServiceConfig, type TopGainersTimeFrame } from '../../../services/MoralisService';
4
+ export type TopLosersToolConfig = MoralisServiceConfig;
5
+ /**
6
+ * Tool: get-top-losers
7
+ *
8
+ * Queries `GET /discovery/tokens/top-losers` — tokens with the largest USD
9
+ * price decrease over a chosen timeframe. Mirrors the top-gainers endpoint
10
+ * with the same filter set (minimum market cap, minimum security score) and
11
+ * the same response shape; only the ranking direction differs.
12
+ *
13
+ * Each row carries multi-timeframe buckets (1h / 1d / 1w / 1M) for:
14
+ * - price_percent_change_usd
15
+ * - volume_change_usd / net_volume_change_usd
16
+ * - liquidity_change_usd
17
+ * - holders_change
18
+ * - experienced_net_buyers_change
19
+ */
20
+ export declare class TopLosersTool extends BaseTool {
21
+ name: string;
22
+ description: string;
23
+ category: string;
24
+ parameters: ToolParameter[];
25
+ private service;
26
+ constructor(config?: TopLosersToolConfig);
27
+ protected run(args: Record<string, unknown>, userContext?: UserContext): Promise<{
28
+ error: string;
29
+ chain?: undefined;
30
+ timeFrame?: undefined;
31
+ filters?: undefined;
32
+ count?: undefined;
33
+ tokens?: undefined;
34
+ } | {
35
+ chain: string;
36
+ timeFrame: TopGainersTimeFrame | null;
37
+ filters: {
38
+ minMarketCap: number | null;
39
+ securityScore: number | null;
40
+ };
41
+ count: number;
42
+ tokens: {
43
+ chainId: string;
44
+ contractAddress: string;
45
+ symbol: string | null;
46
+ name: string | null;
47
+ logo: string | null;
48
+ usdPrice: number | null;
49
+ marketCap: number | null;
50
+ fullyDilutedValuation: number | null;
51
+ tokenAgeInDays: number | null;
52
+ securityScore: number | null;
53
+ onChainStrengthIndex: number | null;
54
+ twitterFollowers: number | null;
55
+ pricePercentChangeUsd: import("../../../services/MoralisService").TopGainerTimeFrames | null;
56
+ volumeChangeUsd: import("../../../services/MoralisService").TopGainerTimeFrames | null;
57
+ netVolumeChangeUsd: import("../../../services/MoralisService").TopGainerTimeFrames | null;
58
+ liquidityChangeUsd: import("../../../services/MoralisService").TopGainerTimeFrames | null;
59
+ holdersChange: import("../../../services/MoralisService").TopGainerTimeFrames | null;
60
+ experiencedNetBuyersChange: import("../../../services/MoralisService").TopGainerTimeFrames | null;
61
+ }[];
62
+ error?: undefined;
63
+ }>;
64
+ private projectToken;
65
+ }
66
+ //# sourceMappingURL=TopLosersTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopLosersTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/builtin/token/TopLosersTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,EACzB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAIvD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IACzC,IAAI,SAAoB;IACxB,WAAW,SAWiF;IAC5F,QAAQ,SAAqB;IAC7B,UAAU,EAAE,aAAa,EAAE,CAmCzB;IAEF,OAAO,CAAC,OAAO,CAAiB;gBAEpB,MAAM,CAAC,EAAE,mBAAmB;cAKxB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0C5E,OAAO,CAAC,YAAY;CAsBrB"}