@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
|
@@ -58,6 +58,41 @@ function headersWithoutAuthorization(headersInit?: HeadersInit): Headers {
|
|
|
58
58
|
return headers;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Per-turn safety bound for wallet balance RPC calls. `evmWalletProvider.get()`
|
|
63
|
+
* runs inside `composeState` on every message and is awaited (via `Promise.all`)
|
|
64
|
+
* before the agent can produce a reply, so an unbounded RPC against a slow or
|
|
65
|
+
* unreachable endpoint would block the WHOLE turn up to composeState's 30s
|
|
66
|
+
* provider cap — the dedicated-agent "28s per reply" symptom. Bounding each read
|
|
67
|
+
* means a wallet-enabled agent never pays more than this per chain; on timeout we
|
|
68
|
+
* return null (logged) and that chain's balance simply isn't shown that turn.
|
|
69
|
+
*/
|
|
70
|
+
const WALLET_BALANCE_RPC_TIMEOUT_MS = 3000;
|
|
71
|
+
|
|
72
|
+
/** Transport-level fast-fail bound so a hung socket aborts instead of lingering. */
|
|
73
|
+
const WALLET_RPC_FETCH_TIMEOUT_MS = 4000;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Race `promise` against a timeout. Rejects with a labelled error on timeout so
|
|
77
|
+
* the caller's existing try/catch can treat it like any other RPC failure. The
|
|
78
|
+
* timer is always cleared so a fast-resolving promise leaves no dangling handle.
|
|
79
|
+
*/
|
|
80
|
+
async function withTimeout<T>(promise: Promise<T>, ms: number, label: string): Promise<T> {
|
|
81
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
82
|
+
try {
|
|
83
|
+
return await Promise.race([
|
|
84
|
+
promise,
|
|
85
|
+
new Promise<never>((_, reject) => {
|
|
86
|
+
timer = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms);
|
|
87
|
+
}),
|
|
88
|
+
]);
|
|
89
|
+
} finally {
|
|
90
|
+
if (timer) {
|
|
91
|
+
clearTimeout(timer);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
61
96
|
function isRetryableManagedRpcStatus(status: number): boolean {
|
|
62
97
|
return (
|
|
63
98
|
status === 401 ||
|
|
@@ -109,6 +144,8 @@ export class WalletProvider {
|
|
|
109
144
|
private _account: PrivateKeyAccount;
|
|
110
145
|
private readonly _runtime: IAgentRuntime;
|
|
111
146
|
private readonly _rpcConfigs: Record<string, ChainRpcConfig>;
|
|
147
|
+
/** Chains where Cloud RPC returned a non-transient auth error (401/403) and should not be retried this session. */
|
|
148
|
+
private readonly _cloudRpcDisabled = new Set<string>();
|
|
112
149
|
|
|
113
150
|
constructor(
|
|
114
151
|
accountOrPrivateKey: PrivateKeyAccount | `0x${string}`,
|
|
@@ -218,9 +255,14 @@ export class WalletProvider {
|
|
|
218
255
|
async getWalletBalanceForChain(chainName: SupportedChain): Promise<string | null> {
|
|
219
256
|
try {
|
|
220
257
|
const client = this.getPublicClient(chainName);
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
258
|
+
// Bound the per-turn RPC so a slow/unreachable endpoint can never block the
|
|
259
|
+
// reply pipeline (see WALLET_BALANCE_RPC_TIMEOUT_MS). On timeout this rejects
|
|
260
|
+
// and is handled by the catch below exactly like any other RPC error.
|
|
261
|
+
const balance = await withTimeout(
|
|
262
|
+
client.getBalance({ address: this._account.address }),
|
|
263
|
+
WALLET_BALANCE_RPC_TIMEOUT_MS,
|
|
264
|
+
`getBalance(${chainName})`
|
|
265
|
+
);
|
|
224
266
|
return formatUnits(balance, 18);
|
|
225
267
|
} catch (error) {
|
|
226
268
|
logger.error(
|
|
@@ -269,7 +311,21 @@ export class WalletProvider {
|
|
|
269
311
|
const fallbackRpcUrl =
|
|
270
312
|
managedRpc.providerName === "elizacloud" ? chain.rpcUrls.default.http[0] : null;
|
|
271
313
|
|
|
314
|
+
// If Cloud RPC already failed with an auth error for this chain, go straight to fallback.
|
|
315
|
+
if (
|
|
316
|
+
managedRpc.providerName === "elizacloud" &&
|
|
317
|
+
fallbackRpcUrl &&
|
|
318
|
+
this._cloudRpcDisabled.has(chainName)
|
|
319
|
+
) {
|
|
320
|
+
return http(fallbackRpcUrl, {
|
|
321
|
+
timeout: WALLET_RPC_FETCH_TIMEOUT_MS,
|
|
322
|
+
retryCount: 0,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
|
|
272
326
|
return http(managedRpc.rpcUrl, {
|
|
327
|
+
timeout: WALLET_RPC_FETCH_TIMEOUT_MS,
|
|
328
|
+
retryCount: 0,
|
|
273
329
|
fetchFn:
|
|
274
330
|
managedRpc.providerName === "elizacloud" && fallbackRpcUrl
|
|
275
331
|
? async (input, init) => {
|
|
@@ -281,9 +337,18 @@ export class WalletProvider {
|
|
|
281
337
|
return response;
|
|
282
338
|
}
|
|
283
339
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
)
|
|
340
|
+
// For auth errors (401/403), disable Cloud RPC for this chain for the
|
|
341
|
+
// rest of the session so we stop retrying and spamming warnings.
|
|
342
|
+
if (response.status === 401 || response.status === 403) {
|
|
343
|
+
this._cloudRpcDisabled.add(chainName);
|
|
344
|
+
logger.warn(
|
|
345
|
+
`[WalletProvider] Eliza Cloud RPC returned ${response.status} for ${chainName}. Disabling Cloud RPC for this chain and falling back to ${fallbackRpcUrl} for the rest of this session.`
|
|
346
|
+
);
|
|
347
|
+
} else {
|
|
348
|
+
logger.warn(
|
|
349
|
+
`[WalletProvider] Eliza Cloud RPC failed for ${chainName}: ${fallbackReason}. Falling back to ${fallbackRpcUrl}.`
|
|
350
|
+
);
|
|
351
|
+
}
|
|
287
352
|
|
|
288
353
|
return await fetch(fallbackRpcUrl, {
|
|
289
354
|
...init,
|
|
@@ -311,9 +376,15 @@ export class WalletProvider {
|
|
|
311
376
|
|
|
312
377
|
const customRpc = chain.rpcUrls.custom;
|
|
313
378
|
if (customRpc) {
|
|
314
|
-
return http(customRpc.http[0]
|
|
379
|
+
return http(customRpc.http[0], {
|
|
380
|
+
timeout: WALLET_RPC_FETCH_TIMEOUT_MS,
|
|
381
|
+
retryCount: 0,
|
|
382
|
+
});
|
|
315
383
|
}
|
|
316
|
-
return http(chain.rpcUrls.default.http[0]
|
|
384
|
+
return http(chain.rpcUrls.default.http[0], {
|
|
385
|
+
timeout: WALLET_RPC_FETCH_TIMEOUT_MS,
|
|
386
|
+
retryCount: 0,
|
|
387
|
+
});
|
|
317
388
|
}
|
|
318
389
|
|
|
319
390
|
static genChainFromName(chainName: string, customRpcUrl?: string | null): Chain {
|
|
@@ -343,7 +414,7 @@ function genChainsFromRuntime(runtime: IAgentRuntime): {
|
|
|
343
414
|
chains: Record<string, Chain>;
|
|
344
415
|
rpcConfigs: Record<string, ChainRpcConfig>;
|
|
345
416
|
} {
|
|
346
|
-
const settings = runtime.character
|
|
417
|
+
const settings = runtime.character.settings;
|
|
347
418
|
let configuredChains: string[] = [];
|
|
348
419
|
if (
|
|
349
420
|
typeof settings === "object" &&
|
|
@@ -10,7 +10,13 @@
|
|
|
10
10
|
* we only sign here.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import type {
|
|
13
|
+
import type {
|
|
14
|
+
IAgentRuntime,
|
|
15
|
+
LegacyRouteHandler,
|
|
16
|
+
Route,
|
|
17
|
+
RouteRequest,
|
|
18
|
+
RouteResponse,
|
|
19
|
+
} from "@elizaos/core";
|
|
14
20
|
import { logger } from "@elizaos/core";
|
|
15
21
|
import {
|
|
16
22
|
type Address,
|
|
@@ -24,24 +30,23 @@ import {
|
|
|
24
30
|
import * as viemChains from "viem/chains";
|
|
25
31
|
import { resolveWalletBackend } from "../../../wallet/select-backend";
|
|
26
32
|
|
|
27
|
-
|
|
33
|
+
class EvmSignInputError extends Error {}
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
function routeErrorStatus(error: unknown): number {
|
|
36
|
+
return error instanceof EvmSignInputError ? 400 : 500;
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
function setCorsHeaders(req: RouteRequest, res: RouteResponse): void {
|
|
34
40
|
const origin = (req.headers?.origin as string | undefined) ?? "*";
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
r.setHeader?.(
|
|
41
|
+
res.setHeader?.("Access-Control-Allow-Origin", origin);
|
|
42
|
+
res.setHeader?.("Vary", "Origin");
|
|
43
|
+
res.setHeader?.("Access-Control-Allow-Methods", "POST, OPTIONS");
|
|
44
|
+
res.setHeader?.(
|
|
40
45
|
"Access-Control-Allow-Headers",
|
|
41
46
|
"Authorization, Content-Type, X-Wallet-Sign-Token",
|
|
42
47
|
);
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
res.setHeader?.("Access-Control-Allow-Credentials", "true");
|
|
49
|
+
res.setHeader?.("Access-Control-Max-Age", "600");
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
function readSignToken(runtime: IAgentRuntime): string | null {
|
|
@@ -68,7 +73,7 @@ function authorize(
|
|
|
68
73
|
runtime: IAgentRuntime,
|
|
69
74
|
): boolean {
|
|
70
75
|
setCorsHeaders(req, res);
|
|
71
|
-
if (
|
|
76
|
+
if (req.method === "OPTIONS") {
|
|
72
77
|
res.status(204).json({});
|
|
73
78
|
return false;
|
|
74
79
|
}
|
|
@@ -86,9 +91,9 @@ function authorize(
|
|
|
86
91
|
|
|
87
92
|
function chainFromId(chainId: number): Chain {
|
|
88
93
|
const all = Object.values(viemChains) as Chain[];
|
|
89
|
-
const hit = all.find((c) => typeof c
|
|
94
|
+
const hit = all.find((c) => typeof c.id === "number" && c.id === chainId);
|
|
90
95
|
if (!hit) {
|
|
91
|
-
throw new
|
|
96
|
+
throw new EvmSignInputError(`unsupported EVM chainId: ${chainId}`);
|
|
92
97
|
}
|
|
93
98
|
return hit;
|
|
94
99
|
}
|
|
@@ -99,14 +104,14 @@ function rpcUrlForChain(runtime: IAgentRuntime, chain: Chain): string {
|
|
|
99
104
|
process.env[`EVM_RPC_URL_${chain.id}`] ??
|
|
100
105
|
null;
|
|
101
106
|
if (explicit && explicit.length > 0) return explicit;
|
|
102
|
-
const def = chain.rpcUrls
|
|
107
|
+
const def = chain.rpcUrls.default.http[0];
|
|
103
108
|
if (def) return def;
|
|
104
109
|
throw new Error(`no RPC URL configured for chain ${chain.id} (${chain.name})`);
|
|
105
110
|
}
|
|
106
111
|
|
|
107
112
|
function readChainId(body: unknown): number {
|
|
108
113
|
if (typeof body !== "object" || body === null) {
|
|
109
|
-
throw new
|
|
114
|
+
throw new EvmSignInputError("chainId required");
|
|
110
115
|
}
|
|
111
116
|
const c = (body as { chainId?: unknown }).chainId;
|
|
112
117
|
if (typeof c === "number") return c;
|
|
@@ -114,10 +119,10 @@ function readChainId(body: unknown): number {
|
|
|
114
119
|
const n = c.startsWith("0x") ? Number.parseInt(c.slice(2), 16) : Number(c);
|
|
115
120
|
if (Number.isFinite(n)) return n;
|
|
116
121
|
}
|
|
117
|
-
throw new
|
|
122
|
+
throw new EvmSignInputError("chainId must be a number or hex string");
|
|
118
123
|
}
|
|
119
124
|
|
|
120
|
-
const addressHandler:
|
|
125
|
+
const addressHandler: LegacyRouteHandler = async (req, res, runtime) => {
|
|
121
126
|
if (!authorize(req, res, runtime)) return;
|
|
122
127
|
try {
|
|
123
128
|
const backend = await resolveWalletBackend(runtime);
|
|
@@ -133,7 +138,7 @@ const addressHandler: RouteHandler = async (req, res, runtime) => {
|
|
|
133
138
|
}
|
|
134
139
|
};
|
|
135
140
|
|
|
136
|
-
const personalSignHandler:
|
|
141
|
+
const personalSignHandler: LegacyRouteHandler = async (req, res, runtime) => {
|
|
137
142
|
if (!authorize(req, res, runtime)) return;
|
|
138
143
|
try {
|
|
139
144
|
const body = (req.body ?? {}) as { message?: unknown };
|
|
@@ -156,7 +161,7 @@ const personalSignHandler: RouteHandler = async (req, res, runtime) => {
|
|
|
156
161
|
}
|
|
157
162
|
};
|
|
158
163
|
|
|
159
|
-
const signTypedDataHandler:
|
|
164
|
+
const signTypedDataHandler: LegacyRouteHandler = async (req, res, runtime) => {
|
|
160
165
|
if (!authorize(req, res, runtime)) return;
|
|
161
166
|
try {
|
|
162
167
|
const body = (req.body ?? {}) as { typedData?: unknown };
|
|
@@ -195,12 +200,16 @@ function hexOrIntToBigInt(value: unknown): bigint | undefined {
|
|
|
195
200
|
if (typeof value === "number") return BigInt(value);
|
|
196
201
|
if (typeof value === "string") {
|
|
197
202
|
if (value.length === 0) return undefined;
|
|
198
|
-
|
|
203
|
+
try {
|
|
204
|
+
return value.startsWith("0x") ? BigInt(value) : BigInt(value);
|
|
205
|
+
} catch {
|
|
206
|
+
throw new EvmSignInputError(`invalid bigint value: ${value}`);
|
|
207
|
+
}
|
|
199
208
|
}
|
|
200
|
-
|
|
209
|
+
throw new EvmSignInputError("bigint value must be a number, bigint, or string");
|
|
201
210
|
}
|
|
202
211
|
|
|
203
|
-
const sendTransactionHandler:
|
|
212
|
+
const sendTransactionHandler: LegacyRouteHandler = async (req, res, runtime) => {
|
|
204
213
|
if (!authorize(req, res, runtime)) return;
|
|
205
214
|
try {
|
|
206
215
|
const body = (req.body ?? {}) as { tx?: EvmTxRequest };
|
|
@@ -240,11 +249,11 @@ const sendTransactionHandler: RouteHandler = async (req, res, runtime) => {
|
|
|
240
249
|
res.status(200).json({ hash, address: account.address, chainId });
|
|
241
250
|
} catch (err) {
|
|
242
251
|
logger.error({ err }, "[wallet/evm/send-transaction] failed");
|
|
243
|
-
res.status(
|
|
252
|
+
res.status(routeErrorStatus(err)).json({ error: (err as Error).message });
|
|
244
253
|
}
|
|
245
254
|
};
|
|
246
255
|
|
|
247
|
-
const signTransactionHandler:
|
|
256
|
+
const signTransactionHandler: LegacyRouteHandler = async (req, res, runtime) => {
|
|
248
257
|
if (!authorize(req, res, runtime)) return;
|
|
249
258
|
try {
|
|
250
259
|
const body = (req.body ?? {}) as { tx?: EvmTxRequest };
|
|
@@ -283,7 +292,7 @@ const signTransactionHandler: RouteHandler = async (req, res, runtime) => {
|
|
|
283
292
|
});
|
|
284
293
|
} catch (err) {
|
|
285
294
|
logger.error({ err }, "[wallet/evm/sign-transaction] failed");
|
|
286
|
-
res.status(
|
|
295
|
+
res.status(routeErrorStatus(err)).json({ error: (err as Error).message });
|
|
287
296
|
}
|
|
288
297
|
};
|
|
289
298
|
|
|
@@ -366,7 +366,7 @@ export function validateRPCProviderConfig(runtime: IAgentRuntime): {
|
|
|
366
366
|
|
|
367
367
|
// Check for any per-chain custom RPC URLs
|
|
368
368
|
let hasCustomRpc = false;
|
|
369
|
-
const settings = runtime.character
|
|
369
|
+
const settings = runtime.character.settings;
|
|
370
370
|
let chainsToCheck: string[] = ["mainnet", "base"];
|
|
371
371
|
if (
|
|
372
372
|
typeof settings === "object" &&
|
|
@@ -176,9 +176,9 @@ export const BebopRouteSchema = z.object({
|
|
|
176
176
|
});
|
|
177
177
|
|
|
178
178
|
export interface SwapQuote {
|
|
179
|
-
readonly aggregator: "lifi" | "bebop";
|
|
179
|
+
readonly aggregator: "lifi" | "bebop" | "kyberswap";
|
|
180
180
|
readonly minOutputAmount: string;
|
|
181
|
-
readonly swapData: Route | BebopRoute;
|
|
181
|
+
readonly swapData: Route | BebopRoute | KyberSwapRouteData;
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
export interface BridgeParams {
|
|
@@ -430,3 +430,23 @@ export function validateHash(hash: string): Hash {
|
|
|
430
430
|
}
|
|
431
431
|
|
|
432
432
|
export type { Address, Chain, Hash, Hex, Log } from "viem";
|
|
433
|
+
export interface KyberSwapRouteSummary {
|
|
434
|
+
amountOut: string;
|
|
435
|
+
amountOutUsd?: string;
|
|
436
|
+
gas?: string;
|
|
437
|
+
gasUsd?: string;
|
|
438
|
+
gasPrice?: string;
|
|
439
|
+
// Full summary is forwarded verbatim to the KyberSwap build endpoint.
|
|
440
|
+
[key: string]: unknown;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
export interface KyberSwapRouteData {
|
|
444
|
+
routeSummary: KyberSwapRouteSummary;
|
|
445
|
+
routerAddress: string;
|
|
446
|
+
chainSlug: string;
|
|
447
|
+
fromToken: string;
|
|
448
|
+
toToken: string;
|
|
449
|
+
amountIn: string;
|
|
450
|
+
slippageBps: number;
|
|
451
|
+
fromAddress: string;
|
|
452
|
+
}
|
package/src/chains/registry.ts
CHANGED
|
@@ -60,7 +60,7 @@ function configuredEvmChains(runtime: IAgentRuntime): Array<{
|
|
|
60
60
|
readonly key: string;
|
|
61
61
|
readonly chain: Chain;
|
|
62
62
|
}> {
|
|
63
|
-
const settings = runtime.character
|
|
63
|
+
const settings = runtime.character.settings;
|
|
64
64
|
const configured =
|
|
65
65
|
settings &&
|
|
66
66
|
typeof settings === "object" &&
|