@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
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Memory } from "@elizaos/core";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import {
|
|
4
|
+
inferTokenInfoSubaction,
|
|
5
|
+
normalizeTokenInfoSubaction,
|
|
6
|
+
readBooleanParam,
|
|
7
|
+
readNumberParam,
|
|
8
|
+
readParams,
|
|
9
|
+
readStringParam,
|
|
10
|
+
} from "./params.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Token-info param parsing turns loose agent options + free text into a typed
|
|
14
|
+
* query. Param readers coerce/trim and reject junk; subaction normalization
|
|
15
|
+
* canonicalizes labels; and intent inference routes a message to the right
|
|
16
|
+
* read-only lookup.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const msg = (text: string): Memory =>
|
|
20
|
+
({ content: { text } }) as unknown as Memory;
|
|
21
|
+
|
|
22
|
+
describe("param readers", () => {
|
|
23
|
+
it("readParams merges nested `parameters` over the top-level bag", () => {
|
|
24
|
+
expect(readParams({ a: 1, parameters: { b: 2 } })).toMatchObject({
|
|
25
|
+
a: 1,
|
|
26
|
+
b: 2,
|
|
27
|
+
});
|
|
28
|
+
expect(readParams(undefined)).toEqual({});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("readStringParam trims, scans keys, ignores empties", () => {
|
|
32
|
+
expect(readStringParam({ q: " hi " }, "q")).toBe("hi");
|
|
33
|
+
expect(readStringParam({ q: "" }, "q")).toBeUndefined();
|
|
34
|
+
expect(readStringParam({ parameters: { x: "yo" } }, "q", "x")).toBe("yo");
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("readNumberParam coerces, falls back; readBooleanParam reads keywords", () => {
|
|
38
|
+
expect(readNumberParam({ n: 5 }, "n")).toBe(5);
|
|
39
|
+
expect(readNumberParam({ n: "7" }, "n")).toBe(7);
|
|
40
|
+
expect(readNumberParam({ n: "x" }, "n", 3)).toBe(3);
|
|
41
|
+
expect(readBooleanParam({ b: "yes" }, "b")).toBe(true);
|
|
42
|
+
expect(readBooleanParam({ b: "no" }, "b")).toBe(false);
|
|
43
|
+
expect(readBooleanParam({ b: "maybe" }, "b")).toBeUndefined();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe("normalizeTokenInfoSubaction", () => {
|
|
48
|
+
it("canonicalizes spacing/case to known subactions", () => {
|
|
49
|
+
expect(normalizeTokenInfoSubaction("wallet")).toBe("wallet");
|
|
50
|
+
expect(normalizeTokenInfoSubaction("New Pairs")).toBe("new_pairs");
|
|
51
|
+
expect(normalizeTokenInfoSubaction("chain pairs")).toBe("chain_pairs");
|
|
52
|
+
expect(normalizeTokenInfoSubaction(42)).toBeUndefined();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
describe("inferTokenInfoSubaction", () => {
|
|
57
|
+
it("routes by message intent, defaults to token", () => {
|
|
58
|
+
expect(inferTokenInfoSubaction(msg("show my wallet holdings"))).toBe(
|
|
59
|
+
"wallet",
|
|
60
|
+
);
|
|
61
|
+
expect(inferTokenInfoSubaction(msg("what's trending right now"))).toBe(
|
|
62
|
+
"trending",
|
|
63
|
+
);
|
|
64
|
+
expect(inferTokenInfoSubaction(msg("search for pepe"))).toBe("search");
|
|
65
|
+
expect(inferTokenInfoSubaction(msg("tell me about this coin"))).toBe(
|
|
66
|
+
"token",
|
|
67
|
+
);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -10,11 +10,13 @@ const SUBACTION_ALIASES: Record<string, TokenInfoSubaction> = {
|
|
|
10
10
|
info: "token",
|
|
11
11
|
"token-info": "token",
|
|
12
12
|
token_info: "token",
|
|
13
|
-
pairs: "
|
|
14
|
-
"new pairs": "
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
pairs: "chain_pairs",
|
|
14
|
+
"new pairs": "new_pairs",
|
|
15
|
+
"new-pairs": "new_pairs",
|
|
16
|
+
new_pairs: "new_pairs",
|
|
17
|
+
chain_pairs: "chain_pairs",
|
|
18
|
+
"chain-pairs": "chain_pairs",
|
|
19
|
+
chainpairs: "chain_pairs",
|
|
18
20
|
boosted_tokens: "boosted",
|
|
19
21
|
boostedtokens: "boosted",
|
|
20
22
|
token_profiles: "profiles",
|
|
@@ -86,7 +88,7 @@ export function normalizeTokenInfoSubaction(
|
|
|
86
88
|
const normalized = value
|
|
87
89
|
.trim()
|
|
88
90
|
.toLowerCase()
|
|
89
|
-
.replace(/[\
|
|
91
|
+
.replace(/[\s-]+/g, "_");
|
|
90
92
|
if ((TOKEN_INFO_SUBACTIONS as readonly string[]).includes(normalized)) {
|
|
91
93
|
return normalized as TokenInfoSubaction;
|
|
92
94
|
}
|
|
@@ -100,7 +102,7 @@ export function inferTokenInfoSubaction(
|
|
|
100
102
|
state?: State,
|
|
101
103
|
): TokenInfoSubaction {
|
|
102
104
|
const text = [
|
|
103
|
-
typeof message.content
|
|
105
|
+
typeof message.content.text === "string" ? message.content.text : "",
|
|
104
106
|
typeof state?.values?.recentMessages === "string"
|
|
105
107
|
? state.values.recentMessages
|
|
106
108
|
: "",
|
|
@@ -115,7 +117,7 @@ export function inferTokenInfoSubaction(
|
|
|
115
117
|
/\b(new|latest|fresh)\b/.test(text) &&
|
|
116
118
|
/\b(pair|pairs|tokens?)\b/.test(text)
|
|
117
119
|
) {
|
|
118
|
-
return "
|
|
120
|
+
return "new_pairs";
|
|
119
121
|
}
|
|
120
122
|
if (
|
|
121
123
|
/\b(pair|pairs)\b/.test(text) &&
|
|
@@ -123,7 +125,7 @@ export function inferTokenInfoSubaction(
|
|
|
123
125
|
text,
|
|
124
126
|
)
|
|
125
127
|
) {
|
|
126
|
-
return "
|
|
128
|
+
return "chain_pairs";
|
|
127
129
|
}
|
|
128
130
|
if (/\b(trending|hot|popular|gainers)\b/.test(text)) return "trending";
|
|
129
131
|
if (/\b(search|find|look for)\b/.test(text)) return "search";
|
|
@@ -137,10 +139,10 @@ export function parseTokenInfoParams(
|
|
|
137
139
|
): TokenInfoParams {
|
|
138
140
|
const raw = readParams(options);
|
|
139
141
|
const content =
|
|
140
|
-
typeof message.content
|
|
142
|
+
typeof message.content.text === "string" ? message.content.text : "";
|
|
141
143
|
const subaction =
|
|
142
144
|
normalizeTokenInfoSubaction(
|
|
143
|
-
raw.
|
|
145
|
+
raw.action ?? raw.subaction ?? raw.operation ?? raw.kind,
|
|
144
146
|
) ?? inferTokenInfoSubaction(message, state);
|
|
145
147
|
const target = readStringParam(raw, "target", "provider", "source");
|
|
146
148
|
const query =
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import type { ActionResult, IAgentRuntime } from "@elizaos/core";
|
|
1
|
+
import type { ActionResult, ContentValue, IAgentRuntime } from "@elizaos/core";
|
|
3
2
|
import { BirdeyeProvider } from "../birdeye/birdeye";
|
|
4
3
|
import { searchBirdeyeTokens } from "../birdeye/search-category";
|
|
5
4
|
import type { WalletPortfolioResponse } from "../birdeye/types/api/wallet";
|
|
@@ -34,6 +33,36 @@ function failure(
|
|
|
34
33
|
};
|
|
35
34
|
}
|
|
36
35
|
|
|
36
|
+
function toCallbackContentValue(value: unknown): ContentValue {
|
|
37
|
+
if (
|
|
38
|
+
value === null ||
|
|
39
|
+
value === undefined ||
|
|
40
|
+
typeof value === "string" ||
|
|
41
|
+
typeof value === "number" ||
|
|
42
|
+
typeof value === "boolean"
|
|
43
|
+
) {
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
if (typeof value === "bigint" || typeof value === "symbol") {
|
|
47
|
+
return String(value);
|
|
48
|
+
}
|
|
49
|
+
if (value instanceof Date) {
|
|
50
|
+
return value.toISOString();
|
|
51
|
+
}
|
|
52
|
+
if (Array.isArray(value)) {
|
|
53
|
+
return value.map((item) => toCallbackContentValue(item));
|
|
54
|
+
}
|
|
55
|
+
if (typeof value === "object") {
|
|
56
|
+
return Object.fromEntries(
|
|
57
|
+
Object.entries(value).map(([key, item]) => [
|
|
58
|
+
key,
|
|
59
|
+
toCallbackContentValue(item),
|
|
60
|
+
]),
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
|
|
37
66
|
async function emit(
|
|
38
67
|
context: TokenInfoDispatchContext,
|
|
39
68
|
result: ActionResult,
|
|
@@ -41,7 +70,7 @@ async function emit(
|
|
|
41
70
|
await context.callback?.({
|
|
42
71
|
text: result.text ?? "",
|
|
43
72
|
actions: ["TOKEN_INFO"],
|
|
44
|
-
data: result.data,
|
|
73
|
+
data: toCallbackContentValue(result.data),
|
|
45
74
|
});
|
|
46
75
|
return result;
|
|
47
76
|
}
|
|
@@ -68,7 +97,7 @@ function topPairs(
|
|
|
68
97
|
.slice(0, limit)
|
|
69
98
|
.map((pair, index) => {
|
|
70
99
|
const price = service.formatPrice(pair.priceUsd || pair.priceNative);
|
|
71
|
-
const volume = pair.volume
|
|
100
|
+
const volume = pair.volume.h24
|
|
72
101
|
? service.formatUsdValue(pair.volume.h24)
|
|
73
102
|
: "n/a";
|
|
74
103
|
const liquidity = pair.liquidity?.usd
|
|
@@ -161,8 +190,8 @@ async function executeDexScreener(
|
|
|
161
190
|
`${mainPair.baseToken.name} (${mainPair.baseToken.symbol})`,
|
|
162
191
|
`Address: ${mainPair.baseToken.address}`,
|
|
163
192
|
`Price: ${service.formatPrice(mainPair.priceUsd || mainPair.priceNative)}`,
|
|
164
|
-
`24h change: ${service.formatPriceChange(mainPair.priceChange
|
|
165
|
-
`24h volume: ${service.formatUsdValue(mainPair.volume
|
|
193
|
+
`24h change: ${service.formatPriceChange(mainPair.priceChange.h24)}`,
|
|
194
|
+
`24h volume: ${service.formatUsdValue(mainPair.volume.h24)}`,
|
|
166
195
|
`Top pairs:\n${topPairs(service, pairs, 3)}`,
|
|
167
196
|
].join("\n");
|
|
168
197
|
return emit(
|
|
@@ -195,7 +224,7 @@ async function executeDexScreener(
|
|
|
195
224
|
),
|
|
196
225
|
);
|
|
197
226
|
}
|
|
198
|
-
case "
|
|
227
|
+
case "new_pairs": {
|
|
199
228
|
const limit = Math.min(25, Math.max(1, params.limit ?? 10));
|
|
200
229
|
const pairs = requireDexResult(
|
|
201
230
|
await service.getNewPairs({ chain: params.chain, limit }),
|
|
@@ -207,18 +236,18 @@ async function executeDexScreener(
|
|
|
207
236
|
`New trading pairs${params.chain ? ` on ${params.chain}` : ""}:\n${topPairs(service, pairs, limit)}`,
|
|
208
237
|
{
|
|
209
238
|
target: "dexscreener",
|
|
210
|
-
subaction: "
|
|
239
|
+
subaction: "new_pairs",
|
|
211
240
|
chain: params.chain,
|
|
212
241
|
pairs,
|
|
213
242
|
},
|
|
214
243
|
),
|
|
215
244
|
);
|
|
216
245
|
}
|
|
217
|
-
case "
|
|
246
|
+
case "chain_pairs": {
|
|
218
247
|
if (!params.chain) {
|
|
219
248
|
return emit(
|
|
220
249
|
context,
|
|
221
|
-
failure("Provide chain for
|
|
250
|
+
failure("Provide chain for chain_pairs.", "MISSING_CHAIN"),
|
|
222
251
|
);
|
|
223
252
|
}
|
|
224
253
|
const limit = Math.min(25, Math.max(1, params.limit ?? 10));
|
|
@@ -233,7 +262,7 @@ async function executeDexScreener(
|
|
|
233
262
|
`Top ${params.chain} pairs by ${sortBy}:\n${topPairs(service, pairs, limit)}`,
|
|
234
263
|
{
|
|
235
264
|
target: "dexscreener",
|
|
236
|
-
subaction: "
|
|
265
|
+
subaction: "chain_pairs",
|
|
237
266
|
chain: params.chain,
|
|
238
267
|
sortBy,
|
|
239
268
|
pairs,
|
|
@@ -315,9 +344,9 @@ function formatBirdeyeWallet(
|
|
|
315
344
|
result: WalletPortfolioResponse,
|
|
316
345
|
address: string,
|
|
317
346
|
): string {
|
|
318
|
-
const tokens = result
|
|
347
|
+
const tokens = result.data.items.slice(0, 10);
|
|
319
348
|
const totalValue =
|
|
320
|
-
typeof result
|
|
349
|
+
typeof result.data.totalUsd === "number"
|
|
321
350
|
? result.data.totalUsd
|
|
322
351
|
: tokens.reduce(
|
|
323
352
|
(sum: number, token: BirdeyePortfolioToken) =>
|
|
@@ -330,7 +359,7 @@ function formatBirdeyeWallet(
|
|
|
330
359
|
`- ${String(token.symbol ?? "TOKEN").toUpperCase()}: $${Number(token.valueUsd ?? 0).toLocaleString()} (${token.uiAmount ?? "n/a"})`,
|
|
331
360
|
)
|
|
332
361
|
.join("\n");
|
|
333
|
-
return `Wallet ${address}\nTotal value: $${Number(totalValue
|
|
362
|
+
return `Wallet ${address}\nTotal value: $${Number(totalValue).toLocaleString()}\nTop holdings:\n${holdings}`;
|
|
334
363
|
}
|
|
335
364
|
|
|
336
365
|
async function executeBirdeye(
|
|
@@ -603,7 +632,7 @@ async function executeCoingecko(
|
|
|
603
632
|
}>(runtime, "/search/trending");
|
|
604
633
|
const coins = (result.coins ?? [])
|
|
605
634
|
.map((entry) => entry.item)
|
|
606
|
-
.filter(
|
|
635
|
+
.filter((coin): coin is NonNullable<typeof coin> => coin !== undefined)
|
|
607
636
|
.slice(0, params.limit ?? 10);
|
|
608
637
|
const text = coins
|
|
609
638
|
.map(
|
|
@@ -650,8 +679,8 @@ export function createDexScreenerTokenInfoProvider(): TokenInfoProvider {
|
|
|
650
679
|
"search",
|
|
651
680
|
"token",
|
|
652
681
|
"trending",
|
|
653
|
-
"
|
|
654
|
-
"
|
|
682
|
+
"new_pairs",
|
|
683
|
+
"chain_pairs",
|
|
655
684
|
"boosted",
|
|
656
685
|
"profiles",
|
|
657
686
|
],
|
|
@@ -18,8 +18,8 @@ const DEFAULT_PROVIDER_BY_SUBACTION: Record<TokenInfoSubaction, string> = {
|
|
|
18
18
|
search: "dexscreener",
|
|
19
19
|
token: "dexscreener",
|
|
20
20
|
trending: "dexscreener",
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
new_pairs: "dexscreener",
|
|
22
|
+
chain_pairs: "dexscreener",
|
|
23
23
|
boosted: "dexscreener",
|
|
24
24
|
profiles: "dexscreener",
|
|
25
25
|
wallet: "birdeye",
|
|
@@ -36,7 +36,7 @@ export class TokenInfoService extends Service {
|
|
|
36
36
|
static override serviceType = TOKEN_INFO_SERVICE_TYPE;
|
|
37
37
|
|
|
38
38
|
override capabilityDescription =
|
|
39
|
-
"Token information provider registry for DexScreener, Birdeye, CoinGecko, and
|
|
39
|
+
"Token information provider registry for DexScreener, Birdeye, CoinGecko, and additional crypto data sources";
|
|
40
40
|
|
|
41
41
|
private readonly providers = new Map<string, TokenInfoProvider>();
|
|
42
42
|
private readonly aliases = new Map<string, string>();
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { handleWalletRoutes, type WalletRouteContext } from "./wallet-routes";
|
|
3
|
+
|
|
4
|
+
function buildCtx(): {
|
|
5
|
+
ctx: WalletRouteContext;
|
|
6
|
+
res: { statusCode?: number; body?: unknown };
|
|
7
|
+
readJsonBody: ReturnType<typeof vi.fn>;
|
|
8
|
+
resolveWalletExportRejection: ReturnType<typeof vi.fn>;
|
|
9
|
+
} {
|
|
10
|
+
const res: { statusCode?: number; body?: unknown } = {};
|
|
11
|
+
const readJsonBody = vi.fn(async () => ({
|
|
12
|
+
confirm: true,
|
|
13
|
+
exportToken: "token",
|
|
14
|
+
}));
|
|
15
|
+
const resolveWalletExportRejection = vi.fn(() => null);
|
|
16
|
+
const ctx = {
|
|
17
|
+
req: { headers: {} },
|
|
18
|
+
res,
|
|
19
|
+
method: "POST",
|
|
20
|
+
pathname: "/api/wallet/export",
|
|
21
|
+
config: {},
|
|
22
|
+
saveConfig: vi.fn(),
|
|
23
|
+
ensureWalletKeysInEnvAndConfig: vi.fn(() => true),
|
|
24
|
+
resolveWalletExportRejection,
|
|
25
|
+
deps: {},
|
|
26
|
+
readJsonBody,
|
|
27
|
+
json(target: typeof res, data: unknown, status = 200) {
|
|
28
|
+
target.statusCode = status;
|
|
29
|
+
target.body = data;
|
|
30
|
+
},
|
|
31
|
+
error(target: typeof res, message: string, status = 400) {
|
|
32
|
+
target.statusCode = status;
|
|
33
|
+
target.body = { error: message };
|
|
34
|
+
},
|
|
35
|
+
} as unknown as WalletRouteContext;
|
|
36
|
+
return { ctx, res, readJsonBody, resolveWalletExportRejection };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
describe("wallet route contracts", () => {
|
|
40
|
+
it("keeps plaintext private-key export removed from the agent API", async () => {
|
|
41
|
+
const { ctx, res, readJsonBody, resolveWalletExportRejection } = buildCtx();
|
|
42
|
+
|
|
43
|
+
await expect(handleWalletRoutes(ctx)).resolves.toBe(true);
|
|
44
|
+
|
|
45
|
+
expect(res.statusCode).toBe(410);
|
|
46
|
+
expect(res.body).toEqual({
|
|
47
|
+
error:
|
|
48
|
+
"Private key export has been removed. Use Steward or OS-backed custody flows.",
|
|
49
|
+
});
|
|
50
|
+
expect(JSON.stringify(res.body)).not.toMatch(
|
|
51
|
+
/privateKey|secretKey|mnemonic|seed/i,
|
|
52
|
+
);
|
|
53
|
+
expect(readJsonBody).not.toHaveBeenCalled();
|
|
54
|
+
expect(resolveWalletExportRejection).not.toHaveBeenCalled();
|
|
55
|
+
});
|
|
56
|
+
});
|