@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,20 +1,33 @@
|
|
|
1
|
-
// @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
|
|
2
1
|
import type { IAgentRuntime, Memory, Provider, State } from "@elizaos/core";
|
|
2
|
+
import { sanitizeWalletDisplayLabel } from "../../../security/wallet-context-safety.js";
|
|
3
3
|
import { BIRDEYE_SERVICE_NAME } from "../constants";
|
|
4
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
WalletPortfolioResponse,
|
|
6
|
+
WalletTransactionHistoryResponse,
|
|
7
|
+
} from "../types/api/wallet";
|
|
8
|
+
import type {
|
|
9
|
+
BirdeyeSupportedChain,
|
|
10
|
+
GetCacheTimedOptions,
|
|
11
|
+
} from "../types/shared";
|
|
5
12
|
import { extractChain, formatJsonScalar, formatJsonTable } from "../utils";
|
|
6
13
|
|
|
14
|
+
type PortfolioData = WalletPortfolioResponse["data"];
|
|
15
|
+
type WalletTransaction =
|
|
16
|
+
WalletTransactionHistoryResponse["data"][string][number];
|
|
17
|
+
type PortfolioResult = PortfolioData | false;
|
|
18
|
+
type TradesResult = WalletTransaction[] | false | undefined;
|
|
19
|
+
|
|
7
20
|
type PortfolioService = {
|
|
8
|
-
fetchWalletTokenList
|
|
9
|
-
chain:
|
|
21
|
+
fetchWalletTokenList: (
|
|
22
|
+
chain: BirdeyeSupportedChain,
|
|
10
23
|
walletAddr: string,
|
|
11
|
-
opts:
|
|
12
|
-
) => Promise<
|
|
24
|
+
opts: GetCacheTimedOptions,
|
|
25
|
+
) => Promise<PortfolioResult>;
|
|
13
26
|
fetchWalletTxList?: (
|
|
14
|
-
chain:
|
|
27
|
+
chain: BirdeyeSupportedChain,
|
|
15
28
|
walletAddr: string,
|
|
16
|
-
opts:
|
|
17
|
-
) => Promise<
|
|
29
|
+
opts: GetCacheTimedOptions,
|
|
30
|
+
) => Promise<WalletTransaction[] | false>;
|
|
18
31
|
};
|
|
19
32
|
|
|
20
33
|
export interface BirdeyePortfolioProviderOptions {
|
|
@@ -32,22 +45,43 @@ function statusJson(name: string, status: string, reason: string): string {
|
|
|
32
45
|
].join("\n");
|
|
33
46
|
}
|
|
34
47
|
|
|
35
|
-
function
|
|
36
|
-
|
|
37
|
-
|
|
48
|
+
function settingAsString(value: unknown): string | undefined {
|
|
49
|
+
return typeof value === "string" && value.trim().length > 0
|
|
50
|
+
? value
|
|
51
|
+
: undefined;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
55
|
+
return typeof value === "object" && value !== null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function hasPortfolioItems(value: unknown): value is PortfolioData {
|
|
59
|
+
return isRecord(value) && Array.isArray(value.items);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function normalizePortfolioResponse(
|
|
63
|
+
response: PortfolioData | WalletPortfolioResponse | false | undefined,
|
|
64
|
+
): PortfolioData {
|
|
65
|
+
const wrappedData =
|
|
66
|
+
isRecord(response) && "data" in response ? response.data : undefined;
|
|
67
|
+
if (hasPortfolioItems(wrappedData)) {
|
|
68
|
+
return wrappedData;
|
|
38
69
|
}
|
|
39
|
-
|
|
70
|
+
if (hasPortfolioItems(response)) {
|
|
71
|
+
return response;
|
|
72
|
+
}
|
|
73
|
+
return { items: [] };
|
|
40
74
|
}
|
|
41
75
|
|
|
42
76
|
export const formatPortfolio = (response: WalletPortfolioResponse) => {
|
|
43
77
|
const portfolio = normalizePortfolioResponse(response);
|
|
44
|
-
const items = portfolio.items
|
|
78
|
+
const items = portfolio.items;
|
|
45
79
|
if (!items.length) return "holdings[0]: []";
|
|
46
80
|
|
|
47
81
|
return formatJsonTable(
|
|
48
82
|
"holdings",
|
|
49
83
|
items.map((item) => ({
|
|
50
|
-
symbol: item.symbol || "unknown",
|
|
84
|
+
symbol: sanitizeWalletDisplayLabel(item.symbol || "unknown"),
|
|
51
85
|
address: item.address || "unknown",
|
|
52
86
|
amount:
|
|
53
87
|
typeof item.uiAmount === "number"
|
|
@@ -75,11 +109,12 @@ function formatPortfolioProviderText({
|
|
|
75
109
|
}: {
|
|
76
110
|
wallet: string;
|
|
77
111
|
chain: string;
|
|
78
|
-
portfolio:
|
|
79
|
-
trades?:
|
|
112
|
+
portfolio: PortfolioResult;
|
|
113
|
+
trades?: TradesResult;
|
|
80
114
|
}): string {
|
|
81
115
|
const normalized = normalizePortfolioResponse(portfolio);
|
|
82
|
-
const holdings = normalized.items
|
|
116
|
+
const holdings = normalized.items;
|
|
117
|
+
const tradeRows = Array.isArray(trades) ? trades : undefined;
|
|
83
118
|
const lines = [
|
|
84
119
|
"birdeye_wallet_portfolio:",
|
|
85
120
|
" status: ok",
|
|
@@ -89,7 +124,7 @@ function formatPortfolioProviderText({
|
|
|
89
124
|
formatJsonTable(
|
|
90
125
|
" holdings",
|
|
91
126
|
holdings.slice(0, 20).map((item) => ({
|
|
92
|
-
symbol: item.symbol || "unknown",
|
|
127
|
+
symbol: sanitizeWalletDisplayLabel(item.symbol || "unknown"),
|
|
93
128
|
address: item.address || "unknown",
|
|
94
129
|
amount:
|
|
95
130
|
typeof item.uiAmount === "number"
|
|
@@ -109,12 +144,12 @@ function formatPortfolioProviderText({
|
|
|
109
144
|
),
|
|
110
145
|
];
|
|
111
146
|
|
|
112
|
-
if (
|
|
113
|
-
lines.push(` tradeCount: ${
|
|
147
|
+
if (tradeRows) {
|
|
148
|
+
lines.push(` tradeCount: ${tradeRows.length}`);
|
|
114
149
|
lines.push(
|
|
115
150
|
formatJsonTable(
|
|
116
151
|
" trades",
|
|
117
|
-
|
|
152
|
+
tradeRows.slice(0, 10).map((trade) => ({
|
|
118
153
|
txHash: trade.txHash ?? "unknown",
|
|
119
154
|
action: trade.mainAction ?? "unknown",
|
|
120
155
|
status: trade.status ?? "unknown",
|
|
@@ -135,7 +170,7 @@ function getPortfolioService(
|
|
|
135
170
|
includeTrades: boolean,
|
|
136
171
|
): PortfolioService | undefined {
|
|
137
172
|
const beService = runtime.getService(BIRDEYE_SERVICE_NAME) as
|
|
138
|
-
| PortfolioService
|
|
173
|
+
| Partial<PortfolioService>
|
|
139
174
|
| undefined;
|
|
140
175
|
if (!beService || typeof beService.fetchWalletTokenList !== "function") {
|
|
141
176
|
return undefined;
|
|
@@ -143,7 +178,10 @@ function getPortfolioService(
|
|
|
143
178
|
if (includeTrades && typeof beService.fetchWalletTxList !== "function") {
|
|
144
179
|
return undefined;
|
|
145
180
|
}
|
|
146
|
-
return
|
|
181
|
+
return {
|
|
182
|
+
fetchWalletTokenList: beService.fetchWalletTokenList,
|
|
183
|
+
fetchWalletTxList: beService.fetchWalletTxList,
|
|
184
|
+
};
|
|
147
185
|
}
|
|
148
186
|
|
|
149
187
|
export function createBirdeyePortfolioProvider(
|
|
@@ -160,13 +198,13 @@ export function createBirdeyePortfolioProvider(
|
|
|
160
198
|
cacheStable: false,
|
|
161
199
|
cacheScope: "turn",
|
|
162
200
|
roleGate: { minRole: "OWNER" },
|
|
163
|
-
get: async (runtime: IAgentRuntime, _message: Memory, _state
|
|
201
|
+
get: async (runtime: IAgentRuntime, _message: Memory, _state: State) => {
|
|
164
202
|
try {
|
|
165
|
-
const walletAddr =
|
|
203
|
+
const walletAddr = settingAsString(
|
|
204
|
+
runtime.getSetting("BIRDEYE_WALLET_ADDR"),
|
|
205
|
+
);
|
|
166
206
|
if (!walletAddr) {
|
|
167
|
-
runtime.logger
|
|
168
|
-
"BIRDEYE_WALLET_ADDR setting is not configured",
|
|
169
|
-
);
|
|
207
|
+
runtime.logger.error("BIRDEYE_WALLET_ADDR setting is not configured");
|
|
170
208
|
return {
|
|
171
209
|
values: {},
|
|
172
210
|
text: statusJson(
|
|
@@ -178,11 +216,13 @@ export function createBirdeyePortfolioProvider(
|
|
|
178
216
|
};
|
|
179
217
|
}
|
|
180
218
|
|
|
181
|
-
const explicitChain =
|
|
219
|
+
const explicitChain = settingAsString(
|
|
220
|
+
runtime.getSetting("BIRDEYE_CHAIN"),
|
|
221
|
+
);
|
|
182
222
|
const chain = extractChain(walletAddr, explicitChain);
|
|
183
223
|
const beService = getPortfolioService(runtime, includeTrades);
|
|
184
224
|
if (!beService) {
|
|
185
|
-
runtime.logger
|
|
225
|
+
runtime.logger.error(
|
|
186
226
|
"Birdeye service is unavailable or missing required portfolio methods",
|
|
187
227
|
);
|
|
188
228
|
return {
|
|
@@ -203,18 +243,19 @@ export function createBirdeyePortfolioProvider(
|
|
|
203
243
|
walletAddr,
|
|
204
244
|
{ notOlderThan: 30 * 1000 },
|
|
205
245
|
);
|
|
206
|
-
const tradesPromise =
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
246
|
+
const tradesPromise: Promise<TradesResult> =
|
|
247
|
+
includeTrades && beService.fetchWalletTxList
|
|
248
|
+
? beService.fetchWalletTxList(chain, walletAddr, {
|
|
249
|
+
notOlderThan: 30 * 1000,
|
|
250
|
+
})
|
|
251
|
+
: Promise.resolve(undefined);
|
|
211
252
|
const [portfolio, trades] = await Promise.all([
|
|
212
253
|
portfolioPromise,
|
|
213
254
|
tradesPromise,
|
|
214
255
|
]);
|
|
215
256
|
|
|
216
257
|
return {
|
|
217
|
-
data: includeTrades ? { portfolio, trades } : portfolio,
|
|
258
|
+
data: includeTrades ? { portfolio, trades } : { portfolio },
|
|
218
259
|
values: {},
|
|
219
260
|
text: formatPortfolioProviderText({
|
|
220
261
|
wallet: walletAddr,
|
|
@@ -226,7 +267,7 @@ export function createBirdeyePortfolioProvider(
|
|
|
226
267
|
} catch (error) {
|
|
227
268
|
const errorMessage =
|
|
228
269
|
error instanceof Error ? error.message : String(error);
|
|
229
|
-
runtime.logger
|
|
270
|
+
runtime.logger.error(
|
|
230
271
|
`Error fetching Birdeye portfolio: ${errorMessage}`,
|
|
231
272
|
);
|
|
232
273
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
|
|
2
1
|
import type { IAgentRuntime, Memory, Provider, State } from "@elizaos/core";
|
|
3
2
|
import { formatJsonScalar, formatJsonTable } from "../utils";
|
|
4
3
|
|
|
@@ -13,6 +12,28 @@ interface TrendingToken {
|
|
|
13
12
|
liquidity: number;
|
|
14
13
|
}
|
|
15
14
|
|
|
15
|
+
type SupplyMap = Record<
|
|
16
|
+
string,
|
|
17
|
+
{
|
|
18
|
+
human?: {
|
|
19
|
+
multipliedBy: (n: number) => {
|
|
20
|
+
toFixed: (p: number) => string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
>;
|
|
25
|
+
|
|
26
|
+
type TrendingRow = {
|
|
27
|
+
chain: string;
|
|
28
|
+
address: string;
|
|
29
|
+
symbol: string;
|
|
30
|
+
priceUsd: string;
|
|
31
|
+
marketCapUsd: string;
|
|
32
|
+
volume24hUsd: string;
|
|
33
|
+
change24hPct: string;
|
|
34
|
+
liquidityUsd: string;
|
|
35
|
+
};
|
|
36
|
+
|
|
16
37
|
export async function getCacheTimed<T>(
|
|
17
38
|
runtime: IAgentRuntime,
|
|
18
39
|
key: string,
|
|
@@ -35,12 +56,6 @@ export async function getCacheTimed<T>(
|
|
|
35
56
|
/**
|
|
36
57
|
* Provider for Birdeye trending coins
|
|
37
58
|
*
|
|
38
|
-
* @typedef {import('./Provider').Provider} Provider
|
|
39
|
-
* @typedef {import('./Runtime').IAgentRuntime} IAgentRuntime
|
|
40
|
-
* @typedef {import('./Memory').Memory} Memory
|
|
41
|
-
* @typedef {import('./State').State} State
|
|
42
|
-
* @typedef {import('./Action').Action} Action
|
|
43
|
-
*
|
|
44
59
|
* @type {Provider}
|
|
45
60
|
* @property {string} name - The name of the provider
|
|
46
61
|
* @property {string} description - Description of the provider
|
|
@@ -65,7 +80,7 @@ export const trendingProvider: Provider = {
|
|
|
65
80
|
//position: -1,
|
|
66
81
|
get: async (runtime: IAgentRuntime, _message: Memory, _state: State) => {
|
|
67
82
|
try {
|
|
68
|
-
runtime.logger
|
|
83
|
+
runtime.logger.log("birdeye:provider:trending - get birdeye");
|
|
69
84
|
// Get all sentiments
|
|
70
85
|
|
|
71
86
|
/*
|
|
@@ -81,7 +96,7 @@ export const trendingProvider: Provider = {
|
|
|
81
96
|
setAt: number;
|
|
82
97
|
}>("tokens_v2_solana");
|
|
83
98
|
if (!solanaCache?.data) {
|
|
84
|
-
runtime.logger
|
|
99
|
+
runtime.logger.warn(
|
|
85
100
|
"birdeye:provider:trending - no birdeye token data found",
|
|
86
101
|
);
|
|
87
102
|
return {
|
|
@@ -97,7 +112,7 @@ export const trendingProvider: Provider = {
|
|
|
97
112
|
const solanaTokens = solanaCache.data;
|
|
98
113
|
//console.log('intel:provider - birdeye data', tokens)
|
|
99
114
|
if (!solanaTokens.length) {
|
|
100
|
-
runtime.logger
|
|
115
|
+
runtime.logger.warn(
|
|
101
116
|
"birdeye:provider:trending - no birdeye token data found",
|
|
102
117
|
);
|
|
103
118
|
return {
|
|
@@ -129,26 +144,15 @@ export const trendingProvider: Provider = {
|
|
|
129
144
|
price24hChangePercent: 1.17760374,
|
|
130
145
|
*/
|
|
131
146
|
|
|
132
|
-
const rows = [];
|
|
147
|
+
const rows: TrendingRow[] = [];
|
|
133
148
|
|
|
134
149
|
const solanaService = runtime.getService("chain_solana") as
|
|
135
150
|
| {
|
|
136
|
-
getSupply?: (addresses: string[]) => Promise<
|
|
137
|
-
Record<
|
|
138
|
-
string,
|
|
139
|
-
{
|
|
140
|
-
human?: {
|
|
141
|
-
multipliedBy: (n: number) => {
|
|
142
|
-
toFixed: (p: number) => string;
|
|
143
|
-
};
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
>
|
|
147
|
-
>;
|
|
151
|
+
getSupply?: (addresses: string[]) => Promise<SupplyMap>;
|
|
148
152
|
}
|
|
149
153
|
| undefined;
|
|
150
154
|
if (!solanaService) {
|
|
151
|
-
runtime.logger
|
|
155
|
+
runtime.logger.warn(
|
|
152
156
|
"no chain_solana service found - market cap calculation will be skipped for Solana tokens",
|
|
153
157
|
);
|
|
154
158
|
}
|
|
@@ -157,20 +161,13 @@ export const trendingProvider: Provider = {
|
|
|
157
161
|
let tokens = [...topSolanaTokens];
|
|
158
162
|
|
|
159
163
|
// Try to get supply data if solanaService is available
|
|
160
|
-
let supplies:
|
|
161
|
-
|
|
162
|
-
{
|
|
163
|
-
human?: {
|
|
164
|
-
multipliedBy: (n: number) => { toFixed: (p: number) => string };
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
> = {};
|
|
168
|
-
if (solanaService) {
|
|
164
|
+
let supplies: SupplyMap = {};
|
|
165
|
+
if (solanaService && typeof solanaService.getSupply === "function") {
|
|
169
166
|
try {
|
|
170
167
|
const CAs = topSolanaTokens.map((t) => t.address);
|
|
171
168
|
supplies = await solanaService.getSupply(CAs);
|
|
172
169
|
} catch (error) {
|
|
173
|
-
runtime.logger
|
|
170
|
+
runtime.logger.warn(
|
|
174
171
|
`Failed to get supply data from Solana service: ${error instanceof Error ? error.message : String(error)}`,
|
|
175
172
|
);
|
|
176
173
|
}
|
|
@@ -187,14 +184,14 @@ export const trendingProvider: Provider = {
|
|
|
187
184
|
|
|
188
185
|
// Damnatio memoriae
|
|
189
186
|
if (rugCache && rugCache === "rug") {
|
|
190
|
-
runtime.logger
|
|
187
|
+
runtime.logger.log("omitting", token.address, "because in rugCache");
|
|
191
188
|
continue;
|
|
192
189
|
}
|
|
193
190
|
|
|
194
191
|
// Calculate market cap if supply data is available
|
|
195
192
|
let mcapValue = "?";
|
|
196
|
-
|
|
197
|
-
|
|
193
|
+
const supply = supplies[token.address]?.human;
|
|
194
|
+
if (supply) {
|
|
198
195
|
const mcap = supply.multipliedBy(token.price);
|
|
199
196
|
mcapValue = mcap.toFixed(0);
|
|
200
197
|
//console.log('Hum supply', supply.toFormat(), 'price', token.price, 'mcap', mcap.toFormat(2))
|
|
@@ -238,11 +235,11 @@ export const trendingProvider: Provider = {
|
|
|
238
235
|
chain: "ethereum",
|
|
239
236
|
address: token.address,
|
|
240
237
|
symbol: token.symbol,
|
|
241
|
-
priceUsd: token.price
|
|
238
|
+
priceUsd: token.price.toFixed(4) || "0",
|
|
242
239
|
marketCapUsd: "unknown",
|
|
243
|
-
volume24hUsd: token.volume24hUSD
|
|
244
|
-
change24hPct: token.price24hChangePercent
|
|
245
|
-
liquidityUsd: token.liquidity
|
|
240
|
+
volume24hUsd: token.volume24hUSD.toFixed(0) || "0",
|
|
241
|
+
change24hPct: token.price24hChangePercent.toFixed(2) || "0",
|
|
242
|
+
liquidityUsd: token.liquidity.toFixed(2) || "0",
|
|
246
243
|
});
|
|
247
244
|
}
|
|
248
245
|
}
|
|
@@ -271,11 +268,11 @@ export const trendingProvider: Provider = {
|
|
|
271
268
|
chain: "base",
|
|
272
269
|
address: token.address,
|
|
273
270
|
symbol: token.symbol,
|
|
274
|
-
priceUsd: token.price
|
|
271
|
+
priceUsd: token.price.toFixed(4) || "0",
|
|
275
272
|
marketCapUsd: "unknown",
|
|
276
|
-
volume24hUsd: token.volume24hUSD
|
|
277
|
-
change24hPct: token.price24hChangePercent
|
|
278
|
-
liquidityUsd: token.liquidity
|
|
273
|
+
volume24hUsd: token.volume24hUSD.toFixed(0) || "0",
|
|
274
|
+
change24hPct: token.price24hChangePercent.toFixed(2) || "0",
|
|
275
|
+
liquidityUsd: token.liquidity.toFixed(2) || "0",
|
|
279
276
|
});
|
|
280
277
|
}
|
|
281
278
|
}
|
|
@@ -348,7 +345,7 @@ export const trendingProvider: Provider = {
|
|
|
348
345
|
text,
|
|
349
346
|
};
|
|
350
347
|
} catch (error) {
|
|
351
|
-
runtime.logger
|
|
348
|
+
runtime.logger.error(
|
|
352
349
|
`Error fetching trending data: ${error instanceof Error ? error.message : String(error)}`,
|
|
353
350
|
);
|
|
354
351
|
return {
|
|
@@ -42,7 +42,7 @@ function createRuntime() {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
describe("Birdeye search categories", () => {
|
|
45
|
-
it("registers one
|
|
45
|
+
it("registers one token intel search category", () => {
|
|
46
46
|
const { categories, registerSearchCategory, runtime } = createRuntime();
|
|
47
47
|
|
|
48
48
|
registerBirdeyeSearchCategories(runtime);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
// @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
|
|
2
1
|
import type { IAgentRuntime, SearchCategoryRegistration } from "@elizaos/core";
|
|
3
2
|
import { BirdeyeProvider } from "./birdeye";
|
|
4
3
|
import { BIRDEYE_SERVICE_NAME } from "./constants";
|
|
4
|
+
import type { TokenMarketSearchParams, TokenResult } from "./types/api/search";
|
|
5
5
|
import type {
|
|
6
6
|
TokenMarketDataResponse,
|
|
7
7
|
TokenOverviewResponse,
|
|
@@ -186,7 +186,7 @@ type BirdeyeTokenAddressSearchResult = {
|
|
|
186
186
|
|
|
187
187
|
type BirdeyeTokenSymbolSearchResult = {
|
|
188
188
|
symbol: string;
|
|
189
|
-
tokens:
|
|
189
|
+
tokens: TokenResult[];
|
|
190
190
|
};
|
|
191
191
|
|
|
192
192
|
type BirdeyeTokenSearchProvider = Pick<
|
|
@@ -215,7 +215,7 @@ export function registerBirdeyeSearchCategories(
|
|
|
215
215
|
options: BirdeyeSearchCategoryOptions = {},
|
|
216
216
|
): void {
|
|
217
217
|
if (typeof runtime.registerSearchCategory !== "function") {
|
|
218
|
-
runtime.logger
|
|
218
|
+
runtime.logger.warn(
|
|
219
219
|
"Birdeye search category registry is unavailable; token search metadata was not registered",
|
|
220
220
|
);
|
|
221
221
|
return;
|
|
@@ -247,6 +247,71 @@ function normalizeLimit(value: unknown): number {
|
|
|
247
247
|
return Math.max(1, Math.min(25, limit));
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
+
function asTokenSearchChain(value: unknown): TokenMarketSearchParams["chain"] {
|
|
251
|
+
switch (value) {
|
|
252
|
+
case "all":
|
|
253
|
+
case "solana":
|
|
254
|
+
case "ethereum":
|
|
255
|
+
case "arbitrum":
|
|
256
|
+
case "avalanche":
|
|
257
|
+
case "bsc":
|
|
258
|
+
case "optimism":
|
|
259
|
+
case "polygon":
|
|
260
|
+
case "base":
|
|
261
|
+
case "zksync":
|
|
262
|
+
case "sui":
|
|
263
|
+
case "evm":
|
|
264
|
+
return value;
|
|
265
|
+
default:
|
|
266
|
+
return "all";
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function asTokenSearchTarget(
|
|
271
|
+
value: unknown,
|
|
272
|
+
): TokenMarketSearchParams["target"] {
|
|
273
|
+
return value === "market" || value === "all" ? value : "token";
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
function asTokenSearchSortBy(
|
|
277
|
+
value: unknown,
|
|
278
|
+
): TokenMarketSearchParams["sort_by"] {
|
|
279
|
+
switch (value) {
|
|
280
|
+
case "fdv":
|
|
281
|
+
case "marketcap":
|
|
282
|
+
case "liquidity":
|
|
283
|
+
case "price":
|
|
284
|
+
case "price_change_24h_percent":
|
|
285
|
+
case "trade_24h":
|
|
286
|
+
case "trade_24h_change_percent":
|
|
287
|
+
case "buy_24h":
|
|
288
|
+
case "buy_24h_change_percent":
|
|
289
|
+
case "sell_24h":
|
|
290
|
+
case "sell_24h_change_percent":
|
|
291
|
+
case "unique_wallet_24h":
|
|
292
|
+
case "unique_view_24h_change_percent":
|
|
293
|
+
case "last_trade_unix_time":
|
|
294
|
+
case "volume_24h_usd":
|
|
295
|
+
case "volume_24h_change_percent":
|
|
296
|
+
return value;
|
|
297
|
+
default:
|
|
298
|
+
return "volume_24h_usd";
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function asSortType(value: unknown): TokenMarketSearchParams["sort_type"] {
|
|
303
|
+
return value === "asc" ? "asc" : "desc";
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
function isTokenResult(token: unknown): token is TokenResult {
|
|
307
|
+
return (
|
|
308
|
+
typeof token === "object" &&
|
|
309
|
+
token !== null &&
|
|
310
|
+
"symbol" in token &&
|
|
311
|
+
"address" in token
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
|
|
250
315
|
function filterBool(
|
|
251
316
|
filters: Record<string, unknown>,
|
|
252
317
|
key: string,
|
|
@@ -296,12 +361,10 @@ async function searchTokensBySymbol(
|
|
|
296
361
|
limit: number,
|
|
297
362
|
): Promise<BirdeyeTokenSymbolSearchResult[]> {
|
|
298
363
|
const symbols = normalizeSymbolQuery(query);
|
|
299
|
-
const chain =
|
|
300
|
-
const target =
|
|
301
|
-
const sortBy =
|
|
302
|
-
|
|
303
|
-
const sortType =
|
|
304
|
-
typeof filters.sort_type === "string" ? filters.sort_type : "desc";
|
|
364
|
+
const chain = asTokenSearchChain(filters.chain);
|
|
365
|
+
const target = asTokenSearchTarget(filters.target);
|
|
366
|
+
const sortBy = asTokenSearchSortBy(filters.sort_by);
|
|
367
|
+
const sortType = asSortType(filters.sort_type);
|
|
305
368
|
|
|
306
369
|
const results = await Promise.all(
|
|
307
370
|
symbols.map(async (symbol) => {
|
|
@@ -319,11 +382,13 @@ async function searchTokensBySymbol(
|
|
|
319
382
|
markets:
|
|
320
383
|
typeof filters.markets === "string" ? filters.markets : undefined,
|
|
321
384
|
});
|
|
322
|
-
const tokens =
|
|
385
|
+
const tokens = response.data.items
|
|
323
386
|
.filter((item) => item.type === "token" && item.result)
|
|
324
387
|
.flatMap((item) => item.result)
|
|
325
388
|
.filter(
|
|
326
|
-
(token)
|
|
389
|
+
(token): token is TokenResult =>
|
|
390
|
+
isTokenResult(token) &&
|
|
391
|
+
token.symbol?.toLowerCase?.() === symbol.toLowerCase(),
|
|
327
392
|
)
|
|
328
393
|
.slice(0, limit);
|
|
329
394
|
return { symbol, tokens };
|
|
@@ -464,7 +529,7 @@ export async function searchBirdeyeTokens(
|
|
|
464
529
|
request: BirdeyeTokenSearchRequest,
|
|
465
530
|
provider: BirdeyeTokenSearchProvider = new BirdeyeProvider(runtime),
|
|
466
531
|
) {
|
|
467
|
-
const query = String(request.query
|
|
532
|
+
const query = String(request.query).trim();
|
|
468
533
|
const filters = request.filters ?? {};
|
|
469
534
|
const requestedMode = normalizeMode(request.mode ?? filters.mode);
|
|
470
535
|
const mode = inferMode(query, requestedMode);
|