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

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,5 +1,3 @@
1
- // @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
2
-
3
1
  import {
4
2
  type RouteSpec,
5
3
  resolveCloudRoute,
@@ -13,6 +11,25 @@ import {
13
11
  import Birdeye from "./birdeye-task";
14
12
  import { BIRDEYE_ENDPOINTS, BIRDEYE_SERVICE_NAME } from "./constants";
15
13
  import { searchBirdeyeTokens } from "./search-category";
14
+ import type { DefiMultiPriceResponse } from "./types/api/defi";
15
+ import type {
16
+ TokenMarketSearchParams,
17
+ TokenMarketSearchResponse,
18
+ } from "./types/api/search";
19
+ import type {
20
+ TokenMarketDataParams,
21
+ TokenMarketDataResponse,
22
+ TokenOverviewParams,
23
+ TokenOverviewResponse,
24
+ TokenSecurityParams,
25
+ TokenSecurityResponse,
26
+ TokenTradeDataSingleParams,
27
+ TokenTradeDataSingleResponse,
28
+ } from "./types/api/token";
29
+ import type {
30
+ WalletPortfolioResponse,
31
+ WalletTransactionHistoryResponse,
32
+ } from "./types/api/wallet";
16
33
  import type {
17
34
  BirdeyeSupportedChain,
18
35
  GetCacheTimedOptions,
@@ -34,6 +51,8 @@ const CACHE_DEFAULTS = {
34
51
  TOKEN_TRADE_DATA_TTL: 30 * 60 * 1000,
35
52
  // Token security data cache (30 minutes)
36
53
  TOKEN_SECURITY_DATA_TTL: 30 * 60 * 1000,
54
+ // Token price/liquidity cache (30 seconds)
55
+ TOKEN_MARKET_DATA_TTL: 30 * 1000,
37
56
  };
38
57
 
39
58
  // 'solana' | 'base' | 'ethereum'
@@ -43,6 +62,44 @@ type CacheWrapper<T> = {
43
62
  data: T;
44
63
  setAt: number;
45
64
  };
65
+
66
+ type BirdeyeHeaders = { headers?: Record<string, string> };
67
+
68
+ type BirdeyeMultiPriceItem = NonNullable<
69
+ DefiMultiPriceResponse["data"][string]
70
+ > & {
71
+ priceInNative?: number;
72
+ liquidity?: number;
73
+ market_cap?: number;
74
+ marketcap?: number;
75
+ mc?: number;
76
+ realMc?: number;
77
+ };
78
+
79
+ type BirdeyeMultiPriceResponse = Omit<DefiMultiPriceResponse, "data"> & {
80
+ data: Record<string, BirdeyeMultiPriceItem | undefined>;
81
+ };
82
+
83
+ export interface BirdeyeTokenMarketSnapshot {
84
+ symbol?: string;
85
+ priceUsd: number;
86
+ priceSol?: number;
87
+ liquidity: number;
88
+ priceChange24h: number;
89
+ marketCapUsd?: number;
90
+ }
91
+
92
+ type WalletTransaction =
93
+ WalletTransactionHistoryResponse["data"][string][number];
94
+
95
+ function firstFiniteNumber(...values: unknown[]): number | undefined {
96
+ for (const value of values) {
97
+ if (typeof value === "number" && Number.isFinite(value)) {
98
+ return value;
99
+ }
100
+ }
101
+ }
102
+
46
103
  export class BirdeyeService extends Service {
47
104
  static serviceType: string = BIRDEYE_SERVICE_NAME;
48
105
  capabilityDescription = "BirdEye data access";
@@ -84,11 +141,11 @@ export class BirdeyeService extends Service {
84
141
  };
85
142
  }
86
143
 
87
- private async fetchBirdeyeJson(
144
+ private async fetchBirdeyeJson<T>(
88
145
  path: string,
89
- params: Record<string, unknown> = {},
146
+ params: object = {},
90
147
  options: { headers?: Record<string, string> } = {},
91
- ) {
148
+ ): Promise<T> {
92
149
  const chain = options.headers?.["x-chain"] ?? "solana";
93
150
  const cleanParams = Object.fromEntries(
94
151
  Object.entries(params).filter(([, value]) => value !== undefined),
@@ -111,12 +168,14 @@ export class BirdeyeService extends Service {
111
168
  `Birdeye API error ${response.status}: ${errorText || response.statusText}`,
112
169
  );
113
170
  }
114
- return response.json();
171
+ return response.json() as Promise<T>;
115
172
  }
116
173
 
117
- async fetchSearchTokenMarketData(params: Record<string, unknown>) {
174
+ async fetchSearchTokenMarketData(
175
+ params: TokenMarketSearchParams,
176
+ ): Promise<TokenMarketSearchResponse> {
118
177
  const chain = typeof params.chain === "string" ? params.chain : "solana";
119
- return this.fetchBirdeyeJson(
178
+ return this.fetchBirdeyeJson<TokenMarketSearchResponse>(
120
179
  BIRDEYE_ENDPOINTS.search.token_market,
121
180
  params,
122
181
  {
@@ -126,10 +185,10 @@ export class BirdeyeService extends Service {
126
185
  }
127
186
 
128
187
  async fetchTokenOverview(
129
- params: Record<string, unknown>,
130
- options: { headers?: Record<string, string> } = {},
131
- ) {
132
- return this.fetchBirdeyeJson(
188
+ params: TokenOverviewParams,
189
+ options: BirdeyeHeaders = {},
190
+ ): Promise<TokenOverviewResponse> {
191
+ return this.fetchBirdeyeJson<TokenOverviewResponse>(
133
192
  BIRDEYE_ENDPOINTS.token.overview,
134
193
  params,
135
194
  options,
@@ -137,10 +196,10 @@ export class BirdeyeService extends Service {
137
196
  }
138
197
 
139
198
  async fetchTokenMarketData(
140
- params: Record<string, unknown>,
141
- options: { headers?: Record<string, string> } = {},
142
- ) {
143
- return this.fetchBirdeyeJson(
199
+ params: TokenMarketDataParams,
200
+ options: BirdeyeHeaders = {},
201
+ ): Promise<TokenMarketDataResponse> {
202
+ return this.fetchBirdeyeJson<TokenMarketDataResponse>(
144
203
  BIRDEYE_ENDPOINTS.token.market_data,
145
204
  params,
146
205
  options,
@@ -148,10 +207,10 @@ export class BirdeyeService extends Service {
148
207
  }
149
208
 
150
209
  async fetchTokenSecurityByAddress(
151
- params: Record<string, unknown>,
152
- options: { headers?: Record<string, string> } = {},
153
- ) {
154
- return this.fetchBirdeyeJson(
210
+ params: TokenSecurityParams,
211
+ options: BirdeyeHeaders = {},
212
+ ): Promise<TokenSecurityResponse> {
213
+ return this.fetchBirdeyeJson<TokenSecurityResponse>(
155
214
  BIRDEYE_ENDPOINTS.token.security,
156
215
  params,
157
216
  options,
@@ -159,10 +218,10 @@ export class BirdeyeService extends Service {
159
218
  }
160
219
 
161
220
  async fetchTokenTradeDataSingle(
162
- params: Record<string, unknown>,
163
- options: { headers?: Record<string, string> } = {},
164
- ) {
165
- return this.fetchBirdeyeJson(
221
+ params: TokenTradeDataSingleParams,
222
+ options: BirdeyeHeaders = {},
223
+ ): Promise<TokenTradeDataSingleResponse> {
224
+ return this.fetchBirdeyeJson<TokenTradeDataSingleResponse>(
166
225
  BIRDEYE_ENDPOINTS.token.trade_data_single,
167
226
  params,
168
227
  options,
@@ -197,15 +256,15 @@ export class BirdeyeService extends Service {
197
256
  try {
198
257
  validatedChain = extractChain(undefined, chain);
199
258
  } catch (error) {
200
- this.runtime.logger?.warn(
259
+ this.runtime.logger.warn(
201
260
  `getTrendingTokensForChain: ${error instanceof Error ? error.message : String(error)}`,
202
261
  );
203
262
  return { data: [], setAt: Date.now() };
204
263
  }
205
264
 
206
- // Don't allow 'evm' as a trending chain (it's just a placeholder)
265
+ // Don't allow 'evm' as a trending chain; callers must choose a concrete chain.
207
266
  if (validatedChain === "evm") {
208
- this.runtime.logger?.warn(
267
+ this.runtime.logger.warn(
209
268
  `getTrendingTokensForChain: 'evm' is not a specific chain. Use ethereum, arbitrum, polygon, etc.`,
210
269
  );
211
270
  return { data: [], setAt: Date.now() };
@@ -291,7 +350,7 @@ export class BirdeyeService extends Service {
291
350
 
292
351
  const byKey = new Map<string, IToken>();
293
352
  for (const t of fetched) {
294
- const key = t.address?.toLowerCase?.() || `${t.chain}:${t.rank}`;
353
+ const key = t.address.toLowerCase() || `${t.chain}:${t.rank}`;
295
354
  if (!byKey.has(key)) {
296
355
  byKey.set(key, t);
297
356
  }
@@ -303,7 +362,7 @@ export class BirdeyeService extends Service {
303
362
  try {
304
363
  await this.runtime.setCache<CacheWrapper<IToken[]>>(cacheKey, output);
305
364
  } catch (e) {
306
- this.runtime.logger?.warn(
365
+ this.runtime.logger.warn(
307
366
  `setCache failed for ${chain}: ${e instanceof Error ? e.message : String(e)}`,
308
367
  );
309
368
  }
@@ -330,15 +389,17 @@ export class BirdeyeService extends Service {
330
389
 
331
390
  return out;
332
391
  } catch (error) {
333
- this.runtime.logger?.error(
392
+ this.runtime.logger.error(
334
393
  `Failed to sync trending tokens: ${error instanceof Error ? error.message : String(error)}`,
335
394
  );
336
395
  throw error;
337
396
  }
338
397
  }
339
398
 
340
- // FIXME: add chain param
341
- async getTokenMarketData(tokenAddress: string): Promise<
399
+ async getTokenMarketData(
400
+ tokenAddress: string,
401
+ chain = "solana",
402
+ ): Promise<
342
403
  | {
343
404
  price: number;
344
405
  marketCap: number;
@@ -356,15 +417,15 @@ export class BirdeyeService extends Service {
356
417
  const [response, volResponse, priceHistoryResponse] = await Promise.all([
357
418
  fetch(
358
419
  `${this.birdeyeUrl("defi/v3/token/market-data")}?address=${tokenAddress}`,
359
- this.getBirdeyeFetchOptions(),
420
+ this.getBirdeyeFetchOptions(chain),
360
421
  ),
361
422
  fetch(
362
423
  `${this.birdeyeUrl("defi/price_volume/single")}?address=${tokenAddress}&type=24h`,
363
- this.getBirdeyeFetchOptions(),
424
+ this.getBirdeyeFetchOptions(chain),
364
425
  ),
365
426
  fetch(
366
427
  `${this.birdeyeUrl("defi/history_price")}?address=${tokenAddress}&address_type=token&type=15m`,
367
- this.getBirdeyeFetchOptions(),
428
+ this.getBirdeyeFetchOptions(chain),
368
429
  ),
369
430
  ]);
370
431
 
@@ -415,8 +476,8 @@ export class BirdeyeService extends Service {
415
476
  // has a lot of data
416
477
 
417
478
  /*
418
- async getTokensTradeData(chain: string, tokenAddresses: string[]): Promise<any> {
419
- const tokenDb: Record<string, any> = {};
479
+ async getTokensTradeData(chain: string, tokenAddresses: string[]): Promise<unknown> {
480
+ const tokenDb: Record<string, unknown> = {};
420
481
  const chunkArray = (arr: string[], size: number) =>
421
482
  arr.map((_, i) => (i % size === 0 ? arr.slice(i, i + size) : null)).filter(Boolean);
422
483
  const twenties = chunkArray(tokenAddresses, 20);
@@ -437,14 +498,16 @@ export class BirdeyeService extends Service {
437
498
  tokenAddress: string,
438
499
  frames = "2h,8h,24h",
439
500
  options: GetCacheTimedOptions = {},
440
- ): Promise<unknown> {
501
+ ): Promise<TokenTradeDataSingleResponse | false> {
441
502
  const key = `birdeye_tokenTradeData_${chain}_${tokenAddress}_${frames}`;
442
503
  const tsInMs = options.tsInMs ?? CACHE_DEFAULTS.TOKEN_TRADE_DATA_TTL;
443
504
  const notOlderThan =
444
505
  options.notOlderThan ?? CACHE_DEFAULTS.TOKEN_TRADE_DATA_TTL;
445
506
 
446
507
  // Check cache
447
- const cached = await this.getCacheTimed<unknown>(key, { notOlderThan });
508
+ const cached = await this.getCacheTimed<TokenTradeDataSingleResponse>(key, {
509
+ notOlderThan,
510
+ });
448
511
  if (cached) {
449
512
  return cached;
450
513
  }
@@ -455,13 +518,13 @@ export class BirdeyeService extends Service {
455
518
  `${this.birdeyeUrl("defi/v3/token/trade-data/single")}?address=${tokenAddress}&frames=${frames}`,
456
519
  this.getBirdeyeFetchOptions(chain),
457
520
  );
458
- const data = await resp.json();
521
+ const data = (await resp.json()) as TokenTradeDataSingleResponse;
459
522
  if (data) {
460
523
  this.setCacheTimed(key, data, tsInMs);
461
524
  }
462
525
  return data;
463
526
  } catch (e) {
464
- this.runtime.logger?.error(
527
+ this.runtime.logger.error(
465
528
  `birdeye:getTokenTradeData - ${e instanceof Error ? e.message : String(e)}`,
466
529
  );
467
530
  return false;
@@ -472,8 +535,8 @@ export class BirdeyeService extends Service {
472
535
  // https://public-api.birdeye.so/defi/price_volume/multi
473
536
  // getting 500s
474
537
  /*
475
- async getTokensPriceVolume(tokenAddresses: string[], type = '24h'): Promise<any> {
476
- const tokenDb: Record<string, any> = {};
538
+ async getTokensPriceVolume(tokenAddresses: string[], type = '24h'): Promise<unknown> {
539
+ const tokenDb: Record<string, unknown> = {};
477
540
  const chunkArray = (arr: string[], size: number) =>
478
541
  arr.map((_, i) => (i % size === 0 ? arr.slice(i, i + size) : null)).filter(Boolean);
479
542
  const fities = chunkArray(tokenAddresses, 50);
@@ -509,31 +572,60 @@ export class BirdeyeService extends Service {
509
572
  // [Defi] Price - Multiple max 100 (all)
510
573
  // https://public-api.birdeye.so/defi/multi_price
511
574
  // Batch CU Cost = N^0.8 × 5 (base cost of a single call) (n_max: 100)
512
- // FIXME: caching
513
575
  async getTokensMarketData(
514
576
  chain: string,
515
577
  tokenAddresses: string[],
516
- ): Promise<Record<string, IToken | undefined>> {
517
- const tokenDb: Record<string, IToken | undefined> = {};
578
+ options: GetCacheTimedOptions = {},
579
+ ): Promise<Record<string, BirdeyeTokenMarketSnapshot | undefined>> {
580
+ const tokenDb: Record<string, BirdeyeTokenMarketSnapshot | undefined> = {};
581
+ const notOlderThan =
582
+ options.notOlderThan ?? CACHE_DEFAULTS.TOKEN_MARKET_DATA_TTL;
583
+ const tsInMs = options.tsInMs ?? Date.now();
584
+ const cacheKeyFor = (address: string) =>
585
+ `birdeye_tokens_${chain}_${address}`;
518
586
 
519
587
  // Initialize all token addresses as undefined so we know they were checked
520
588
  for (const ca of tokenAddresses) {
521
589
  tokenDb[ca] = undefined;
522
590
  }
523
591
 
524
- //console.log('beSrv:getTokensMarketData chain', chain, 'tokenAddresses', tokenAddresses)
592
+ try {
593
+ const cacheEntries = await Promise.all(
594
+ tokenAddresses.map(async (address) => {
595
+ const wrapper = await this.runtime.getCache<
596
+ CacheWrapper<BirdeyeTokenMarketSnapshot | undefined>
597
+ >(cacheKeyFor(address));
598
+ if (!wrapper) {
599
+ return { address, cached: false, data: undefined };
600
+ }
601
+ const isFresh = Date.now() - wrapper.setAt <= notOlderThan;
602
+ return {
603
+ address,
604
+ cached: isFresh,
605
+ data: isFresh ? wrapper.data : undefined,
606
+ };
607
+ }),
608
+ );
609
+
610
+ const uncachedAddresses: string[] = [];
611
+ for (const entry of cacheEntries) {
612
+ if (entry.cached) {
613
+ tokenDb[entry.address] = entry.data;
614
+ } else {
615
+ uncachedAddresses.push(entry.address);
616
+ }
617
+ }
525
618
 
526
- // no real cache because pricing
527
- // 1-60s cache might have some benefits tho
528
- // usually called only once every sell signal (1m atm)
619
+ if (!uncachedAddresses.length) {
620
+ return tokenDb;
621
+ }
529
622
 
530
- try {
531
- const chunkArray = (arr: string[], size: number) =>
623
+ const chunkArray = (arr: string[], size: number): string[][] =>
532
624
  arr
533
625
  .map((_, i) => (i % size === 0 ? arr.slice(i, i + size) : null))
534
- .filter(Boolean);
626
+ .filter((chunk): chunk is string[] => chunk !== null);
535
627
 
536
- const hundos = chunkArray(tokenAddresses, 100);
628
+ const hundos = chunkArray(uncachedAddresses, 100);
537
629
  //console.log('getTokensMarketData hundos', hundos)
538
630
 
539
631
  // Track batches with their addresses for cache management
@@ -560,7 +652,9 @@ export class BirdeyeService extends Service {
560
652
  batchesWithAddresses.map((b) => b.promise),
561
653
  );
562
654
  const multipriceData = await Promise.all(
563
- multipriceResps.map((resp) => resp.json()),
655
+ multipriceResps.map(
656
+ (resp) => resp.json() as Promise<BirdeyeMultiPriceResponse>,
657
+ ),
564
658
  );
565
659
 
566
660
  //const now = Date.now()
@@ -571,16 +665,16 @@ export class BirdeyeService extends Service {
571
665
 
572
666
  // Guard against undefined/null mpd or missing data
573
667
  if (!mpd?.data || !mpd.success) {
574
- this.runtime.logger?.warn(
668
+ this.runtime.logger.warn(
575
669
  `birdeye:getTokensMarketData - batch failed (${batchAddresses.length} addresses), caching all as failed`,
576
670
  );
577
671
 
578
- // Cache all addresses in this failed batch
579
672
  for (const ca of batchAddresses) {
580
- await this.runtime.setCache(`birdeye_tokens_solana_${ca}`, {
673
+ await this.runtime.setCache<
674
+ CacheWrapper<BirdeyeTokenMarketSnapshot | undefined>
675
+ >(cacheKeyFor(ca), {
581
676
  data: undefined,
582
- setAt: Date.now(),
583
- ttl: 5 * 60 * 1000, // 5 minutes for failed batch lookups
677
+ setAt: tsInMs,
584
678
  });
585
679
  }
586
680
  continue;
@@ -590,7 +684,7 @@ export class BirdeyeService extends Service {
590
684
  for (const ca of batchAddresses) {
591
685
  const t = mpd.data[ca];
592
686
 
593
- if (t) {
687
+ if (t && typeof t.value === "number") {
594
688
  /*
595
689
  t {
596
690
  isScaledUiToken: false,
@@ -602,36 +696,43 @@ export class BirdeyeService extends Service {
602
696
  liquidity: 1323844.6216610295,
603
697
  }
604
698
  */
605
- tokenDb[ca] = {
699
+ const marketSnapshot: BirdeyeTokenMarketSnapshot = {
606
700
  //provider: 'birdeye',
607
701
  //chain: 'solana',
608
702
  //address: ca,
609
703
  priceUsd: t.value,
610
704
  priceSol: t.priceInNative,
611
- liquidity: t.liquidity,
612
- priceChange24h: t.priceChange24h,
613
- //marketcap
705
+ liquidity: t.liquidity ?? 0,
706
+ priceChange24h: t.priceChange24h ?? 0,
707
+ marketCapUsd: firstFiniteNumber(
708
+ t.market_cap,
709
+ t.marketcap,
710
+ t.mc,
711
+ t.realMc,
712
+ ),
614
713
  //volume24hUSD
615
714
  };
616
- const test: IToken = tokenDb[ca];
617
- this.runtime.logger?.debug(
715
+ tokenDb[ca] = marketSnapshot;
716
+ this.runtime.logger.debug(
618
717
  `birdeye:getTokensMarketData - caching token ${ca}`,
619
718
  );
620
719
  // Cache successful lookups with full TTL
621
- await this.runtime.setCache<IToken>(
622
- `birdeye_tokens_solana_${ca}`,
623
- test,
624
- );
720
+ await this.runtime.setCache<
721
+ CacheWrapper<BirdeyeTokenMarketSnapshot>
722
+ >(cacheKeyFor(ca), {
723
+ data: marketSnapshot,
724
+ setAt: tsInMs,
725
+ });
625
726
  } else {
626
727
  // Token was in batch but has no valid data (or not in response)
627
- this.runtime.logger?.warn(
728
+ this.runtime.logger.warn(
628
729
  `${ca} no valid data in response: ${JSON.stringify(t)}`,
629
730
  );
630
- // Cache failed lookups with shorter TTL to avoid re-fetching bad addresses
631
- await this.runtime.setCache(`birdeye_tokens_solana_${ca}`, {
731
+ await this.runtime.setCache<
732
+ CacheWrapper<BirdeyeTokenMarketSnapshot | undefined>
733
+ >(cacheKeyFor(ca), {
632
734
  data: undefined,
633
- setAt: Date.now(),
634
- ttl: 5 * 60 * 1000, // 5 minutes for failed lookups
735
+ setAt: tsInMs,
635
736
  });
636
737
  }
637
738
  }
@@ -653,14 +754,16 @@ export class BirdeyeService extends Service {
653
754
  chain: string,
654
755
  tokenAddress: string,
655
756
  options: GetCacheTimedOptions = {},
656
- ): Promise<unknown> {
757
+ ): Promise<TokenSecurityResponse | false> {
657
758
  const key = `birdeye_tokenSecurityData_${chain}_${tokenAddress}`;
658
759
  const tsInMs = options.tsInMs ?? CACHE_DEFAULTS.TOKEN_SECURITY_DATA_TTL;
659
760
  const notOlderThan =
660
761
  options.notOlderThan ?? CACHE_DEFAULTS.TOKEN_SECURITY_DATA_TTL;
661
762
 
662
763
  // Check cache
663
- const cached = await this.getCacheTimed<unknown>(key, { notOlderThan });
764
+ const cached = await this.getCacheTimed<TokenSecurityResponse>(key, {
765
+ notOlderThan,
766
+ });
664
767
  if (cached) {
665
768
  return cached;
666
769
  }
@@ -671,13 +774,13 @@ export class BirdeyeService extends Service {
671
774
  `${this.birdeyeUrl("defi/token_security")}?address=${tokenAddress}`,
672
775
  this.getBirdeyeFetchOptions(chain),
673
776
  );
674
- const data = await resp.json();
777
+ const data = (await resp.json()) as TokenSecurityResponse;
675
778
  if (data) {
676
779
  this.setCacheTimed(key, data, tsInMs);
677
780
  }
678
781
  return data;
679
782
  } catch (e) {
680
- this.runtime.logger?.error(
783
+ this.runtime.logger.error(
681
784
  `birdeye:getTokenSecurityData - ${e instanceof Error ? e.message : String(e)}`,
682
785
  );
683
786
  return false;
@@ -696,14 +799,16 @@ export class BirdeyeService extends Service {
696
799
  chain: string,
697
800
  ca: string,
698
801
  options: GetCacheTimedOptions = {},
699
- ) {
802
+ ): Promise<BirdeyeTokenMarketSnapshot | undefined> {
700
803
  try {
701
804
  const key = `birdeye_token_${chain}_${ca}`;
702
805
  const tsInMs = options.tsInMs ?? Date.now(); // only syscall if absolutely needed
703
806
  const notOlderThan = options.notOlderThan ?? 30 * 1000; // a reasonable length (in ms)
704
807
 
705
808
  // check cache
706
- const cache = await this.getCacheTimed<unknown>(key, { notOlderThan });
809
+ const cache = await this.getCacheTimed<BirdeyeTokenMarketSnapshot>(key, {
810
+ notOlderThan,
811
+ });
707
812
  if (cache) {
708
813
  this.runtime.logger.debug("birdeye:lookupToken - HIT");
709
814
  return cache;
@@ -718,7 +823,7 @@ export class BirdeyeService extends Service {
718
823
 
719
824
  return data;
720
825
  } catch (e) {
721
- this.runtime.logger?.error(
826
+ this.runtime.logger.error(
722
827
  `birdeyeSvr:lookupToken - err: ${e instanceof Error ? e.message : String(e)}`,
723
828
  );
724
829
  throw e;
@@ -728,7 +833,7 @@ export class BirdeyeService extends Service {
728
833
  async lookupTokens(
729
834
  chainAndAddresses: Array<{ chain: string; address: string }>,
730
835
  options: GetCacheTimedOptions = {},
731
- ) {
836
+ ): Promise<Record<string, BirdeyeTokenMarketSnapshot | undefined>> {
732
837
  try {
733
838
  // Lookup all tokens in parallel
734
839
  const results = await Promise.all(
@@ -738,7 +843,10 @@ export class BirdeyeService extends Service {
738
843
  );
739
844
 
740
845
  // Transform results into keyed object: key = `${chain}_${address}`
741
- const keyedResults: Record<string, unknown> = {};
846
+ const keyedResults: Record<
847
+ string,
848
+ BirdeyeTokenMarketSnapshot | undefined
849
+ > = {};
742
850
  chainAndAddresses.forEach((cAA, index) => {
743
851
  const key = `${cAA.chain}_${cAA.address}`;
744
852
  keyedResults[key] = results[index];
@@ -746,7 +854,7 @@ export class BirdeyeService extends Service {
746
854
 
747
855
  return keyedResults;
748
856
  } catch (e) {
749
- this.runtime.logger?.error(
857
+ this.runtime.logger.error(
750
858
  `birdeyeSvr:lookupTokens - err: ${e instanceof Error ? e.message : String(e)}`,
751
859
  );
752
860
  throw e;
@@ -757,28 +865,30 @@ export class BirdeyeService extends Service {
757
865
  chain: string,
758
866
  _params: unknown,
759
867
  _options: GetCacheTimedOptions = {},
760
- ) {
868
+ ): Promise<TokenMarketSearchResponse> {
761
869
  const birdeyeFetchOptions: RequestInit = this.getBirdeyeFetchOptions(chain);
762
870
  const res = await fetch(
763
871
  `${this.birdeyeUrl("defi/v3/search")}`,
764
872
  birdeyeFetchOptions,
765
873
  );
766
- const resp = await res.json();
767
- this.runtime.logger.log("resp", resp);
874
+ const resp = (await res.json()) as TokenMarketSearchResponse;
875
+ this.runtime.logger.log("resp", JSON.stringify(resp));
768
876
  return resp;
769
877
  }
770
878
 
771
879
  async lookupSymbolAllChains(
772
880
  symbol: string,
773
881
  options: GetCacheTimedOptions = {},
774
- ) {
882
+ ): Promise<TokenMarketSearchResponse["data"]["items"] | false> {
775
883
  // set up cache
776
884
  const key = `birdeye_symbol_${symbol}`;
777
885
  const tsInMs = options.tsInMs ?? Date.now();
778
886
  const notOlderThan = options.notOlderThan ?? 30 * 1000;
779
887
 
780
888
  // check cache
781
- const cache = await this.getCacheTimed<unknown>(key, { notOlderThan });
889
+ const cache = await this.getCacheTimed<
890
+ TokenMarketSearchResponse["data"]["items"]
891
+ >(key, { notOlderThan });
782
892
  if (cache) {
783
893
  return cache;
784
894
  }
@@ -789,7 +899,7 @@ export class BirdeyeService extends Service {
789
899
  `${this.birdeyeUrl("defi/v3/search")}?chain=all&target=token&keyword=${encodeURIComponent(symbol)}`,
790
900
  birdeyeFetchOptions,
791
901
  );
792
- const resp = await res.json();
902
+ const resp = (await res.json()) as TokenMarketSearchResponse;
793
903
  const data = resp.data.items;
794
904
  if (data) {
795
905
  this.setCacheTimed(key, data, tsInMs);
@@ -801,7 +911,7 @@ export class BirdeyeService extends Service {
801
911
  chain: BirdeyeSupportedChain,
802
912
  publicKey: string,
803
913
  options: GetCacheTimedOptions = {},
804
- ) {
914
+ ): Promise<WalletPortfolioResponse["data"] | false> {
805
915
  // Get entire portfolio
806
916
  // set up cache
807
917
  const key = `birdeye_walletTokenList_${chain}_${publicKey}`;
@@ -809,7 +919,10 @@ export class BirdeyeService extends Service {
809
919
  const notOlderThan = options.notOlderThan ?? 30 * 1000;
810
920
 
811
921
  // check cache
812
- const cache = await this.getCacheTimed<unknown>(key, { notOlderThan });
922
+ const cache = await this.getCacheTimed<WalletPortfolioResponse["data"]>(
923
+ key,
924
+ { notOlderThan },
925
+ );
813
926
  if (cache) {
814
927
  return cache;
815
928
  }
@@ -820,8 +933,8 @@ export class BirdeyeService extends Service {
820
933
  birdeyeFetchOptions,
821
934
  );
822
935
 
823
- const resp = await res.json();
824
- const data = resp?.data;
936
+ const resp = (await res.json()) as WalletPortfolioResponse;
937
+ const data = resp.data;
825
938
  if (data) {
826
939
  this.setCacheTimed(key, data, tsInMs);
827
940
  }
@@ -832,14 +945,16 @@ export class BirdeyeService extends Service {
832
945
  chain: BirdeyeSupportedChain,
833
946
  publicKey: string,
834
947
  options: GetCacheTimedOptions = {},
835
- ) {
948
+ ): Promise<WalletTransaction[] | false> {
836
949
  // set up cache
837
950
  const key = `birdeye_walletTxList_${chain}_${publicKey}`;
838
951
  const tsInMs = options.tsInMs ?? Date.now();
839
952
  const notOlderThan = options.notOlderThan ?? 30 * 1000;
840
953
 
841
954
  // check cache
842
- const cache = await this.getCacheTimed<unknown>(key, { notOlderThan });
955
+ const cache = await this.getCacheTimed<WalletTransaction[]>(key, {
956
+ notOlderThan,
957
+ });
843
958
  if (cache) {
844
959
  return cache;
845
960
  }
@@ -849,8 +964,8 @@ export class BirdeyeService extends Service {
849
964
  `${this.birdeyeUrl("v1/wallet/tx_list")}?wallet=${publicKey}&limit=100`,
850
965
  birdeyeFetchOptions,
851
966
  );
852
- const resp = await res.json();
853
- const data = resp?.data?.[chain] || [];
967
+ const resp = (await res.json()) as WalletTransactionHistoryResponse;
968
+ const data = resp.data[chain] || [];
854
969
  if (data) {
855
970
  this.setCacheTimed(key, data, tsInMs);
856
971
  }
@@ -881,7 +996,7 @@ export class BirdeyeService extends Service {
881
996
  const birdeye = new Birdeye(runtime);
882
997
  runtime.registerTaskWorker({
883
998
  name: "BIRDEYE_SYNC_WALLET",
884
- validate: async () => true,
999
+ shouldRun: async () => true,
885
1000
  execute: async (rt) => {
886
1001
  try {
887
1002
  await birdeye.syncWallet();
@@ -928,7 +1043,7 @@ export class BirdeyeService extends Service {
928
1043
  !infoService ||
929
1044
  typeof infoService.registerDataProvder !== "function"
930
1045
  ) {
931
- runtime.logger?.debug(
1046
+ runtime.logger.debug(
932
1047
  "INTEL_DATAPROVIDER service not available, skipping Birdeye data provider registration",
933
1048
  );
934
1049
  return;
@@ -939,12 +1054,12 @@ export class BirdeyeService extends Service {
939
1054
  trendingService: BIRDEYE_SERVICE_NAME,
940
1055
  lookupService: BIRDEYE_SERVICE_NAME,
941
1056
  });
942
- runtime.logger?.log(
1057
+ runtime.logger.log(
943
1058
  "Birdeye data provider registered with INTEL_DATAPROVIDER",
944
1059
  );
945
1060
  })
946
1061
  .catch((e) => {
947
- runtime.logger?.debug(
1062
+ runtime.logger.debug(
948
1063
  `Birdeye service load failed; skipping data provider registration: ${e instanceof Error ? e.message : String(e)}`,
949
1064
  );
950
1065
  });
@@ -963,7 +1078,7 @@ export class BirdeyeService extends Service {
963
1078
  }
964
1079
 
965
1080
  async stop(): Promise<void> {
966
- this.runtime.logger?.log("BirdEye service shutdown");
1081
+ this.runtime.logger.log("BirdEye service shutdown");
967
1082
  }
968
1083
 
969
1084
  async getCacheTimed<T>(key: string, options: GetCacheTimedOptions = {}) {