@elizaos/plugin-wallet 2.0.0-beta.1 → 2.0.3-beta.6

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 (356) hide show
  1. package/README.md +70 -45
  2. package/auto-enable.ts +1 -1
  3. package/dist/actions/failure-codes.d.ts +12 -0
  4. package/dist/actions/index.d.ts +1 -0
  5. package/dist/analytics/birdeye/actions/wallet-search-address.d.ts +7 -0
  6. package/dist/analytics/birdeye/birdeye-task.d.ts +27 -0
  7. package/dist/analytics/birdeye/birdeye.d.ts +140 -0
  8. package/dist/analytics/birdeye/constants.d.ts +68 -0
  9. package/dist/analytics/birdeye/providers/agent-portfolio-provider.d.ts +8 -0
  10. package/dist/analytics/birdeye/providers/market.d.ts +18 -0
  11. package/dist/analytics/birdeye/providers/portfolio-factory.d.ts +10 -0
  12. package/dist/analytics/birdeye/providers/trending.d.ts +19 -0
  13. package/dist/analytics/birdeye/providers/wallet.d.ts +5 -0
  14. package/dist/analytics/birdeye/search-category.d.ts +52 -0
  15. package/dist/analytics/birdeye/service.d.ts +94 -0
  16. package/dist/analytics/birdeye/types/api/common.d.ts +199 -0
  17. package/dist/analytics/birdeye/types/api/defi.d.ts +187 -0
  18. package/dist/analytics/birdeye/types/api/pair.d.ts +182 -0
  19. package/dist/analytics/birdeye/types/api/search.d.ts +64 -0
  20. package/dist/analytics/birdeye/types/api/token.d.ts +580 -0
  21. package/dist/analytics/birdeye/types/api/trader.d.ts +70 -0
  22. package/dist/analytics/birdeye/types/api/wallet.d.ts +161 -0
  23. package/dist/analytics/birdeye/types/shared.d.ts +83 -0
  24. package/dist/analytics/birdeye/utils.d.ts +74 -0
  25. package/dist/analytics/dexscreener/errors.d.ts +2 -0
  26. package/dist/analytics/dexscreener/index.d.ts +3 -0
  27. package/dist/analytics/dexscreener/search-category.d.ts +3 -0
  28. package/dist/analytics/dexscreener/service.d.ts +34 -0
  29. package/dist/analytics/dexscreener/types.d.ts +131 -0
  30. package/dist/analytics/lpinfo/index.d.ts +31 -0
  31. package/dist/analytics/lpinfo/kamino/index.d.ts +7 -0
  32. package/dist/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.d.ts +6 -0
  33. package/dist/analytics/lpinfo/kamino/providers/kaminoPoolProvider.d.ts +6 -0
  34. package/dist/analytics/lpinfo/kamino/providers/kaminoProvider.d.ts +6 -0
  35. package/dist/analytics/lpinfo/kamino/services/kaminoLiquidityService.d.ts +203 -0
  36. package/dist/analytics/lpinfo/kamino/services/kaminoService.d.ts +171 -0
  37. package/dist/analytics/lpinfo/steer/index.d.ts +7 -0
  38. package/dist/analytics/lpinfo/steer/providers/steerLiquidityProvider.d.ts +6 -0
  39. package/dist/analytics/lpinfo/steer/services/steerLiquidityService.d.ts +208 -0
  40. package/dist/analytics/lpinfo/steer/steer-display-types.d.ts +97 -0
  41. package/dist/analytics/news/index.d.ts +32 -0
  42. package/dist/analytics/news/interfaces/types.d.ts +177 -0
  43. package/dist/analytics/news/providers/defiNewsProvider.d.ts +106 -0
  44. package/dist/analytics/news/services/newsDataService.d.ts +72 -0
  45. package/dist/analytics/news/utils/formatters.d.ts +54 -0
  46. package/dist/analytics/token-info/action.d.ts +6 -0
  47. package/dist/analytics/token-info/index.d.ts +3 -0
  48. package/dist/analytics/token-info/params.d.ts +10 -0
  49. package/dist/analytics/token-info/providers.d.ts +4 -0
  50. package/dist/analytics/token-info/service.d.ts +19 -0
  51. package/dist/analytics/token-info/types.d.ts +45 -0
  52. package/dist/api/wallet-routes.d.ts +100 -0
  53. package/dist/audit/audit-log.d.ts +29 -0
  54. package/dist/browser-shim/build-shim.d.ts +31 -0
  55. package/dist/browser-shim/index.d.ts +1 -0
  56. package/dist/chains/evm/actions/helpers.d.ts +31 -0
  57. package/dist/chains/evm/actions/swap.d.ts +53 -0
  58. package/dist/chains/evm/actions/transfer.d.ts +10 -0
  59. package/dist/chains/evm/bridge-router.d.ts +44 -0
  60. package/dist/chains/evm/build.d.ts +2 -0
  61. package/dist/chains/evm/chain-handler.d.ts +37 -0
  62. package/dist/chains/evm/constants.d.ts +16 -0
  63. package/dist/chains/evm/dex/aerodrome/index.d.ts +6 -0
  64. package/dist/chains/evm/dex/aerodrome/services/AerodromeLpService.d.ts +27 -0
  65. package/dist/chains/evm/dex/aerodrome/types.d.ts +435 -0
  66. package/dist/chains/evm/dex/pancakeswp/index.d.ts +6 -0
  67. package/dist/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.d.ts +28 -0
  68. package/dist/chains/evm/dex/pancakeswp/types.d.ts +19 -0
  69. package/dist/chains/evm/dex/uniswap/index.d.ts +6 -0
  70. package/dist/chains/evm/dex/uniswap/services/UniswapV3LpService.d.ts +28 -0
  71. package/dist/chains/evm/dex/uniswap/types.d.ts +458 -0
  72. package/dist/chains/evm/generated/specs/spec-helpers.d.ts +35 -0
  73. package/dist/chains/evm/generated/specs/specs.d.ts +99 -0
  74. package/dist/chains/evm/gov-router.d.ts +6 -0
  75. package/dist/chains/evm/index.browser.d.ts +3 -0
  76. package/dist/chains/evm/index.d.ts +6 -0
  77. package/dist/chains/evm/prompts.d.ts +24 -0
  78. package/dist/chains/evm/providers/get-balance.d.ts +2 -0
  79. package/dist/chains/evm/providers/wallet.d.ts +35 -0
  80. package/dist/chains/evm/routes/sign.d.ts +13 -0
  81. package/dist/chains/evm/rpc-providers.d.ts +26 -0
  82. package/dist/chains/evm/service.d.ts +26 -0
  83. package/dist/chains/evm/templates/index.d.ts +1 -0
  84. package/dist/chains/evm/types/index.d.ts +296 -0
  85. package/dist/chains/evm/vitest.config.d.ts +2 -0
  86. package/dist/chains/registry.d.ts +3 -0
  87. package/dist/chains/solana/actions/confirmation.d.ts +9 -0
  88. package/dist/chains/solana/bn.d.ts +6 -0
  89. package/dist/chains/solana/build.d.ts +2 -0
  90. package/dist/chains/solana/constants.d.ts +2 -0
  91. package/dist/chains/solana/dex/meteora/e2e/scenarios.d.ts +10 -0
  92. package/dist/chains/solana/dex/meteora/e2e/test-utils.d.ts +28 -0
  93. package/dist/chains/solana/dex/meteora/index.d.ts +3 -0
  94. package/dist/chains/solana/dex/meteora/providers/positionProvider.d.ts +9 -0
  95. package/dist/chains/solana/dex/meteora/services/MeteoraLpService.d.ts +37 -0
  96. package/dist/chains/solana/dex/meteora/utils/dlmm.d.ts +6 -0
  97. package/dist/chains/solana/dex/meteora/utils/loadWallet.d.ts +14 -0
  98. package/dist/chains/solana/dex/meteora/utils/sendTransaction.d.ts +2 -0
  99. package/dist/chains/solana/dex/orca/index.d.ts +6 -0
  100. package/dist/chains/solana/dex/orca/providers/positionProvider.d.ts +10 -0
  101. package/dist/chains/solana/dex/orca/services/srv_orca.d.ts +10 -0
  102. package/dist/chains/solana/dex/orca/types.d.ts +61 -0
  103. package/dist/chains/solana/dex/orca/utils/loadWallet.d.ts +1 -0
  104. package/dist/chains/solana/dex/orca/utils/sendTransaction.d.ts +2 -0
  105. package/dist/chains/solana/dex/raydium/index.d.ts +6 -0
  106. package/dist/chains/solana/dex/raydium/providers/positionProvider.d.ts +10 -0
  107. package/dist/chains/solana/dex/raydium/services/srv_raydium.d.ts +104 -0
  108. package/dist/chains/solana/dex/raydium/types.d.ts +42 -0
  109. package/dist/chains/solana/environment.d.ts +15 -0
  110. package/dist/chains/solana/generated/specs/spec-helpers.d.ts +35 -0
  111. package/dist/chains/solana/generated/specs/specs.d.ts +73 -0
  112. package/dist/chains/solana/index.browser.d.ts +3 -0
  113. package/dist/chains/solana/index.d.ts +7 -0
  114. package/dist/chains/solana/keypairUtils.d.ts +7 -0
  115. package/dist/chains/solana/prompts.d.ts +12 -0
  116. package/dist/chains/solana/providers/wallet.d.ts +2 -0
  117. package/dist/chains/solana/routes/index.d.ts +2 -0
  118. package/dist/chains/solana/routes/sign.d.ts +16 -0
  119. package/dist/chains/solana/service.d.ts +237 -0
  120. package/dist/chains/solana/types.d.ts +377 -0
  121. package/dist/chains/solana/vitest.config.d.ts +2 -0
  122. package/dist/chains/wallet-action.d.ts +3 -0
  123. package/dist/contracts.d.ts +58 -0
  124. package/dist/core-augmentation.d.ts +9 -0
  125. package/dist/index.d.mts +27 -34727
  126. package/dist/index.d.ts +27 -0
  127. package/dist/index.mjs +28246 -21186
  128. package/dist/index.mjs.map +153 -0
  129. package/dist/lib/server-wallet-trade.d.ts +22 -0
  130. package/dist/lib/server-wallet-trade.js +333 -0
  131. package/dist/lib/server-wallet-trade.js.map +11 -0
  132. package/dist/lib/wallet-export-guard.d.ts +45 -0
  133. package/dist/lp/actions/liquidity.d.ts +2 -0
  134. package/dist/lp/e2e/real-token-tests.d.ts +6 -0
  135. package/dist/lp/e2e/scenarios.d.ts +9 -0
  136. package/dist/lp/e2e/test-utils.d.ts +28 -0
  137. package/dist/lp/lp-manager-entry.d.ts +18 -0
  138. package/dist/lp/services/ConcentratedLiquidityService.d.ts +32 -0
  139. package/dist/lp/services/DexInteractionService.d.ts +34 -0
  140. package/dist/lp/services/LpManagementService.d.ts +116 -0
  141. package/dist/lp/services/UserLpProfileService.d.ts +18 -0
  142. package/dist/lp/services/VaultService.d.ts +21 -0
  143. package/dist/lp/services/YieldOptimizationService.d.ts +59 -0
  144. package/dist/lp/services/__tests__/MockLpService.d.ts +17 -0
  145. package/dist/lp/types.d.ts +439 -0
  146. package/dist/lp/utils/solanaClient.d.ts +26 -0
  147. package/dist/plugin.d.ts +7 -0
  148. package/dist/policy/policy.d.ts +14 -0
  149. package/dist/providers/canonical-provider.d.ts +19 -0
  150. package/dist/providers/wallet-provider.d.ts +5 -0
  151. package/dist/register-routes.d.ts +1 -0
  152. package/dist/routes/plugin.d.ts +14 -0
  153. package/dist/routes/wallet-market-overview-route.d.ts +7 -0
  154. package/dist/sdk/abi.d.ts +396 -0
  155. package/dist/sdk/bridge/abis.d.ts +63 -0
  156. package/dist/sdk/bridge/client.d.ts +48 -0
  157. package/dist/sdk/bridge/index.d.ts +14 -0
  158. package/dist/sdk/bridge/solana.d.ts +131 -0
  159. package/dist/sdk/bridge/types.d.ts +92 -0
  160. package/dist/sdk/convenience.d.ts +104 -0
  161. package/dist/sdk/escrow/MutualStakeEscrow.d.ts +75 -0
  162. package/dist/sdk/escrow/types.d.ts +58 -0
  163. package/dist/sdk/escrow/verifiers.d.ts +25 -0
  164. package/dist/sdk/identity/erc8004.d.ts +304 -0
  165. package/dist/sdk/identity/reputation.d.ts +317 -0
  166. package/dist/sdk/identity/uaid.d.ts +192 -0
  167. package/dist/sdk/identity/validation.d.ts +282 -0
  168. package/dist/sdk/index.d.ts +133 -0
  169. package/dist/sdk/index.js +5284 -0
  170. package/dist/sdk/index.js.map +40 -0
  171. package/dist/sdk/policy/SpendingPolicy.d.ts +105 -0
  172. package/dist/sdk/policy/UptoBillingPolicy.d.ts +87 -0
  173. package/dist/sdk/router/PaymentRouter.d.ts +77 -0
  174. package/dist/sdk/router/index.d.ts +2 -0
  175. package/dist/sdk/swap/SwapModule.d.ts +47 -0
  176. package/dist/sdk/swap/abi.d.ts +50 -0
  177. package/dist/sdk/swap/index.d.ts +11 -0
  178. package/dist/sdk/swap/types.d.ts +101 -0
  179. package/dist/sdk/tokens/decimals.d.ts +64 -0
  180. package/dist/sdk/tokens/registry.d.ts +81 -0
  181. package/dist/sdk/tokens/solana.d.ts +107 -0
  182. package/dist/sdk/tokens/transfers.d.ts +94 -0
  183. package/dist/sdk/types.d.ts +129 -0
  184. package/dist/sdk/wallet-core.d.ts +29450 -0
  185. package/dist/sdk/x402/budget.d.ts +51 -0
  186. package/dist/sdk/x402/chains/abstract/index.d.ts +134 -0
  187. package/dist/sdk/x402/client.d.ts +66 -0
  188. package/dist/sdk/x402/index.d.ts +8 -0
  189. package/dist/sdk/x402/middleware.d.ts +37 -0
  190. package/dist/sdk/x402/multi-asset.d.ts +53 -0
  191. package/dist/sdk/x402/types.d.ts +109 -0
  192. package/dist/security/wallet-context-safety.d.ts +7 -0
  193. package/dist/security/wallet-financial-confirmation.d.ts +23 -0
  194. package/dist/services/wallet-backend-service.d.ts +39 -0
  195. package/dist/types/wallet-router.d.ts +130 -0
  196. package/dist/utils/intent-trajectory.d.ts +34 -0
  197. package/dist/wallet/backend.d.ts +41 -0
  198. package/dist/wallet/errors.d.ts +17 -0
  199. package/dist/wallet/index.d.ts +6 -0
  200. package/dist/wallet/local-eoa-backend.d.ts +37 -0
  201. package/dist/wallet/pending.d.ts +47 -0
  202. package/dist/wallet/select-backend.d.ts +11 -0
  203. package/dist/wallet/steward-backend.d.ts +22 -0
  204. package/dist/wallet-action.d.ts +1 -0
  205. package/dist/wallet-action.js +6292 -0
  206. package/dist/wallet-action.js.map +44 -0
  207. package/package.json +35 -21
  208. package/registry-entry.json +134 -0
  209. package/src/analytics/birdeye/actions/wallet-search-address.ts +85 -5
  210. package/src/analytics/birdeye/birdeye-task.ts +25 -9
  211. package/src/analytics/birdeye/birdeye.ts +6 -7
  212. package/src/analytics/birdeye/constants.ts +0 -1
  213. package/src/analytics/birdeye/providers/agent-portfolio-provider.ts +0 -1
  214. package/src/analytics/birdeye/providers/market.ts +51 -45
  215. package/src/analytics/birdeye/providers/portfolio-factory.ts +79 -38
  216. package/src/analytics/birdeye/providers/trending.ts +43 -46
  217. package/src/analytics/birdeye/providers/wallet.ts +0 -1
  218. package/src/analytics/birdeye/search-category.test.ts +1 -1
  219. package/src/analytics/birdeye/search-category.ts +77 -12
  220. package/src/analytics/birdeye/service.test.ts +146 -0
  221. package/src/analytics/birdeye/service.ts +220 -105
  222. package/src/analytics/birdeye/types/api/common.ts +0 -1
  223. package/src/analytics/birdeye/types/api/defi.ts +0 -1
  224. package/src/analytics/birdeye/types/api/pair.ts +0 -1
  225. package/src/analytics/birdeye/types/api/search.ts +0 -1
  226. package/src/analytics/birdeye/types/api/token.ts +0 -1
  227. package/src/analytics/birdeye/types/api/trader.ts +0 -1
  228. package/src/analytics/birdeye/types/api/wallet.ts +0 -1
  229. package/src/analytics/birdeye/types/shared.ts +0 -11
  230. package/src/analytics/birdeye/utils.test.ts +69 -0
  231. package/src/analytics/birdeye/utils.ts +11 -8
  232. package/src/analytics/dexscreener/search-category.ts +0 -1
  233. package/src/analytics/dexscreener/service.ts +7 -12
  234. package/src/analytics/dexscreener/types.ts +0 -1
  235. package/src/analytics/lpinfo/index.ts +5 -2
  236. package/src/analytics/lpinfo/kamino/README.md +2 -2
  237. package/src/analytics/lpinfo/kamino/index.ts +9 -2
  238. package/src/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.ts +6 -26
  239. package/src/analytics/lpinfo/kamino/providers/kaminoPoolProvider.ts +11 -12
  240. package/src/analytics/lpinfo/kamino/providers/kaminoProvider.ts +76 -32
  241. package/src/analytics/lpinfo/kamino/services/kaminoLiquidityService.ts +78 -38
  242. package/src/analytics/lpinfo/kamino/services/kaminoService.ts +71 -31
  243. package/src/analytics/lpinfo/steer/index.ts +7 -2
  244. package/src/analytics/lpinfo/steer/providers/steerLiquidityProvider.ts +25 -26
  245. package/src/analytics/lpinfo/steer/services/steerLiquidityService.ts +367 -149
  246. package/src/analytics/news/index.ts +7 -2
  247. package/src/analytics/news/interfaces/types.ts +0 -1
  248. package/src/analytics/news/providers/defiNewsProvider.ts +17 -44
  249. package/src/analytics/news/services/newsDataService.ts +1 -22
  250. package/src/analytics/news/utils/formatters.test.ts +60 -0
  251. package/src/analytics/news/utils/formatters.ts +0 -1
  252. package/src/analytics/token-info/action.ts +52 -212
  253. package/src/analytics/token-info/index.ts +1 -1
  254. package/src/analytics/token-info/params.test.ts +69 -0
  255. package/src/analytics/token-info/params.ts +13 -11
  256. package/src/analytics/token-info/providers.ts +46 -17
  257. package/src/analytics/token-info/service.ts +3 -3
  258. package/src/analytics/token-info/types.ts +2 -2
  259. package/src/api/wallet-routes.test.ts +56 -0
  260. package/src/api/wallet-routes.ts +1728 -0
  261. package/src/audit/audit-log.ts +57 -2
  262. package/src/browser-shim/build-shim.ts +1 -1
  263. package/src/browser-shim/shim.template.js +107 -117
  264. package/src/chains/{wallet-router.test.ts → __tests__/wallet-router.test.ts} +57 -10
  265. package/src/chains/evm/actions/helpers.ts +9 -7
  266. package/src/chains/evm/actions/swap.ts +176 -22
  267. package/src/chains/evm/actions/transfer.ts +29 -22
  268. package/src/chains/evm/biome.json +1 -1
  269. package/src/chains/evm/build.ts +6 -1
  270. package/src/chains/evm/constants.ts +19 -0
  271. package/src/chains/evm/contracts/artifacts/OZGovernor.json +25 -1682
  272. package/src/chains/evm/dex/aerodrome/index.ts +6 -1
  273. package/src/chains/evm/dex/aerodrome/services/AerodromeLpService.ts +41 -15
  274. package/src/chains/evm/dex/aerodrome/types.ts +1 -2
  275. package/src/chains/evm/dex/pancakeswp/index.ts +6 -1
  276. package/src/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.ts +54 -17
  277. package/src/chains/evm/dex/pancakeswp/types.ts +1 -2
  278. package/src/chains/evm/dex/uniswap/index.ts +6 -1
  279. package/src/chains/evm/dex/uniswap/services/UniswapV3LpService.ts +20 -9
  280. package/src/chains/evm/dex/uniswap/types.ts +1 -2
  281. package/src/chains/evm/gov-router.ts +3 -1
  282. package/src/chains/evm/index.browser.ts +1 -1
  283. package/src/chains/evm/index.ts +5 -1
  284. package/src/chains/evm/prompts.ts +5 -0
  285. package/src/chains/evm/providers/get-balance.ts +1 -1
  286. package/src/chains/evm/providers/wallet.ts +80 -9
  287. package/src/chains/evm/routes/sign.ts +35 -26
  288. package/src/chains/evm/rpc-providers.ts +1 -1
  289. package/src/chains/evm/types/index.ts +22 -2
  290. package/src/chains/registry.ts +1 -1
  291. package/src/chains/wallet-action.ts +301 -91
  292. package/src/index.ts +9 -5
  293. package/src/lib/wallet-export-guard.test.ts +233 -0
  294. package/src/lib/wallet-export-guard.ts +1 -1
  295. package/src/lp/actions/liquidity.ts +53 -26
  296. package/src/lp/e2e/real-token-tests.ts +0 -1
  297. package/src/lp/e2e/scenarios.ts +1 -2
  298. package/src/lp/e2e/test-utils.ts +20 -7
  299. package/src/lp/lp-manager-entry.ts +2 -5
  300. package/src/lp/services/ConcentratedLiquidityService.ts +3 -10
  301. package/src/lp/services/DexInteractionService.ts +1 -2
  302. package/src/lp/services/LpManagementService.test.ts +0 -1
  303. package/src/lp/services/LpManagementService.ts +75 -35
  304. package/src/lp/services/UserLpProfileService.ts +2 -3
  305. package/src/lp/services/VaultService.ts +10 -4
  306. package/src/lp/services/YieldOptimizationService.ts +29 -13
  307. package/src/lp/services/__tests__/MockLpService.ts +1 -2
  308. package/src/lp/types.ts +9 -13
  309. package/src/lp/utils/solanaClient.ts +4 -2
  310. package/src/plugin.routes.test.ts +24 -0
  311. package/src/plugin.ts +30 -13
  312. package/src/providers/canonical-provider.ts +1 -1
  313. package/src/providers/{unified-wallet-provider.ts → wallet-provider.ts} +3 -3
  314. package/src/routes/__fixtures__/coingecko-markets.recorded.json +97 -0
  315. package/src/routes/wallet-market-overview-route.ts +1 -1
  316. package/src/routes/wallet-market-overview.contract.test.ts +139 -0
  317. package/src/routes/wallet-market-overview.real.test.ts +83 -0
  318. package/src/sdk/escrow/MutualStakeEscrow.ts +1 -2
  319. package/src/sdk/identity/erc8004.ts +1 -1
  320. package/src/sdk/identity/validation.ts +3 -4
  321. package/src/sdk/index.ts +2 -2
  322. package/src/sdk/policy/SpendingPolicy.ts +1 -1
  323. package/src/sdk/router/PaymentRouter.ts +8 -11
  324. package/src/sdk/swap/SwapModule.ts +1 -1
  325. package/src/sdk/tokens/registry.ts +1 -1
  326. package/src/sdk/x402/middleware.ts +2 -8
  327. package/src/security/__tests__/wallet-context-safety.test.ts +79 -0
  328. package/src/security/__tests__/wallet-financial-confirmation.test.ts +88 -0
  329. package/src/security/wallet-context-safety.ts +128 -0
  330. package/src/security/wallet-financial-confirmation.ts +150 -0
  331. package/src/services/wallet-backend-service.ts +15 -1
  332. package/src/utils/intent-trajectory.ts +2 -2
  333. package/src/wallet/steward-backend.ts +4 -4
  334. package/dist/LpManagementService-BWrQ5-cO.mjs +0 -353
  335. package/dist/MockLpService-D_Apn4Fd.mjs +0 -99
  336. package/dist/aerodrome-CfnESC32.mjs +0 -890
  337. package/dist/chunk-hT5z_Zn9.mjs +0 -35
  338. package/dist/lib/server-wallet-trade.d.mts +0 -34
  339. package/dist/lib/server-wallet-trade.mjs +0 -306
  340. package/dist/meteora-BPX39hZo.mjs +0 -22640
  341. package/dist/orca-Bybp1HXO.mjs +0 -249
  342. package/dist/pancakeswp-CkEXlXti.mjs +0 -604
  343. package/dist/plugin-ZO_MTyd0.mjs +0 -529
  344. package/dist/raydium-rfaM9yEf.mjs +0 -539
  345. package/dist/sdk/index.d.mts +0 -32492
  346. package/dist/sdk/index.mjs +0 -6415
  347. package/dist/types-D5252NZk.mjs +0 -487
  348. package/dist/uniswap-CReXgXVN.mjs +0 -573
  349. package/dist/wallet-action.d.mts +0 -6
  350. package/dist/wallet-action.mjs +0 -820
  351. package/src/analytics/birdeye/tasks/birdeye.ts +0 -232
  352. package/src/analytics/lpinfo/index.d.ts +0 -7
  353. package/src/chains/evm/contracts/artifacts/TimelockController.json +0 -1007
  354. package/src/chains/evm/contracts/artifacts/VoteToken.json +0 -895
  355. package/src/lp/tasks/LpAutoRebalanceTask.ts +0 -117
  356. package/src/lp/tasks/__tests__/LpAutoRebalanceTask.test.ts +0 -370
@@ -1,20 +1,33 @@
1
- // @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
2
1
  import type { IAgentRuntime, Memory, Provider, State } from "@elizaos/core";
2
+ import { sanitizeWalletDisplayLabel } from "../../../security/wallet-context-safety.js";
3
3
  import { BIRDEYE_SERVICE_NAME } from "../constants";
4
- import type { WalletPortfolioResponse } from "../types/api/wallet";
4
+ import type {
5
+ WalletPortfolioResponse,
6
+ WalletTransactionHistoryResponse,
7
+ } from "../types/api/wallet";
8
+ import type {
9
+ BirdeyeSupportedChain,
10
+ GetCacheTimedOptions,
11
+ } from "../types/shared";
5
12
  import { extractChain, formatJsonScalar, formatJsonTable } from "../utils";
6
13
 
14
+ type PortfolioData = WalletPortfolioResponse["data"];
15
+ type WalletTransaction =
16
+ WalletTransactionHistoryResponse["data"][string][number];
17
+ type PortfolioResult = PortfolioData | false;
18
+ type TradesResult = WalletTransaction[] | false | undefined;
19
+
7
20
  type PortfolioService = {
8
- fetchWalletTokenList?: (
9
- chain: unknown,
21
+ fetchWalletTokenList: (
22
+ chain: BirdeyeSupportedChain,
10
23
  walletAddr: string,
11
- opts: { notOlderThan: number },
12
- ) => Promise<unknown>;
24
+ opts: GetCacheTimedOptions,
25
+ ) => Promise<PortfolioResult>;
13
26
  fetchWalletTxList?: (
14
- chain: unknown,
27
+ chain: BirdeyeSupportedChain,
15
28
  walletAddr: string,
16
- opts: { notOlderThan: number },
17
- ) => Promise<unknown[]>;
29
+ opts: GetCacheTimedOptions,
30
+ ) => Promise<WalletTransaction[] | false>;
18
31
  };
19
32
 
20
33
  export interface BirdeyePortfolioProviderOptions {
@@ -32,22 +45,43 @@ function statusJson(name: string, status: string, reason: string): string {
32
45
  ].join("\n");
33
46
  }
34
47
 
35
- function normalizePortfolioResponse(response: unknown) {
36
- if (response?.data?.items) {
37
- return response.data;
48
+ function settingAsString(value: unknown): string | undefined {
49
+ return typeof value === "string" && value.trim().length > 0
50
+ ? value
51
+ : undefined;
52
+ }
53
+
54
+ function isRecord(value: unknown): value is Record<string, unknown> {
55
+ return typeof value === "object" && value !== null;
56
+ }
57
+
58
+ function hasPortfolioItems(value: unknown): value is PortfolioData {
59
+ return isRecord(value) && Array.isArray(value.items);
60
+ }
61
+
62
+ function normalizePortfolioResponse(
63
+ response: PortfolioData | WalletPortfolioResponse | false | undefined,
64
+ ): PortfolioData {
65
+ const wrappedData =
66
+ isRecord(response) && "data" in response ? response.data : undefined;
67
+ if (hasPortfolioItems(wrappedData)) {
68
+ return wrappedData;
38
69
  }
39
- return response ?? {};
70
+ if (hasPortfolioItems(response)) {
71
+ return response;
72
+ }
73
+ return { items: [] };
40
74
  }
41
75
 
42
76
  export const formatPortfolio = (response: WalletPortfolioResponse) => {
43
77
  const portfolio = normalizePortfolioResponse(response);
44
- const items = portfolio.items ?? [];
78
+ const items = portfolio.items;
45
79
  if (!items.length) return "holdings[0]: []";
46
80
 
47
81
  return formatJsonTable(
48
82
  "holdings",
49
83
  items.map((item) => ({
50
- symbol: item.symbol || "unknown",
84
+ symbol: sanitizeWalletDisplayLabel(item.symbol || "unknown"),
51
85
  address: item.address || "unknown",
52
86
  amount:
53
87
  typeof item.uiAmount === "number"
@@ -75,11 +109,12 @@ function formatPortfolioProviderText({
75
109
  }: {
76
110
  wallet: string;
77
111
  chain: string;
78
- portfolio: unknown;
79
- trades?: unknown[];
112
+ portfolio: PortfolioResult;
113
+ trades?: TradesResult;
80
114
  }): string {
81
115
  const normalized = normalizePortfolioResponse(portfolio);
82
- const holdings = normalized.items ?? [];
116
+ const holdings = normalized.items;
117
+ const tradeRows = Array.isArray(trades) ? trades : undefined;
83
118
  const lines = [
84
119
  "birdeye_wallet_portfolio:",
85
120
  " status: ok",
@@ -89,7 +124,7 @@ function formatPortfolioProviderText({
89
124
  formatJsonTable(
90
125
  " holdings",
91
126
  holdings.slice(0, 20).map((item) => ({
92
- symbol: item.symbol || "unknown",
127
+ symbol: sanitizeWalletDisplayLabel(item.symbol || "unknown"),
93
128
  address: item.address || "unknown",
94
129
  amount:
95
130
  typeof item.uiAmount === "number"
@@ -109,12 +144,12 @@ function formatPortfolioProviderText({
109
144
  ),
110
145
  ];
111
146
 
112
- if (trades) {
113
- lines.push(` tradeCount: ${trades.length}`);
147
+ if (tradeRows) {
148
+ lines.push(` tradeCount: ${tradeRows.length}`);
114
149
  lines.push(
115
150
  formatJsonTable(
116
151
  " trades",
117
- trades.slice(0, 10).map((trade) => ({
152
+ tradeRows.slice(0, 10).map((trade) => ({
118
153
  txHash: trade.txHash ?? "unknown",
119
154
  action: trade.mainAction ?? "unknown",
120
155
  status: trade.status ?? "unknown",
@@ -135,7 +170,7 @@ function getPortfolioService(
135
170
  includeTrades: boolean,
136
171
  ): PortfolioService | undefined {
137
172
  const beService = runtime.getService(BIRDEYE_SERVICE_NAME) as
138
- | PortfolioService
173
+ | Partial<PortfolioService>
139
174
  | undefined;
140
175
  if (!beService || typeof beService.fetchWalletTokenList !== "function") {
141
176
  return undefined;
@@ -143,7 +178,10 @@ function getPortfolioService(
143
178
  if (includeTrades && typeof beService.fetchWalletTxList !== "function") {
144
179
  return undefined;
145
180
  }
146
- return beService;
181
+ return {
182
+ fetchWalletTokenList: beService.fetchWalletTokenList,
183
+ fetchWalletTxList: beService.fetchWalletTxList,
184
+ };
147
185
  }
148
186
 
149
187
  export function createBirdeyePortfolioProvider(
@@ -160,13 +198,13 @@ export function createBirdeyePortfolioProvider(
160
198
  cacheStable: false,
161
199
  cacheScope: "turn",
162
200
  roleGate: { minRole: "OWNER" },
163
- get: async (runtime: IAgentRuntime, _message: Memory, _state?: State) => {
201
+ get: async (runtime: IAgentRuntime, _message: Memory, _state: State) => {
164
202
  try {
165
- const walletAddr = runtime.getSetting("BIRDEYE_WALLET_ADDR");
203
+ const walletAddr = settingAsString(
204
+ runtime.getSetting("BIRDEYE_WALLET_ADDR"),
205
+ );
166
206
  if (!walletAddr) {
167
- runtime.logger?.error(
168
- "BIRDEYE_WALLET_ADDR setting is not configured",
169
- );
207
+ runtime.logger.error("BIRDEYE_WALLET_ADDR setting is not configured");
170
208
  return {
171
209
  values: {},
172
210
  text: statusJson(
@@ -178,11 +216,13 @@ export function createBirdeyePortfolioProvider(
178
216
  };
179
217
  }
180
218
 
181
- const explicitChain = runtime.getSetting("BIRDEYE_CHAIN");
219
+ const explicitChain = settingAsString(
220
+ runtime.getSetting("BIRDEYE_CHAIN"),
221
+ );
182
222
  const chain = extractChain(walletAddr, explicitChain);
183
223
  const beService = getPortfolioService(runtime, includeTrades);
184
224
  if (!beService) {
185
- runtime.logger?.error(
225
+ runtime.logger.error(
186
226
  "Birdeye service is unavailable or missing required portfolio methods",
187
227
  );
188
228
  return {
@@ -203,18 +243,19 @@ export function createBirdeyePortfolioProvider(
203
243
  walletAddr,
204
244
  { notOlderThan: 30 * 1000 },
205
245
  );
206
- const tradesPromise = includeTrades
207
- ? beService.fetchWalletTxList(chain, walletAddr, {
208
- notOlderThan: 30 * 1000,
209
- })
210
- : Promise.resolve(undefined);
246
+ const tradesPromise: Promise<TradesResult> =
247
+ includeTrades && beService.fetchWalletTxList
248
+ ? beService.fetchWalletTxList(chain, walletAddr, {
249
+ notOlderThan: 30 * 1000,
250
+ })
251
+ : Promise.resolve(undefined);
211
252
  const [portfolio, trades] = await Promise.all([
212
253
  portfolioPromise,
213
254
  tradesPromise,
214
255
  ]);
215
256
 
216
257
  return {
217
- data: includeTrades ? { portfolio, trades } : portfolio,
258
+ data: includeTrades ? { portfolio, trades } : { portfolio },
218
259
  values: {},
219
260
  text: formatPortfolioProviderText({
220
261
  wallet: walletAddr,
@@ -226,7 +267,7 @@ export function createBirdeyePortfolioProvider(
226
267
  } catch (error) {
227
268
  const errorMessage =
228
269
  error instanceof Error ? error.message : String(error);
229
- runtime.logger?.error(
270
+ runtime.logger.error(
230
271
  `Error fetching Birdeye portfolio: ${errorMessage}`,
231
272
  );
232
273
 
@@ -1,4 +1,3 @@
1
- // @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
2
1
  import type { IAgentRuntime, Memory, Provider, State } from "@elizaos/core";
3
2
  import { formatJsonScalar, formatJsonTable } from "../utils";
4
3
 
@@ -13,6 +12,28 @@ interface TrendingToken {
13
12
  liquidity: number;
14
13
  }
15
14
 
15
+ type SupplyMap = Record<
16
+ string,
17
+ {
18
+ human?: {
19
+ multipliedBy: (n: number) => {
20
+ toFixed: (p: number) => string;
21
+ };
22
+ };
23
+ }
24
+ >;
25
+
26
+ type TrendingRow = {
27
+ chain: string;
28
+ address: string;
29
+ symbol: string;
30
+ priceUsd: string;
31
+ marketCapUsd: string;
32
+ volume24hUsd: string;
33
+ change24hPct: string;
34
+ liquidityUsd: string;
35
+ };
36
+
16
37
  export async function getCacheTimed<T>(
17
38
  runtime: IAgentRuntime,
18
39
  key: string,
@@ -35,12 +56,6 @@ export async function getCacheTimed<T>(
35
56
  /**
36
57
  * Provider for Birdeye trending coins
37
58
  *
38
- * @typedef {import('./Provider').Provider} Provider
39
- * @typedef {import('./Runtime').IAgentRuntime} IAgentRuntime
40
- * @typedef {import('./Memory').Memory} Memory
41
- * @typedef {import('./State').State} State
42
- * @typedef {import('./Action').Action} Action
43
- *
44
59
  * @type {Provider}
45
60
  * @property {string} name - The name of the provider
46
61
  * @property {string} description - Description of the provider
@@ -65,7 +80,7 @@ export const trendingProvider: Provider = {
65
80
  //position: -1,
66
81
  get: async (runtime: IAgentRuntime, _message: Memory, _state: State) => {
67
82
  try {
68
- runtime.logger?.log("birdeye:provider:trending - get birdeye");
83
+ runtime.logger.log("birdeye:provider:trending - get birdeye");
69
84
  // Get all sentiments
70
85
 
71
86
  /*
@@ -81,7 +96,7 @@ export const trendingProvider: Provider = {
81
96
  setAt: number;
82
97
  }>("tokens_v2_solana");
83
98
  if (!solanaCache?.data) {
84
- runtime.logger?.warn(
99
+ runtime.logger.warn(
85
100
  "birdeye:provider:trending - no birdeye token data found",
86
101
  );
87
102
  return {
@@ -97,7 +112,7 @@ export const trendingProvider: Provider = {
97
112
  const solanaTokens = solanaCache.data;
98
113
  //console.log('intel:provider - birdeye data', tokens)
99
114
  if (!solanaTokens.length) {
100
- runtime.logger?.warn(
115
+ runtime.logger.warn(
101
116
  "birdeye:provider:trending - no birdeye token data found",
102
117
  );
103
118
  return {
@@ -129,26 +144,15 @@ export const trendingProvider: Provider = {
129
144
  price24hChangePercent: 1.17760374,
130
145
  */
131
146
 
132
- const rows = [];
147
+ const rows: TrendingRow[] = [];
133
148
 
134
149
  const solanaService = runtime.getService("chain_solana") as
135
150
  | {
136
- getSupply?: (addresses: string[]) => Promise<
137
- Record<
138
- string,
139
- {
140
- human?: {
141
- multipliedBy: (n: number) => {
142
- toFixed: (p: number) => string;
143
- };
144
- };
145
- }
146
- >
147
- >;
151
+ getSupply?: (addresses: string[]) => Promise<SupplyMap>;
148
152
  }
149
153
  | undefined;
150
154
  if (!solanaService) {
151
- runtime.logger?.warn(
155
+ runtime.logger.warn(
152
156
  "no chain_solana service found - market cap calculation will be skipped for Solana tokens",
153
157
  );
154
158
  }
@@ -157,20 +161,13 @@ export const trendingProvider: Provider = {
157
161
  let tokens = [...topSolanaTokens];
158
162
 
159
163
  // Try to get supply data if solanaService is available
160
- let supplies: Record<
161
- string,
162
- {
163
- human?: {
164
- multipliedBy: (n: number) => { toFixed: (p: number) => string };
165
- };
166
- }
167
- > = {};
168
- if (solanaService) {
164
+ let supplies: SupplyMap = {};
165
+ if (solanaService && typeof solanaService.getSupply === "function") {
169
166
  try {
170
167
  const CAs = topSolanaTokens.map((t) => t.address);
171
168
  supplies = await solanaService.getSupply(CAs);
172
169
  } catch (error) {
173
- runtime.logger?.warn(
170
+ runtime.logger.warn(
174
171
  `Failed to get supply data from Solana service: ${error instanceof Error ? error.message : String(error)}`,
175
172
  );
176
173
  }
@@ -187,14 +184,14 @@ export const trendingProvider: Provider = {
187
184
 
188
185
  // Damnatio memoriae
189
186
  if (rugCache && rugCache === "rug") {
190
- runtime.logger?.log("omitting", token.address, "because in rugCache");
187
+ runtime.logger.log("omitting", token.address, "because in rugCache");
191
188
  continue;
192
189
  }
193
190
 
194
191
  // Calculate market cap if supply data is available
195
192
  let mcapValue = "?";
196
- if (supplies[token.address]?.human) {
197
- const supply = supplies[token.address].human;
193
+ const supply = supplies[token.address]?.human;
194
+ if (supply) {
198
195
  const mcap = supply.multipliedBy(token.price);
199
196
  mcapValue = mcap.toFixed(0);
200
197
  //console.log('Hum supply', supply.toFormat(), 'price', token.price, 'mcap', mcap.toFormat(2))
@@ -238,11 +235,11 @@ export const trendingProvider: Provider = {
238
235
  chain: "ethereum",
239
236
  address: token.address,
240
237
  symbol: token.symbol,
241
- priceUsd: token.price?.toFixed(4) || "0",
238
+ priceUsd: token.price.toFixed(4) || "0",
242
239
  marketCapUsd: "unknown",
243
- volume24hUsd: token.volume24hUSD?.toFixed(0) || "0",
244
- change24hPct: token.price24hChangePercent?.toFixed(2) || "0",
245
- liquidityUsd: token.liquidity?.toFixed(2) || "0",
240
+ volume24hUsd: token.volume24hUSD.toFixed(0) || "0",
241
+ change24hPct: token.price24hChangePercent.toFixed(2) || "0",
242
+ liquidityUsd: token.liquidity.toFixed(2) || "0",
246
243
  });
247
244
  }
248
245
  }
@@ -271,11 +268,11 @@ export const trendingProvider: Provider = {
271
268
  chain: "base",
272
269
  address: token.address,
273
270
  symbol: token.symbol,
274
- priceUsd: token.price?.toFixed(4) || "0",
271
+ priceUsd: token.price.toFixed(4) || "0",
275
272
  marketCapUsd: "unknown",
276
- volume24hUsd: token.volume24hUSD?.toFixed(0) || "0",
277
- change24hPct: token.price24hChangePercent?.toFixed(2) || "0",
278
- liquidityUsd: token.liquidity?.toFixed(2) || "0",
273
+ volume24hUsd: token.volume24hUSD.toFixed(0) || "0",
274
+ change24hPct: token.price24hChangePercent.toFixed(2) || "0",
275
+ liquidityUsd: token.liquidity.toFixed(2) || "0",
279
276
  });
280
277
  }
281
278
  }
@@ -348,7 +345,7 @@ export const trendingProvider: Provider = {
348
345
  text,
349
346
  };
350
347
  } catch (error) {
351
- runtime.logger?.error(
348
+ runtime.logger.error(
352
349
  `Error fetching trending data: ${error instanceof Error ? error.message : String(error)}`,
353
350
  );
354
351
  return {
@@ -1,4 +1,3 @@
1
- // @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
2
1
  import { createBirdeyePortfolioProvider } from "./portfolio-factory";
3
2
 
4
3
  /**
@@ -42,7 +42,7 @@ function createRuntime() {
42
42
  }
43
43
 
44
44
  describe("Birdeye search categories", () => {
45
- it("registers one unified token intel search category", () => {
45
+ it("registers one token intel search category", () => {
46
46
  const { categories, registerSearchCategory, runtime } = createRuntime();
47
47
 
48
48
  registerBirdeyeSearchCategories(runtime);
@@ -1,7 +1,7 @@
1
- // @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
2
1
  import type { IAgentRuntime, SearchCategoryRegistration } from "@elizaos/core";
3
2
  import { BirdeyeProvider } from "./birdeye";
4
3
  import { BIRDEYE_SERVICE_NAME } from "./constants";
4
+ import type { TokenMarketSearchParams, TokenResult } from "./types/api/search";
5
5
  import type {
6
6
  TokenMarketDataResponse,
7
7
  TokenOverviewResponse,
@@ -186,7 +186,7 @@ type BirdeyeTokenAddressSearchResult = {
186
186
 
187
187
  type BirdeyeTokenSymbolSearchResult = {
188
188
  symbol: string;
189
- tokens: unknown[];
189
+ tokens: TokenResult[];
190
190
  };
191
191
 
192
192
  type BirdeyeTokenSearchProvider = Pick<
@@ -215,7 +215,7 @@ export function registerBirdeyeSearchCategories(
215
215
  options: BirdeyeSearchCategoryOptions = {},
216
216
  ): void {
217
217
  if (typeof runtime.registerSearchCategory !== "function") {
218
- runtime.logger?.warn?.(
218
+ runtime.logger.warn(
219
219
  "Birdeye search category registry is unavailable; token search metadata was not registered",
220
220
  );
221
221
  return;
@@ -247,6 +247,71 @@ function normalizeLimit(value: unknown): number {
247
247
  return Math.max(1, Math.min(25, limit));
248
248
  }
249
249
 
250
+ function asTokenSearchChain(value: unknown): TokenMarketSearchParams["chain"] {
251
+ switch (value) {
252
+ case "all":
253
+ case "solana":
254
+ case "ethereum":
255
+ case "arbitrum":
256
+ case "avalanche":
257
+ case "bsc":
258
+ case "optimism":
259
+ case "polygon":
260
+ case "base":
261
+ case "zksync":
262
+ case "sui":
263
+ case "evm":
264
+ return value;
265
+ default:
266
+ return "all";
267
+ }
268
+ }
269
+
270
+ function asTokenSearchTarget(
271
+ value: unknown,
272
+ ): TokenMarketSearchParams["target"] {
273
+ return value === "market" || value === "all" ? value : "token";
274
+ }
275
+
276
+ function asTokenSearchSortBy(
277
+ value: unknown,
278
+ ): TokenMarketSearchParams["sort_by"] {
279
+ switch (value) {
280
+ case "fdv":
281
+ case "marketcap":
282
+ case "liquidity":
283
+ case "price":
284
+ case "price_change_24h_percent":
285
+ case "trade_24h":
286
+ case "trade_24h_change_percent":
287
+ case "buy_24h":
288
+ case "buy_24h_change_percent":
289
+ case "sell_24h":
290
+ case "sell_24h_change_percent":
291
+ case "unique_wallet_24h":
292
+ case "unique_view_24h_change_percent":
293
+ case "last_trade_unix_time":
294
+ case "volume_24h_usd":
295
+ case "volume_24h_change_percent":
296
+ return value;
297
+ default:
298
+ return "volume_24h_usd";
299
+ }
300
+ }
301
+
302
+ function asSortType(value: unknown): TokenMarketSearchParams["sort_type"] {
303
+ return value === "asc" ? "asc" : "desc";
304
+ }
305
+
306
+ function isTokenResult(token: unknown): token is TokenResult {
307
+ return (
308
+ typeof token === "object" &&
309
+ token !== null &&
310
+ "symbol" in token &&
311
+ "address" in token
312
+ );
313
+ }
314
+
250
315
  function filterBool(
251
316
  filters: Record<string, unknown>,
252
317
  key: string,
@@ -296,12 +361,10 @@ async function searchTokensBySymbol(
296
361
  limit: number,
297
362
  ): Promise<BirdeyeTokenSymbolSearchResult[]> {
298
363
  const symbols = normalizeSymbolQuery(query);
299
- const chain = typeof filters.chain === "string" ? filters.chain : "all";
300
- const target = typeof filters.target === "string" ? filters.target : "token";
301
- const sortBy =
302
- typeof filters.sort_by === "string" ? filters.sort_by : "volume_24h_usd";
303
- const sortType =
304
- typeof filters.sort_type === "string" ? filters.sort_type : "desc";
364
+ const chain = asTokenSearchChain(filters.chain);
365
+ const target = asTokenSearchTarget(filters.target);
366
+ const sortBy = asTokenSearchSortBy(filters.sort_by);
367
+ const sortType = asSortType(filters.sort_type);
305
368
 
306
369
  const results = await Promise.all(
307
370
  symbols.map(async (symbol) => {
@@ -319,11 +382,13 @@ async function searchTokensBySymbol(
319
382
  markets:
320
383
  typeof filters.markets === "string" ? filters.markets : undefined,
321
384
  });
322
- const tokens = (response?.data?.items ?? [])
385
+ const tokens = response.data.items
323
386
  .filter((item) => item.type === "token" && item.result)
324
387
  .flatMap((item) => item.result)
325
388
  .filter(
326
- (token) => token?.symbol?.toLowerCase?.() === symbol.toLowerCase(),
389
+ (token): token is TokenResult =>
390
+ isTokenResult(token) &&
391
+ token.symbol?.toLowerCase?.() === symbol.toLowerCase(),
327
392
  )
328
393
  .slice(0, limit);
329
394
  return { symbol, tokens };
@@ -464,7 +529,7 @@ export async function searchBirdeyeTokens(
464
529
  request: BirdeyeTokenSearchRequest,
465
530
  provider: BirdeyeTokenSearchProvider = new BirdeyeProvider(runtime),
466
531
  ) {
467
- const query = String(request.query ?? "").trim();
532
+ const query = String(request.query).trim();
468
533
  const filters = request.filters ?? {};
469
534
  const requestedMode = normalizeMode(request.mode ?? filters.mode);
470
535
  const mode = inferMode(query, requestedMode);