@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.
- package/README.md +70 -45
- package/auto-enable.ts +1 -1
- package/dist/actions/failure-codes.d.ts +12 -0
- package/dist/actions/index.d.ts +1 -0
- package/dist/analytics/birdeye/actions/wallet-search-address.d.ts +7 -0
- package/dist/analytics/birdeye/birdeye-task.d.ts +27 -0
- package/dist/analytics/birdeye/birdeye.d.ts +140 -0
- package/dist/analytics/birdeye/constants.d.ts +68 -0
- package/dist/analytics/birdeye/providers/agent-portfolio-provider.d.ts +8 -0
- package/dist/analytics/birdeye/providers/market.d.ts +18 -0
- package/dist/analytics/birdeye/providers/portfolio-factory.d.ts +10 -0
- package/dist/analytics/birdeye/providers/trending.d.ts +19 -0
- package/dist/analytics/birdeye/providers/wallet.d.ts +5 -0
- package/dist/analytics/birdeye/search-category.d.ts +52 -0
- package/dist/analytics/birdeye/service.d.ts +94 -0
- package/dist/analytics/birdeye/types/api/common.d.ts +199 -0
- package/dist/analytics/birdeye/types/api/defi.d.ts +187 -0
- package/dist/analytics/birdeye/types/api/pair.d.ts +182 -0
- package/dist/analytics/birdeye/types/api/search.d.ts +64 -0
- package/dist/analytics/birdeye/types/api/token.d.ts +580 -0
- package/dist/analytics/birdeye/types/api/trader.d.ts +70 -0
- package/dist/analytics/birdeye/types/api/wallet.d.ts +161 -0
- package/dist/analytics/birdeye/types/shared.d.ts +83 -0
- package/dist/analytics/birdeye/utils.d.ts +74 -0
- package/dist/analytics/dexscreener/errors.d.ts +2 -0
- package/dist/analytics/dexscreener/index.d.ts +3 -0
- package/dist/analytics/dexscreener/search-category.d.ts +3 -0
- package/dist/analytics/dexscreener/service.d.ts +34 -0
- package/dist/analytics/dexscreener/types.d.ts +131 -0
- package/dist/analytics/lpinfo/index.d.ts +31 -0
- package/dist/analytics/lpinfo/kamino/index.d.ts +7 -0
- package/dist/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.d.ts +6 -0
- package/dist/analytics/lpinfo/kamino/providers/kaminoPoolProvider.d.ts +6 -0
- package/dist/analytics/lpinfo/kamino/providers/kaminoProvider.d.ts +6 -0
- package/dist/analytics/lpinfo/kamino/services/kaminoLiquidityService.d.ts +203 -0
- package/dist/analytics/lpinfo/kamino/services/kaminoService.d.ts +171 -0
- package/dist/analytics/lpinfo/steer/index.d.ts +7 -0
- package/dist/analytics/lpinfo/steer/providers/steerLiquidityProvider.d.ts +6 -0
- package/dist/analytics/lpinfo/steer/services/steerLiquidityService.d.ts +208 -0
- package/dist/analytics/lpinfo/steer/steer-display-types.d.ts +97 -0
- package/dist/analytics/news/index.d.ts +32 -0
- package/dist/analytics/news/interfaces/types.d.ts +177 -0
- package/dist/analytics/news/providers/defiNewsProvider.d.ts +106 -0
- package/dist/analytics/news/services/newsDataService.d.ts +72 -0
- package/dist/analytics/news/utils/formatters.d.ts +54 -0
- package/dist/analytics/token-info/action.d.ts +6 -0
- package/dist/analytics/token-info/index.d.ts +3 -0
- package/dist/analytics/token-info/params.d.ts +10 -0
- package/dist/analytics/token-info/providers.d.ts +4 -0
- package/dist/analytics/token-info/service.d.ts +19 -0
- package/dist/analytics/token-info/types.d.ts +45 -0
- package/dist/api/wallet-routes.d.ts +100 -0
- package/dist/audit/audit-log.d.ts +29 -0
- package/dist/browser-shim/build-shim.d.ts +31 -0
- package/dist/browser-shim/index.d.ts +1 -0
- package/dist/chains/evm/actions/helpers.d.ts +31 -0
- package/dist/chains/evm/actions/swap.d.ts +53 -0
- package/dist/chains/evm/actions/transfer.d.ts +10 -0
- package/dist/chains/evm/bridge-router.d.ts +44 -0
- package/dist/chains/evm/build.d.ts +2 -0
- package/dist/chains/evm/chain-handler.d.ts +37 -0
- package/dist/chains/evm/constants.d.ts +16 -0
- package/dist/chains/evm/dex/aerodrome/index.d.ts +6 -0
- package/dist/chains/evm/dex/aerodrome/services/AerodromeLpService.d.ts +27 -0
- package/dist/chains/evm/dex/aerodrome/types.d.ts +435 -0
- package/dist/chains/evm/dex/pancakeswp/index.d.ts +6 -0
- package/dist/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.d.ts +28 -0
- package/dist/chains/evm/dex/pancakeswp/types.d.ts +19 -0
- package/dist/chains/evm/dex/uniswap/index.d.ts +6 -0
- package/dist/chains/evm/dex/uniswap/services/UniswapV3LpService.d.ts +28 -0
- package/dist/chains/evm/dex/uniswap/types.d.ts +458 -0
- package/dist/chains/evm/generated/specs/spec-helpers.d.ts +35 -0
- package/dist/chains/evm/generated/specs/specs.d.ts +99 -0
- package/dist/chains/evm/gov-router.d.ts +6 -0
- package/dist/chains/evm/index.browser.d.ts +3 -0
- package/dist/chains/evm/index.d.ts +6 -0
- package/dist/chains/evm/prompts.d.ts +24 -0
- package/dist/chains/evm/providers/get-balance.d.ts +2 -0
- package/dist/chains/evm/providers/wallet.d.ts +35 -0
- package/dist/chains/evm/routes/sign.d.ts +13 -0
- package/dist/chains/evm/rpc-providers.d.ts +26 -0
- package/dist/chains/evm/service.d.ts +26 -0
- package/dist/chains/evm/templates/index.d.ts +1 -0
- package/dist/chains/evm/types/index.d.ts +296 -0
- package/dist/chains/evm/vitest.config.d.ts +2 -0
- package/dist/chains/registry.d.ts +3 -0
- package/dist/chains/solana/actions/confirmation.d.ts +9 -0
- package/dist/chains/solana/bn.d.ts +6 -0
- package/dist/chains/solana/build.d.ts +2 -0
- package/dist/chains/solana/constants.d.ts +2 -0
- package/dist/chains/solana/dex/meteora/e2e/scenarios.d.ts +10 -0
- package/dist/chains/solana/dex/meteora/e2e/test-utils.d.ts +28 -0
- package/dist/chains/solana/dex/meteora/index.d.ts +3 -0
- package/dist/chains/solana/dex/meteora/providers/positionProvider.d.ts +9 -0
- package/dist/chains/solana/dex/meteora/services/MeteoraLpService.d.ts +37 -0
- package/dist/chains/solana/dex/meteora/utils/dlmm.d.ts +6 -0
- package/dist/chains/solana/dex/meteora/utils/loadWallet.d.ts +14 -0
- package/dist/chains/solana/dex/meteora/utils/sendTransaction.d.ts +2 -0
- package/dist/chains/solana/dex/orca/index.d.ts +6 -0
- package/dist/chains/solana/dex/orca/providers/positionProvider.d.ts +10 -0
- package/dist/chains/solana/dex/orca/services/srv_orca.d.ts +10 -0
- package/dist/chains/solana/dex/orca/types.d.ts +61 -0
- package/dist/chains/solana/dex/orca/utils/loadWallet.d.ts +1 -0
- package/dist/chains/solana/dex/orca/utils/sendTransaction.d.ts +2 -0
- package/dist/chains/solana/dex/raydium/index.d.ts +6 -0
- package/dist/chains/solana/dex/raydium/providers/positionProvider.d.ts +10 -0
- package/dist/chains/solana/dex/raydium/services/srv_raydium.d.ts +104 -0
- package/dist/chains/solana/dex/raydium/types.d.ts +42 -0
- package/dist/chains/solana/environment.d.ts +15 -0
- package/dist/chains/solana/generated/specs/spec-helpers.d.ts +35 -0
- package/dist/chains/solana/generated/specs/specs.d.ts +73 -0
- package/dist/chains/solana/index.browser.d.ts +3 -0
- package/dist/chains/solana/index.d.ts +7 -0
- package/dist/chains/solana/keypairUtils.d.ts +7 -0
- package/dist/chains/solana/prompts.d.ts +12 -0
- package/dist/chains/solana/providers/wallet.d.ts +2 -0
- package/dist/chains/solana/routes/index.d.ts +2 -0
- package/dist/chains/solana/routes/sign.d.ts +16 -0
- package/dist/chains/solana/service.d.ts +237 -0
- package/dist/chains/solana/types.d.ts +377 -0
- package/dist/chains/solana/vitest.config.d.ts +2 -0
- package/dist/chains/wallet-action.d.ts +3 -0
- package/dist/contracts.d.ts +58 -0
- package/dist/core-augmentation.d.ts +9 -0
- package/dist/index.d.mts +27 -34727
- package/dist/index.d.ts +27 -0
- package/dist/index.mjs +28246 -21186
- package/dist/index.mjs.map +153 -0
- package/dist/lib/server-wallet-trade.d.ts +22 -0
- package/dist/lib/server-wallet-trade.js +333 -0
- package/dist/lib/server-wallet-trade.js.map +11 -0
- package/dist/lib/wallet-export-guard.d.ts +45 -0
- package/dist/lp/actions/liquidity.d.ts +2 -0
- package/dist/lp/e2e/real-token-tests.d.ts +6 -0
- package/dist/lp/e2e/scenarios.d.ts +9 -0
- package/dist/lp/e2e/test-utils.d.ts +28 -0
- package/dist/lp/lp-manager-entry.d.ts +18 -0
- package/dist/lp/services/ConcentratedLiquidityService.d.ts +32 -0
- package/dist/lp/services/DexInteractionService.d.ts +34 -0
- package/dist/lp/services/LpManagementService.d.ts +116 -0
- package/dist/lp/services/UserLpProfileService.d.ts +18 -0
- package/dist/lp/services/VaultService.d.ts +21 -0
- package/dist/lp/services/YieldOptimizationService.d.ts +59 -0
- package/dist/lp/services/__tests__/MockLpService.d.ts +17 -0
- package/dist/lp/types.d.ts +439 -0
- package/dist/lp/utils/solanaClient.d.ts +26 -0
- package/dist/plugin.d.ts +7 -0
- package/dist/policy/policy.d.ts +14 -0
- package/dist/providers/canonical-provider.d.ts +19 -0
- package/dist/providers/wallet-provider.d.ts +5 -0
- package/dist/register-routes.d.ts +1 -0
- package/dist/routes/plugin.d.ts +14 -0
- package/dist/routes/wallet-market-overview-route.d.ts +7 -0
- package/dist/sdk/abi.d.ts +396 -0
- package/dist/sdk/bridge/abis.d.ts +63 -0
- package/dist/sdk/bridge/client.d.ts +48 -0
- package/dist/sdk/bridge/index.d.ts +14 -0
- package/dist/sdk/bridge/solana.d.ts +131 -0
- package/dist/sdk/bridge/types.d.ts +92 -0
- package/dist/sdk/convenience.d.ts +104 -0
- package/dist/sdk/escrow/MutualStakeEscrow.d.ts +75 -0
- package/dist/sdk/escrow/types.d.ts +58 -0
- package/dist/sdk/escrow/verifiers.d.ts +25 -0
- package/dist/sdk/identity/erc8004.d.ts +304 -0
- package/dist/sdk/identity/reputation.d.ts +317 -0
- package/dist/sdk/identity/uaid.d.ts +192 -0
- package/dist/sdk/identity/validation.d.ts +282 -0
- package/dist/sdk/index.d.ts +133 -0
- package/dist/sdk/index.js +5284 -0
- package/dist/sdk/index.js.map +40 -0
- package/dist/sdk/policy/SpendingPolicy.d.ts +105 -0
- package/dist/sdk/policy/UptoBillingPolicy.d.ts +87 -0
- package/dist/sdk/router/PaymentRouter.d.ts +77 -0
- package/dist/sdk/router/index.d.ts +2 -0
- package/dist/sdk/swap/SwapModule.d.ts +47 -0
- package/dist/sdk/swap/abi.d.ts +50 -0
- package/dist/sdk/swap/index.d.ts +11 -0
- package/dist/sdk/swap/types.d.ts +101 -0
- package/dist/sdk/tokens/decimals.d.ts +64 -0
- package/dist/sdk/tokens/registry.d.ts +81 -0
- package/dist/sdk/tokens/solana.d.ts +107 -0
- package/dist/sdk/tokens/transfers.d.ts +94 -0
- package/dist/sdk/types.d.ts +129 -0
- package/dist/sdk/wallet-core.d.ts +29450 -0
- package/dist/sdk/x402/budget.d.ts +51 -0
- package/dist/sdk/x402/chains/abstract/index.d.ts +134 -0
- package/dist/sdk/x402/client.d.ts +66 -0
- package/dist/sdk/x402/index.d.ts +8 -0
- package/dist/sdk/x402/middleware.d.ts +37 -0
- package/dist/sdk/x402/multi-asset.d.ts +53 -0
- package/dist/sdk/x402/types.d.ts +109 -0
- package/dist/security/wallet-context-safety.d.ts +7 -0
- package/dist/security/wallet-financial-confirmation.d.ts +23 -0
- package/dist/services/wallet-backend-service.d.ts +39 -0
- package/dist/types/wallet-router.d.ts +130 -0
- package/dist/utils/intent-trajectory.d.ts +34 -0
- package/dist/wallet/backend.d.ts +41 -0
- package/dist/wallet/errors.d.ts +17 -0
- package/dist/wallet/index.d.ts +6 -0
- package/dist/wallet/local-eoa-backend.d.ts +37 -0
- package/dist/wallet/pending.d.ts +47 -0
- package/dist/wallet/select-backend.d.ts +11 -0
- package/dist/wallet/steward-backend.d.ts +22 -0
- package/dist/wallet-action.d.ts +1 -0
- package/dist/wallet-action.js +6292 -0
- package/dist/wallet-action.js.map +44 -0
- package/package.json +35 -21
- package/registry-entry.json +134 -0
- package/src/analytics/birdeye/actions/wallet-search-address.ts +85 -5
- package/src/analytics/birdeye/birdeye-task.ts +25 -9
- package/src/analytics/birdeye/birdeye.ts +6 -7
- package/src/analytics/birdeye/constants.ts +0 -1
- package/src/analytics/birdeye/providers/agent-portfolio-provider.ts +0 -1
- package/src/analytics/birdeye/providers/market.ts +51 -45
- package/src/analytics/birdeye/providers/portfolio-factory.ts +79 -38
- package/src/analytics/birdeye/providers/trending.ts +43 -46
- package/src/analytics/birdeye/providers/wallet.ts +0 -1
- package/src/analytics/birdeye/search-category.test.ts +1 -1
- package/src/analytics/birdeye/search-category.ts +77 -12
- package/src/analytics/birdeye/service.test.ts +146 -0
- package/src/analytics/birdeye/service.ts +220 -105
- package/src/analytics/birdeye/types/api/common.ts +0 -1
- package/src/analytics/birdeye/types/api/defi.ts +0 -1
- package/src/analytics/birdeye/types/api/pair.ts +0 -1
- package/src/analytics/birdeye/types/api/search.ts +0 -1
- package/src/analytics/birdeye/types/api/token.ts +0 -1
- package/src/analytics/birdeye/types/api/trader.ts +0 -1
- package/src/analytics/birdeye/types/api/wallet.ts +0 -1
- package/src/analytics/birdeye/types/shared.ts +0 -11
- package/src/analytics/birdeye/utils.test.ts +69 -0
- package/src/analytics/birdeye/utils.ts +11 -8
- package/src/analytics/dexscreener/search-category.ts +0 -1
- package/src/analytics/dexscreener/service.ts +7 -12
- package/src/analytics/dexscreener/types.ts +0 -1
- package/src/analytics/lpinfo/index.ts +5 -2
- package/src/analytics/lpinfo/kamino/README.md +2 -2
- package/src/analytics/lpinfo/kamino/index.ts +9 -2
- package/src/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.ts +6 -26
- package/src/analytics/lpinfo/kamino/providers/kaminoPoolProvider.ts +11 -12
- package/src/analytics/lpinfo/kamino/providers/kaminoProvider.ts +76 -32
- package/src/analytics/lpinfo/kamino/services/kaminoLiquidityService.ts +78 -38
- package/src/analytics/lpinfo/kamino/services/kaminoService.ts +71 -31
- package/src/analytics/lpinfo/steer/index.ts +7 -2
- package/src/analytics/lpinfo/steer/providers/steerLiquidityProvider.ts +25 -26
- package/src/analytics/lpinfo/steer/services/steerLiquidityService.ts +367 -149
- package/src/analytics/news/index.ts +7 -2
- package/src/analytics/news/interfaces/types.ts +0 -1
- package/src/analytics/news/providers/defiNewsProvider.ts +17 -44
- package/src/analytics/news/services/newsDataService.ts +1 -22
- package/src/analytics/news/utils/formatters.test.ts +60 -0
- package/src/analytics/news/utils/formatters.ts +0 -1
- package/src/analytics/token-info/action.ts +52 -212
- package/src/analytics/token-info/index.ts +1 -1
- package/src/analytics/token-info/params.test.ts +69 -0
- package/src/analytics/token-info/params.ts +13 -11
- package/src/analytics/token-info/providers.ts +46 -17
- package/src/analytics/token-info/service.ts +3 -3
- package/src/analytics/token-info/types.ts +2 -2
- package/src/api/wallet-routes.test.ts +56 -0
- package/src/api/wallet-routes.ts +1728 -0
- package/src/audit/audit-log.ts +57 -2
- package/src/browser-shim/build-shim.ts +1 -1
- package/src/browser-shim/shim.template.js +107 -117
- package/src/chains/{wallet-router.test.ts → __tests__/wallet-router.test.ts} +57 -10
- package/src/chains/evm/actions/helpers.ts +9 -7
- package/src/chains/evm/actions/swap.ts +176 -22
- package/src/chains/evm/actions/transfer.ts +29 -22
- package/src/chains/evm/biome.json +1 -1
- package/src/chains/evm/build.ts +6 -1
- package/src/chains/evm/constants.ts +19 -0
- package/src/chains/evm/contracts/artifacts/OZGovernor.json +25 -1682
- package/src/chains/evm/dex/aerodrome/index.ts +6 -1
- package/src/chains/evm/dex/aerodrome/services/AerodromeLpService.ts +41 -15
- package/src/chains/evm/dex/aerodrome/types.ts +1 -2
- package/src/chains/evm/dex/pancakeswp/index.ts +6 -1
- package/src/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.ts +54 -17
- package/src/chains/evm/dex/pancakeswp/types.ts +1 -2
- package/src/chains/evm/dex/uniswap/index.ts +6 -1
- package/src/chains/evm/dex/uniswap/services/UniswapV3LpService.ts +20 -9
- package/src/chains/evm/dex/uniswap/types.ts +1 -2
- package/src/chains/evm/gov-router.ts +3 -1
- package/src/chains/evm/index.browser.ts +1 -1
- package/src/chains/evm/index.ts +5 -1
- package/src/chains/evm/prompts.ts +5 -0
- package/src/chains/evm/providers/get-balance.ts +1 -1
- package/src/chains/evm/providers/wallet.ts +80 -9
- package/src/chains/evm/routes/sign.ts +35 -26
- package/src/chains/evm/rpc-providers.ts +1 -1
- package/src/chains/evm/types/index.ts +22 -2
- package/src/chains/registry.ts +1 -1
- package/src/chains/wallet-action.ts +301 -91
- package/src/index.ts +9 -5
- package/src/lib/wallet-export-guard.test.ts +233 -0
- package/src/lib/wallet-export-guard.ts +1 -1
- package/src/lp/actions/liquidity.ts +53 -26
- package/src/lp/e2e/real-token-tests.ts +0 -1
- package/src/lp/e2e/scenarios.ts +1 -2
- package/src/lp/e2e/test-utils.ts +20 -7
- package/src/lp/lp-manager-entry.ts +2 -5
- package/src/lp/services/ConcentratedLiquidityService.ts +3 -10
- package/src/lp/services/DexInteractionService.ts +1 -2
- package/src/lp/services/LpManagementService.test.ts +0 -1
- package/src/lp/services/LpManagementService.ts +75 -35
- package/src/lp/services/UserLpProfileService.ts +2 -3
- package/src/lp/services/VaultService.ts +10 -4
- package/src/lp/services/YieldOptimizationService.ts +29 -13
- package/src/lp/services/__tests__/MockLpService.ts +1 -2
- package/src/lp/types.ts +9 -13
- package/src/lp/utils/solanaClient.ts +4 -2
- package/src/plugin.routes.test.ts +24 -0
- package/src/plugin.ts +30 -13
- package/src/providers/canonical-provider.ts +1 -1
- package/src/providers/{unified-wallet-provider.ts → wallet-provider.ts} +3 -3
- package/src/routes/__fixtures__/coingecko-markets.recorded.json +97 -0
- package/src/routes/wallet-market-overview-route.ts +1 -1
- package/src/routes/wallet-market-overview.contract.test.ts +139 -0
- package/src/routes/wallet-market-overview.real.test.ts +83 -0
- package/src/sdk/escrow/MutualStakeEscrow.ts +1 -2
- package/src/sdk/identity/erc8004.ts +1 -1
- package/src/sdk/identity/validation.ts +3 -4
- package/src/sdk/index.ts +2 -2
- package/src/sdk/policy/SpendingPolicy.ts +1 -1
- package/src/sdk/router/PaymentRouter.ts +8 -11
- package/src/sdk/swap/SwapModule.ts +1 -1
- package/src/sdk/tokens/registry.ts +1 -1
- package/src/sdk/x402/middleware.ts +2 -8
- package/src/security/__tests__/wallet-context-safety.test.ts +79 -0
- package/src/security/__tests__/wallet-financial-confirmation.test.ts +88 -0
- package/src/security/wallet-context-safety.ts +128 -0
- package/src/security/wallet-financial-confirmation.ts +150 -0
- package/src/services/wallet-backend-service.ts +15 -1
- package/src/utils/intent-trajectory.ts +2 -2
- package/src/wallet/steward-backend.ts +4 -4
- package/dist/LpManagementService-BWrQ5-cO.mjs +0 -353
- package/dist/MockLpService-D_Apn4Fd.mjs +0 -99
- package/dist/aerodrome-CfnESC32.mjs +0 -890
- package/dist/chunk-hT5z_Zn9.mjs +0 -35
- package/dist/lib/server-wallet-trade.d.mts +0 -34
- package/dist/lib/server-wallet-trade.mjs +0 -306
- package/dist/meteora-BPX39hZo.mjs +0 -22640
- package/dist/orca-Bybp1HXO.mjs +0 -249
- package/dist/pancakeswp-CkEXlXti.mjs +0 -604
- package/dist/plugin-ZO_MTyd0.mjs +0 -529
- package/dist/raydium-rfaM9yEf.mjs +0 -539
- package/dist/sdk/index.d.mts +0 -32492
- package/dist/sdk/index.mjs +0 -6415
- package/dist/types-D5252NZk.mjs +0 -487
- package/dist/uniswap-CReXgXVN.mjs +0 -573
- package/dist/wallet-action.d.mts +0 -6
- package/dist/wallet-action.mjs +0 -820
- package/src/analytics/birdeye/tasks/birdeye.ts +0 -232
- package/src/analytics/lpinfo/index.d.ts +0 -7
- package/src/chains/evm/contracts/artifacts/TimelockController.json +0 -1007
- package/src/chains/evm/contracts/artifacts/VoteToken.json +0 -895
- package/src/lp/tasks/LpAutoRebalanceTask.ts +0 -117
- package/src/lp/tasks/__tests__/LpAutoRebalanceTask.test.ts +0 -370
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import type { Plugin } from "@elizaos/core";
|
|
1
|
+
import type { IAgentRuntime, Plugin } from "@elizaos/core";
|
|
3
2
|
// Providers
|
|
4
3
|
import { defiNewsProvider } from "./providers/defiNewsProvider";
|
|
5
4
|
// Services
|
|
@@ -37,6 +36,12 @@ export const defiNewsPlugin: Plugin = {
|
|
|
37
36
|
providers: [defiNewsProvider],
|
|
38
37
|
actions: [],
|
|
39
38
|
services: [NewsDataService],
|
|
39
|
+
async dispose(runtime: IAgentRuntime) {
|
|
40
|
+
const svc = runtime.getService<NewsDataService>(
|
|
41
|
+
NewsDataService.serviceType,
|
|
42
|
+
);
|
|
43
|
+
await svc?.stop();
|
|
44
|
+
},
|
|
40
45
|
};
|
|
41
46
|
|
|
42
47
|
export default defiNewsPlugin;
|
|
@@ -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 type { NewsDataService } from "../services/newsDataService";
|
|
4
3
|
|
|
@@ -29,10 +28,13 @@ interface CoinGeckoSearchResult {
|
|
|
29
28
|
interface CoinGeckoCoinData {
|
|
30
29
|
name: string;
|
|
31
30
|
symbol: string;
|
|
31
|
+
market_cap_rank?: number;
|
|
32
32
|
market_data?: {
|
|
33
33
|
current_price?: { usd?: number };
|
|
34
34
|
market_cap?: { usd?: number };
|
|
35
35
|
total_volume?: { usd?: number };
|
|
36
|
+
high_24h?: { usd?: number };
|
|
37
|
+
low_24h?: { usd?: number };
|
|
36
38
|
price_change_percentage_24h?: number;
|
|
37
39
|
price_change_percentage_7d?: number;
|
|
38
40
|
price_change_percentage_30d?: number;
|
|
@@ -40,6 +42,11 @@ interface CoinGeckoCoinData {
|
|
|
40
42
|
community_data?: {
|
|
41
43
|
twitter_followers?: number;
|
|
42
44
|
reddit_subscribers?: number;
|
|
45
|
+
telegram_channel_user_count?: number;
|
|
46
|
+
};
|
|
47
|
+
developer_data?: {
|
|
48
|
+
forks?: number;
|
|
49
|
+
stars?: number;
|
|
43
50
|
};
|
|
44
51
|
}
|
|
45
52
|
|
|
@@ -92,7 +99,7 @@ export const defiNewsProvider: Provider = {
|
|
|
92
99
|
description:
|
|
93
100
|
"Provides DeFi market data, global crypto statistics, token information, and real-world crypto news",
|
|
94
101
|
descriptionCompressed:
|
|
95
|
-
"
|
|
102
|
+
"DeFi market data, crypto stats, token info, crypto news",
|
|
96
103
|
dynamic: true,
|
|
97
104
|
contexts: ["finance", "crypto", "wallet"],
|
|
98
105
|
contextGate: { anyOf: ["finance", "crypto", "wallet"] },
|
|
@@ -100,8 +107,6 @@ export const defiNewsProvider: Provider = {
|
|
|
100
107
|
cacheScope: "turn",
|
|
101
108
|
roleGate: { minRole: "USER" },
|
|
102
109
|
get: async (runtime: IAgentRuntime, message: Memory, _state: State) => {
|
|
103
|
-
console.log("DEFI_NEWS provider called");
|
|
104
|
-
|
|
105
110
|
let defiNewsInfo = "";
|
|
106
111
|
|
|
107
112
|
try {
|
|
@@ -114,7 +119,6 @@ export const defiNewsProvider: Provider = {
|
|
|
114
119
|
) as NewsDataService;
|
|
115
120
|
|
|
116
121
|
if (!newsDataService) {
|
|
117
|
-
console.log("NewsData service not available");
|
|
118
122
|
return {
|
|
119
123
|
data: {},
|
|
120
124
|
values: {},
|
|
@@ -122,10 +126,8 @@ export const defiNewsProvider: Provider = {
|
|
|
122
126
|
};
|
|
123
127
|
}
|
|
124
128
|
|
|
125
|
-
console.log("DeFi News services found, generating report...");
|
|
126
|
-
|
|
127
129
|
// Check if a specific token is mentioned in the message
|
|
128
|
-
const messageText = message.content
|
|
130
|
+
const messageText = message.content.text || "";
|
|
129
131
|
|
|
130
132
|
defiNewsInfo += `=== DEFI & CRYPTO MARKET REPORT ===\n\n`;
|
|
131
133
|
|
|
@@ -139,8 +141,6 @@ export const defiNewsProvider: Provider = {
|
|
|
139
141
|
extractedSymbols.unshift(namedSymbol); // Add to front
|
|
140
142
|
}
|
|
141
143
|
|
|
142
|
-
console.log(`Extracted symbols: ${extractedSymbols.join(", ")}`);
|
|
143
|
-
|
|
144
144
|
// If token symbols are detected and services are available, look them up
|
|
145
145
|
if (extractedSymbols.length > 0 && coinGeckoService) {
|
|
146
146
|
// Try to get Birdeye service for symbol lookup
|
|
@@ -154,8 +154,6 @@ export const defiNewsProvider: Provider = {
|
|
|
154
154
|
if (birdeyeService && solanaService) {
|
|
155
155
|
// Process up to 3 tokens
|
|
156
156
|
for (const detectedSymbol of extractedSymbols.slice(0, 3)) {
|
|
157
|
-
console.log(`Looking up symbol: ${detectedSymbol}`);
|
|
158
|
-
|
|
159
157
|
try {
|
|
160
158
|
// Look up token by symbol across all chains
|
|
161
159
|
const options =
|
|
@@ -164,17 +162,11 @@ export const defiNewsProvider: Provider = {
|
|
|
164
162
|
(t) => t.symbol.toUpperCase() === detectedSymbol.toUpperCase(),
|
|
165
163
|
);
|
|
166
164
|
|
|
167
|
-
console.log(
|
|
168
|
-
`Birdeye found ${exactOptions.length} exact matches for ${detectedSymbol}`,
|
|
169
|
-
);
|
|
170
|
-
|
|
171
165
|
if (exactOptions.length > 0) {
|
|
172
166
|
// Use the first exact match (usually the most popular/main token)
|
|
173
167
|
const tokenOption = exactOptions[0];
|
|
174
168
|
const tokenCA = tokenOption.address;
|
|
175
169
|
|
|
176
|
-
console.log(`Using token: ${tokenOption.symbol} at ${tokenCA}`);
|
|
177
|
-
|
|
178
170
|
// Verify it's actually a token
|
|
179
171
|
const addressType = await solanaService.getAddressType(tokenCA);
|
|
180
172
|
|
|
@@ -188,28 +180,16 @@ export const defiNewsProvider: Provider = {
|
|
|
188
180
|
if (tokenData) {
|
|
189
181
|
defiNewsInfo += tokenData;
|
|
190
182
|
}
|
|
191
|
-
} else {
|
|
192
|
-
console.log(
|
|
193
|
-
`Address ${tokenCA} is not a Token, it's a ${addressType}`,
|
|
194
|
-
);
|
|
195
183
|
}
|
|
196
|
-
} else {
|
|
197
|
-
console.log(
|
|
198
|
-
`No exact matches found for ${detectedSymbol}, skipping...`,
|
|
199
|
-
);
|
|
200
184
|
}
|
|
201
185
|
} catch (error) {
|
|
202
|
-
|
|
203
|
-
`
|
|
204
|
-
error,
|
|
186
|
+
runtime.logger.warn(
|
|
187
|
+
`[DEFI_NEWS] error looking up ${detectedSymbol} via Birdeye: ${error instanceof Error ? error.message : String(error)}`,
|
|
205
188
|
);
|
|
206
189
|
}
|
|
207
190
|
}
|
|
208
191
|
} else {
|
|
209
192
|
// Fallback to CoinGecko ID lookup for major tokens
|
|
210
|
-
console.log(
|
|
211
|
-
"Birdeye or Solana service not available, using CoinGecko fallback",
|
|
212
|
-
);
|
|
213
193
|
for (const detectedSymbol of extractedSymbols.slice(0, 1)) {
|
|
214
194
|
const coingeckoId = getCoinGeckoIdFromSymbol(detectedSymbol);
|
|
215
195
|
if (coingeckoId) {
|
|
@@ -233,7 +213,6 @@ export const defiNewsProvider: Provider = {
|
|
|
233
213
|
const globalCryptoData = await getGlobalCryptoData(coinGeckoService);
|
|
234
214
|
defiNewsInfo += globalCryptoData;
|
|
235
215
|
} else {
|
|
236
|
-
console.log("CoinGecko service not available, skipping market data");
|
|
237
216
|
defiNewsInfo +=
|
|
238
217
|
"⚠️ Market data unavailable (CoinGecko service not configured)\n\n";
|
|
239
218
|
}
|
|
@@ -276,7 +255,7 @@ export const extractSymbols = (
|
|
|
276
255
|
// strict mode will only extract symbols that are clearly formatted as a symbol using $SOL format
|
|
277
256
|
mode: "strict" | "loose" = "loose",
|
|
278
257
|
): string[] => {
|
|
279
|
-
if (!text
|
|
258
|
+
if (!text.matchAll) return [];
|
|
280
259
|
const symbols = new Set<string>();
|
|
281
260
|
|
|
282
261
|
// Match patterns
|
|
@@ -557,15 +536,11 @@ async function getTokenInfoByAddress(
|
|
|
557
536
|
tokenSymbol = onChainSymbol;
|
|
558
537
|
}
|
|
559
538
|
} catch (_error) {
|
|
560
|
-
|
|
539
|
+
// fall back to provided symbol when on-chain lookup fails
|
|
561
540
|
}
|
|
562
541
|
|
|
563
|
-
console.log(
|
|
564
|
-
`Fetching CoinGecko data for ${tokenSymbol} at ${tokenAddress}`,
|
|
565
|
-
);
|
|
566
|
-
|
|
567
542
|
// Try to search CoinGecko by symbol
|
|
568
|
-
let coinData = null;
|
|
543
|
+
let coinData: CoinGeckoCoinData | null = null;
|
|
569
544
|
const searchResults = await coinGeckoService.searchCoin(tokenSymbol);
|
|
570
545
|
|
|
571
546
|
if (searchResults && searchResults.length > 0) {
|
|
@@ -576,11 +551,9 @@ async function getTokenInfoByAddress(
|
|
|
576
551
|
);
|
|
577
552
|
|
|
578
553
|
if (solanaMatch) {
|
|
579
|
-
console.log(`Found exact Solana platform match: ${solanaMatch.id}`);
|
|
580
554
|
coinData = await coinGeckoService.getCoinData(solanaMatch.id);
|
|
581
555
|
} else {
|
|
582
556
|
// Use first result as fallback
|
|
583
|
-
console.log(`Using first search result: ${searchResults[0].id}`);
|
|
584
557
|
coinData = await coinGeckoService.getCoinData(searchResults[0].id);
|
|
585
558
|
}
|
|
586
559
|
}
|
|
@@ -608,8 +581,8 @@ async function getTokenInfoByAddress(
|
|
|
608
581
|
if (md.total_volume?.usd) {
|
|
609
582
|
tokenInfo += ` 24h Volume: $${(md.total_volume.usd / 1e9).toFixed(2)}B\n`;
|
|
610
583
|
}
|
|
611
|
-
if (
|
|
612
|
-
tokenInfo += ` Market Cap Rank: #${
|
|
584
|
+
if (coinData.market_cap_rank) {
|
|
585
|
+
tokenInfo += ` Market Cap Rank: #${coinData.market_cap_rank}\n`;
|
|
613
586
|
}
|
|
614
587
|
|
|
615
588
|
tokenInfo += "\n📈 PRICE CHANGES:\n";
|
|
@@ -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 } from "@elizaos/core";
|
|
3
2
|
import { Service } from "@elizaos/core";
|
|
4
3
|
import type { RealWorldNewsArticle } from "../interfaces/types";
|
|
@@ -31,13 +30,6 @@ export class NewsDataService extends Service {
|
|
|
31
30
|
return "Provides real-world cryptocurrency news and events from Brave New Coin RSS feed";
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
constructor(runtime?: IAgentRuntime) {
|
|
35
|
-
super(runtime);
|
|
36
|
-
console.log(
|
|
37
|
-
"✅ [NewsDataService] Initialized with Brave New Coin RSS feed",
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
33
|
/**
|
|
42
34
|
* Start the NewsData service (static method for framework)
|
|
43
35
|
*/
|
|
@@ -59,9 +51,7 @@ export class NewsDataService extends Service {
|
|
|
59
51
|
/**
|
|
60
52
|
* Stop the service instance
|
|
61
53
|
*/
|
|
62
|
-
async stop(): Promise<void> {
|
|
63
|
-
console.log("✅ [NewsDataService] Stopped");
|
|
64
|
-
}
|
|
54
|
+
async stop(): Promise<void> {}
|
|
65
55
|
|
|
66
56
|
/**
|
|
67
57
|
* Parse RSS XML to extract news items
|
|
@@ -198,10 +188,6 @@ export class NewsDataService extends Service {
|
|
|
198
188
|
const limit = options?.limit || 10;
|
|
199
189
|
const query = options?.query?.toLowerCase();
|
|
200
190
|
|
|
201
|
-
console.log(
|
|
202
|
-
`🔍 [NewsDataService] Fetching news from Brave New Coin RSS feed`,
|
|
203
|
-
);
|
|
204
|
-
|
|
205
191
|
const response = await fetch(this.rssUrl, {
|
|
206
192
|
method: "GET",
|
|
207
193
|
headers: {
|
|
@@ -222,10 +208,6 @@ export class NewsDataService extends Service {
|
|
|
222
208
|
const xmlText = await response.text();
|
|
223
209
|
const rssItems = this.parseRSS(xmlText);
|
|
224
210
|
|
|
225
|
-
console.log(
|
|
226
|
-
`✅ [NewsDataService] Parsed ${rssItems.length} news articles from RSS`,
|
|
227
|
-
);
|
|
228
|
-
|
|
229
211
|
// Convert RSS items to RealWorldNewsArticle format
|
|
230
212
|
let articles: RealWorldNewsArticle[] = rssItems.map((item, index) => ({
|
|
231
213
|
article_id: item.guid || `bnc-${Date.now()}-${index}`,
|
|
@@ -260,9 +242,6 @@ export class NewsDataService extends Service {
|
|
|
260
242
|
`${article.title} ${article.description || ""} ${article.content || ""} ${article.category?.join(" ") || ""}`.toLowerCase();
|
|
261
243
|
return searchText.includes(query);
|
|
262
244
|
});
|
|
263
|
-
console.log(
|
|
264
|
-
`🔍 [NewsDataService] Filtered to ${articles.length} articles matching query: ${query}`,
|
|
265
|
-
);
|
|
266
245
|
}
|
|
267
246
|
|
|
268
247
|
// Limit results
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
extractTokenSymbol,
|
|
4
|
+
formatCurrency,
|
|
5
|
+
formatNumber,
|
|
6
|
+
formatPercentage,
|
|
7
|
+
getSentimentEmoji,
|
|
8
|
+
isValidTokenAddress,
|
|
9
|
+
stripHtml,
|
|
10
|
+
truncateText,
|
|
11
|
+
} from "./formatters.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* DeFi news formatters render financial figures and validate token addresses.
|
|
15
|
+
* Magnitude suffixes, percent sign/emoji, and address-shape validation must be
|
|
16
|
+
* exact — isValidTokenAddress in particular gates EVM/Solana address inputs.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
describe("formatCurrency", () => {
|
|
20
|
+
it("scales with T/B/M/K suffixes", () => {
|
|
21
|
+
expect(formatCurrency(1.5e12)).toBe("$1.50T");
|
|
22
|
+
expect(formatCurrency(2.5e9)).toBe("$2.50B");
|
|
23
|
+
expect(formatCurrency(3.5e6)).toBe("$3.50M");
|
|
24
|
+
expect(formatCurrency(4.5e3)).toBe("$4.50K");
|
|
25
|
+
expect(formatCurrency(12.3)).toBe("$12.30");
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
describe("formatPercentage", () => {
|
|
30
|
+
it("adds sign + trend emoji", () => {
|
|
31
|
+
expect(formatPercentage(5)).toBe("📈 +5.00%");
|
|
32
|
+
expect(formatPercentage(-3.2)).toBe("📉 -3.20%");
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe("text helpers", () => {
|
|
37
|
+
it("truncateText, getSentimentEmoji, formatNumber, extractTokenSymbol, stripHtml", () => {
|
|
38
|
+
expect(truncateText("short", 200)).toBe("short");
|
|
39
|
+
expect(truncateText("abcdef", 3)).toBe("abc...");
|
|
40
|
+
expect(getSentimentEmoji("positive")).toBe("😊");
|
|
41
|
+
expect(getSentimentEmoji("negative")).toBe("😟");
|
|
42
|
+
expect(getSentimentEmoji(undefined)).toBe("😐");
|
|
43
|
+
expect(formatNumber(1234567)).toBe("1,234,567");
|
|
44
|
+
expect(extractTokenSymbol("buy some WBTC now")).toBe("WBTC");
|
|
45
|
+
expect(extractTokenSymbol("nothing here")).toBeNull();
|
|
46
|
+
expect(stripHtml("<p>hi <b>there</b></p>")).toBe("hi there");
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe("isValidTokenAddress", () => {
|
|
51
|
+
it("accepts EVM + Solana shapes, rejects others", () => {
|
|
52
|
+
expect(isValidTokenAddress(`0x${"a".repeat(40)}`)).toBe(true);
|
|
53
|
+
expect(
|
|
54
|
+
isValidTokenAddress("So11111111111111111111111111111111111111112"),
|
|
55
|
+
).toBe(true);
|
|
56
|
+
expect(isValidTokenAddress("0x123")).toBe(false); // too short
|
|
57
|
+
expect(isValidTokenAddress(`0x${"g".repeat(40)}`)).toBe(false); // non-hex
|
|
58
|
+
expect(isValidTokenAddress("not an address")).toBe(false);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
Action,
|
|
3
2
|
ActionResult,
|
|
4
3
|
HandlerCallback,
|
|
5
4
|
HandlerOptions,
|
|
@@ -7,41 +6,8 @@ import type {
|
|
|
7
6
|
Memory,
|
|
8
7
|
State,
|
|
9
8
|
} from "@elizaos/core";
|
|
10
|
-
import { parseTokenInfoParams
|
|
9
|
+
import { parseTokenInfoParams } from "./params";
|
|
11
10
|
import { TOKEN_INFO_SERVICE_TYPE, type TokenInfoService } from "./service";
|
|
12
|
-
import { TOKEN_INFO_SUBACTIONS } from "./types";
|
|
13
|
-
|
|
14
|
-
const TOKEN_INFO_CONTEXTS = ["finance", "crypto", "wallet"] as const;
|
|
15
|
-
const TOKEN_INFO_KEYWORDS = [
|
|
16
|
-
"token",
|
|
17
|
-
"coin",
|
|
18
|
-
"crypto",
|
|
19
|
-
"dexscreener",
|
|
20
|
-
"birdeye",
|
|
21
|
-
"coingecko",
|
|
22
|
-
"price",
|
|
23
|
-
"pair",
|
|
24
|
-
"pairs",
|
|
25
|
-
"market cap",
|
|
26
|
-
"liquidity",
|
|
27
|
-
"trending",
|
|
28
|
-
"wallet",
|
|
29
|
-
"portfolio",
|
|
30
|
-
"boosted",
|
|
31
|
-
"profile",
|
|
32
|
-
] as const;
|
|
33
|
-
|
|
34
|
-
function hasTokenInfoIntent(message: Memory, state?: State): boolean {
|
|
35
|
-
const text = [
|
|
36
|
-
typeof message.content?.text === "string" ? message.content.text : "",
|
|
37
|
-
typeof state?.values?.recentMessages === "string"
|
|
38
|
-
? state.values.recentMessages
|
|
39
|
-
: "",
|
|
40
|
-
]
|
|
41
|
-
.join("\n")
|
|
42
|
-
.toLowerCase();
|
|
43
|
-
return TOKEN_INFO_KEYWORDS.some((keyword) => text.includes(keyword));
|
|
44
|
-
}
|
|
45
11
|
|
|
46
12
|
function unavailable(
|
|
47
13
|
callback: HandlerCallback | undefined,
|
|
@@ -49,7 +15,7 @@ function unavailable(
|
|
|
49
15
|
data: Record<string, unknown>,
|
|
50
16
|
): ActionResult {
|
|
51
17
|
const dataAsContent = data as Parameters<HandlerCallback>[0]["data"];
|
|
52
|
-
callback?.({ text, actions: ["
|
|
18
|
+
callback?.({ text, actions: ["WALLET"], data: dataAsContent });
|
|
53
19
|
return {
|
|
54
20
|
success: false,
|
|
55
21
|
text,
|
|
@@ -58,183 +24,57 @@ function unavailable(
|
|
|
58
24
|
};
|
|
59
25
|
}
|
|
60
26
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
],
|
|
81
|
-
description:
|
|
82
|
-
"Fetch crypto token and market information from registered providers. target selects provider (dexscreener, birdeye, coingecko). subaction selects search, token, trending, new-pairs, chain-pairs, boosted, profiles, or wallet.",
|
|
83
|
-
descriptionCompressed:
|
|
84
|
-
"Crypto token info provider registry: target dexscreener|birdeye|coingecko; subaction search|token|trending|new-pairs|chain-pairs|boosted|profiles|wallet.",
|
|
85
|
-
parameters: [
|
|
86
|
-
{
|
|
87
|
-
name: "target",
|
|
88
|
-
description:
|
|
89
|
-
"Provider to use. Omit to use the default provider for the subaction.",
|
|
90
|
-
required: false,
|
|
91
|
-
schema: { type: "string", enum: ["dexscreener", "birdeye", "coingecko"] },
|
|
92
|
-
examples: ["dexscreener", "birdeye", "coingecko"],
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
name: "subaction",
|
|
96
|
-
description: "Token information operation.",
|
|
97
|
-
required: true,
|
|
98
|
-
schema: { type: "string", enum: [...TOKEN_INFO_SUBACTIONS] },
|
|
99
|
-
examples: ["search", "token", "trending", "wallet"],
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: "query",
|
|
103
|
-
description:
|
|
104
|
-
"Search query, coin id, token symbol, token address, or wallet address.",
|
|
105
|
-
required: false,
|
|
106
|
-
schema: { type: "string" },
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
name: "address",
|
|
110
|
-
description: "Token or wallet address.",
|
|
111
|
-
required: false,
|
|
112
|
-
schema: { type: "string" },
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
name: "tokenAddress",
|
|
116
|
-
description: "Token contract address.",
|
|
117
|
-
required: false,
|
|
118
|
-
schema: { type: "string" },
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
name: "chain",
|
|
122
|
-
description:
|
|
123
|
-
"Chain/network for provider operations that need one, such as chain-pairs or CoinGecko contract lookup.",
|
|
124
|
-
required: false,
|
|
125
|
-
schema: { type: "string" },
|
|
126
|
-
examples: ["ethereum", "solana", "base"],
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
name: "timeframe",
|
|
130
|
-
description: "Trending window when supported.",
|
|
131
|
-
required: false,
|
|
132
|
-
schema: { type: "string", enum: ["1h", "6h", "24h"], default: "24h" },
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
name: "limit",
|
|
136
|
-
description: "Maximum result count.",
|
|
137
|
-
required: false,
|
|
138
|
-
schema: { type: "number", minimum: 1, maximum: 100, default: 10 },
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
name: "sortBy",
|
|
142
|
-
description: "Pair ranking metric for chain-pairs.",
|
|
143
|
-
required: false,
|
|
144
|
-
schema: {
|
|
145
|
-
type: "string",
|
|
146
|
-
enum: ["volume", "liquidity", "priceChange", "txns"],
|
|
147
|
-
},
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
name: "top",
|
|
151
|
-
description: "For boosted tokens, return top boosted rather than latest.",
|
|
152
|
-
required: false,
|
|
153
|
-
schema: { type: "boolean", default: false },
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
name: "id",
|
|
157
|
-
description: "CoinGecko coin id.",
|
|
158
|
-
required: false,
|
|
159
|
-
schema: { type: "string" },
|
|
160
|
-
},
|
|
161
|
-
],
|
|
162
|
-
validate: async (_runtime, message, state) =>
|
|
163
|
-
selectedContextMatches(state, TOKEN_INFO_CONTEXTS) ||
|
|
164
|
-
hasTokenInfoIntent(message, state),
|
|
165
|
-
handler: async (
|
|
166
|
-
runtime: IAgentRuntime,
|
|
167
|
-
message: Memory,
|
|
168
|
-
state?: State,
|
|
169
|
-
options?: HandlerOptions | Record<string, unknown>,
|
|
170
|
-
callback?: HandlerCallback,
|
|
171
|
-
): Promise<ActionResult> => {
|
|
172
|
-
const service = runtime.getService(
|
|
173
|
-
TOKEN_INFO_SERVICE_TYPE,
|
|
174
|
-
) as TokenInfoService | null;
|
|
175
|
-
if (!service || typeof service.route !== "function") {
|
|
176
|
-
return unavailable(callback, "Token info service is not available.", {
|
|
177
|
-
actionName: "TOKEN_INFO",
|
|
178
|
-
error: "SERVICE_UNAVAILABLE",
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const params = parseTokenInfoParams(message, state, options);
|
|
183
|
-
const routed = await service.route({
|
|
184
|
-
runtime,
|
|
185
|
-
message,
|
|
186
|
-
state,
|
|
187
|
-
options,
|
|
188
|
-
params,
|
|
189
|
-
callback,
|
|
27
|
+
/**
|
|
28
|
+
* Folded into WALLET as `action=token_info`. Routes token-info queries through
|
|
29
|
+
* the registered TokenInfoService providers (DexScreener, Birdeye, CoinGecko).
|
|
30
|
+
*/
|
|
31
|
+
export async function tokenInfoHandler(
|
|
32
|
+
runtime: IAgentRuntime,
|
|
33
|
+
message: Memory,
|
|
34
|
+
state?: State,
|
|
35
|
+
options?: HandlerOptions | Record<string, unknown>,
|
|
36
|
+
callback?: HandlerCallback,
|
|
37
|
+
): Promise<ActionResult> {
|
|
38
|
+
const service = runtime.getService(
|
|
39
|
+
TOKEN_INFO_SERVICE_TYPE,
|
|
40
|
+
) as TokenInfoService | null;
|
|
41
|
+
if (!service || typeof service.route !== "function") {
|
|
42
|
+
return unavailable(callback, "Token info service is not available.", {
|
|
43
|
+
actionName: "WALLET",
|
|
44
|
+
subaction: "token_info",
|
|
45
|
+
error: "SERVICE_UNAVAILABLE",
|
|
190
46
|
});
|
|
47
|
+
}
|
|
191
48
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
},
|
|
202
|
-
};
|
|
203
|
-
}
|
|
49
|
+
const params = parseTokenInfoParams(message, state, options);
|
|
50
|
+
const routed = await service.route({
|
|
51
|
+
runtime,
|
|
52
|
+
message,
|
|
53
|
+
state,
|
|
54
|
+
options,
|
|
55
|
+
params,
|
|
56
|
+
callback,
|
|
57
|
+
});
|
|
204
58
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
name: "{{user1}}",
|
|
216
|
-
content: { text: "Search for PEPE on DexScreener" },
|
|
59
|
+
if (routed.ok) {
|
|
60
|
+
const result = routed.result;
|
|
61
|
+
return {
|
|
62
|
+
...result,
|
|
63
|
+
data: {
|
|
64
|
+
...(result.data ?? {}),
|
|
65
|
+
actionName: "WALLET",
|
|
66
|
+
subaction: "token_info",
|
|
67
|
+
target: routed.provider.name,
|
|
68
|
+
supportedProviders: service.listProviders(),
|
|
217
69
|
},
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
content: { text: "Look up bitcoin on CoinGecko" },
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
name: "{{agent}}",
|
|
233
|
-
content: {
|
|
234
|
-
text: "Looking up Bitcoin on CoinGecko.",
|
|
235
|
-
action: "TOKEN_INFO",
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
],
|
|
239
|
-
],
|
|
240
|
-
};
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return unavailable(callback, routed.detail, {
|
|
74
|
+
actionName: "WALLET",
|
|
75
|
+
subaction: "token_info",
|
|
76
|
+
error: routed.error,
|
|
77
|
+
detail: routed.detail,
|
|
78
|
+
providers: routed.providers,
|
|
79
|
+
});
|
|
80
|
+
}
|