@elizaos/plugin-wallet 2.0.0-beta.1 → 2.0.3-beta.6
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,128 @@
|
|
|
1
|
+
import type { Memory } from "@elizaos/core";
|
|
2
|
+
|
|
3
|
+
/** GHSA-7qxr-x6cg-r9cc — embedded addresses in token metadata must not become transfer recipients. */
|
|
4
|
+
/** GHSA-gh63-5vpj-39qp — block financial writes on injection-flagged channel messages. */
|
|
5
|
+
|
|
6
|
+
const FINANCIAL_WRITE_SUBACTIONS = new Set(["transfer", "swap", "bridge"]);
|
|
7
|
+
|
|
8
|
+
function messageHasPromptInjectionFlag(message: Memory): boolean {
|
|
9
|
+
const metadata = message.content?.metadata;
|
|
10
|
+
return (
|
|
11
|
+
typeof metadata === "object" &&
|
|
12
|
+
metadata !== null &&
|
|
13
|
+
(metadata as { promptInjectionSuspected?: boolean })
|
|
14
|
+
.promptInjectionSuspected === true
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
export const EVM_ADDRESS_PATTERN = /0x[a-fA-F0-9]{40}\b/g;
|
|
18
|
+
|
|
19
|
+
const INFERRED_RECIPIENT_PHRASE =
|
|
20
|
+
/\b(?:prior\s+wallet\s+evidence|operational\s+recipient|canonical\s+(?:testnet\s+)?(?:operational|settlement)\s+recipient|based\s+on\s+(?:the\s+)?prior|from\s+prior\s+(?:wallet|session|context))\b/i;
|
|
21
|
+
|
|
22
|
+
export function sanitizeWalletDisplayLabel(label: string): string {
|
|
23
|
+
return label
|
|
24
|
+
.replace(EVM_ADDRESS_PATTERN, "[address]")
|
|
25
|
+
.replace(
|
|
26
|
+
/\[[^\]]*(?:recipient|operational|settlement|canonical)[^\]]*\]/gi,
|
|
27
|
+
"[routing-hint-removed]",
|
|
28
|
+
)
|
|
29
|
+
.trim();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function readMemoryText(message: Memory): string {
|
|
33
|
+
if (typeof message.content === "string") {
|
|
34
|
+
return message.content;
|
|
35
|
+
}
|
|
36
|
+
if (
|
|
37
|
+
message.content &&
|
|
38
|
+
typeof message.content === "object" &&
|
|
39
|
+
typeof message.content.text === "string"
|
|
40
|
+
) {
|
|
41
|
+
return message.content.text;
|
|
42
|
+
}
|
|
43
|
+
return "";
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function collectExplicitRecipients(
|
|
47
|
+
options: Record<string, unknown> | undefined,
|
|
48
|
+
): string[] {
|
|
49
|
+
const out: string[] = [];
|
|
50
|
+
const params =
|
|
51
|
+
options &&
|
|
52
|
+
typeof options === "object" &&
|
|
53
|
+
"parameters" in options &&
|
|
54
|
+
options.parameters &&
|
|
55
|
+
typeof options.parameters === "object"
|
|
56
|
+
? (options.parameters as Record<string, unknown>)
|
|
57
|
+
: null;
|
|
58
|
+
|
|
59
|
+
for (const source of [params, options]) {
|
|
60
|
+
if (!source) continue;
|
|
61
|
+
for (const key of ["recipient", "toAddress", "to"] as const) {
|
|
62
|
+
const value = source[key];
|
|
63
|
+
if (typeof value === "string" && /^0x[a-fA-F0-9]{40}$/.test(value)) {
|
|
64
|
+
out.push(value.toLowerCase());
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function messageAuthorizesEvmRecipient(
|
|
72
|
+
message: Memory,
|
|
73
|
+
options: Record<string, unknown> | undefined,
|
|
74
|
+
recipient: string,
|
|
75
|
+
): boolean {
|
|
76
|
+
const normalized = recipient.toLowerCase();
|
|
77
|
+
const explicit = collectExplicitRecipients(options);
|
|
78
|
+
if (explicit.includes(normalized)) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const userText = readMemoryText(message);
|
|
83
|
+
if (userText.toLowerCase().includes(normalized)) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function assertWalletFinancialActionAllowed(
|
|
91
|
+
message: Memory,
|
|
92
|
+
subaction: string | undefined,
|
|
93
|
+
): void {
|
|
94
|
+
if (!subaction || !FINANCIAL_WRITE_SUBACTIONS.has(subaction)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (messageHasPromptInjectionFlag(message)) {
|
|
98
|
+
throw new Error(
|
|
99
|
+
"Wallet transfer, swap, and bridge are blocked for this message (GHSA-gh63-5vpj-39qp): suspected prompt injection in untrusted channel content.",
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function assertEvmTransferRecipientAuthorized(
|
|
105
|
+
message: Memory,
|
|
106
|
+
options: Record<string, unknown> | undefined,
|
|
107
|
+
recipient: string,
|
|
108
|
+
): void {
|
|
109
|
+
if (!/^0x[a-fA-F0-9]{40}$/.test(recipient)) {
|
|
110
|
+
throw new Error("recipient must be a valid EVM address.");
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const userText = readMemoryText(message);
|
|
114
|
+
if (
|
|
115
|
+
INFERRED_RECIPIENT_PHRASE.test(userText) &&
|
|
116
|
+
!messageAuthorizesEvmRecipient(message, options, recipient)
|
|
117
|
+
) {
|
|
118
|
+
throw new Error(
|
|
119
|
+
"Transfer recipient cannot be inferred from prior wallet context or token metadata. Provide an explicit 0x recipient address in this message or in structured action parameters.",
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (!messageAuthorizesEvmRecipient(message, options, recipient)) {
|
|
124
|
+
throw new Error(
|
|
125
|
+
"Transfer recipient must appear explicitly in the current user message or structured action parameters. Addresses from token names or earlier session quotes are not accepted.",
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ActionResult,
|
|
3
|
+
ConfirmationDecision,
|
|
4
|
+
HandlerCallback,
|
|
5
|
+
IAgentRuntime,
|
|
6
|
+
Memory,
|
|
7
|
+
} from "@elizaos/core";
|
|
8
|
+
import { requireConfirmation } from "@elizaos/core";
|
|
9
|
+
import type { WalletRouterParams } from "../types/wallet-router.js";
|
|
10
|
+
|
|
11
|
+
/** Cache namespace for on-chain wallet writes (GHSA-rqm7-f4jc-84x3). */
|
|
12
|
+
export const WALLET_FINANCIAL_CONFIRM_ACTION = "WALLET_FINANCIAL";
|
|
13
|
+
|
|
14
|
+
const ON_CHAIN_SUBACTIONS = new Set<WalletRouterParams["subaction"]>([
|
|
15
|
+
"transfer",
|
|
16
|
+
"swap",
|
|
17
|
+
"bridge",
|
|
18
|
+
"gov",
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
export function requiresWalletFinancialConfirmation(
|
|
22
|
+
params: Pick<WalletRouterParams, "subaction" | "dryRun">,
|
|
23
|
+
): boolean {
|
|
24
|
+
if (params.dryRun) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return ON_CHAIN_SUBACTIONS.has(params.subaction);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function walletFinancialPendingKey(
|
|
31
|
+
params: Pick<
|
|
32
|
+
WalletRouterParams,
|
|
33
|
+
| "subaction"
|
|
34
|
+
| "chain"
|
|
35
|
+
| "toChain"
|
|
36
|
+
| "amount"
|
|
37
|
+
| "recipient"
|
|
38
|
+
| "fromToken"
|
|
39
|
+
| "toToken"
|
|
40
|
+
| "slippageBps"
|
|
41
|
+
| "op"
|
|
42
|
+
| "governor"
|
|
43
|
+
| "proposalId"
|
|
44
|
+
>,
|
|
45
|
+
): string {
|
|
46
|
+
const entries: [string, string][] = [
|
|
47
|
+
["subaction", params.subaction],
|
|
48
|
+
["chain", (params.chain ?? "").toLowerCase()],
|
|
49
|
+
["toChain", (params.toChain ?? "").toLowerCase()],
|
|
50
|
+
["amount", params.amount ?? ""],
|
|
51
|
+
["recipient", (params.recipient ?? "").toLowerCase()],
|
|
52
|
+
["fromToken", (params.fromToken ?? "").toLowerCase()],
|
|
53
|
+
["toToken", (params.toToken ?? "").toLowerCase()],
|
|
54
|
+
[
|
|
55
|
+
"slippageBps",
|
|
56
|
+
params.slippageBps === undefined ? "" : String(params.slippageBps),
|
|
57
|
+
],
|
|
58
|
+
["op", (params.op ?? "").toLowerCase()],
|
|
59
|
+
["governor", (params.governor ?? "").toLowerCase()],
|
|
60
|
+
["proposalId", params.proposalId ?? ""],
|
|
61
|
+
];
|
|
62
|
+
return entries.map(([key, value]) => `${key}=${value}`).join("|");
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function walletFinancialPreview(
|
|
66
|
+
params: Pick<
|
|
67
|
+
WalletRouterParams,
|
|
68
|
+
| "subaction"
|
|
69
|
+
| "chain"
|
|
70
|
+
| "toChain"
|
|
71
|
+
| "amount"
|
|
72
|
+
| "recipient"
|
|
73
|
+
| "fromToken"
|
|
74
|
+
| "toToken"
|
|
75
|
+
| "op"
|
|
76
|
+
>,
|
|
77
|
+
): string {
|
|
78
|
+
const chainLabel = params.chain ?? params.toChain ?? "the selected chain";
|
|
79
|
+
switch (params.subaction) {
|
|
80
|
+
case "transfer":
|
|
81
|
+
return `Transfer ${params.amount ?? "?"} ${params.fromToken ?? "tokens"} to ${params.recipient ?? "?"} on ${chainLabel}? Reply yes to submit or no to cancel.`;
|
|
82
|
+
case "swap":
|
|
83
|
+
return `Swap ${params.amount ?? "?"} ${params.fromToken ?? "?"} to ${params.toToken ?? "?"} on ${chainLabel}? Reply yes to submit or no to cancel.`;
|
|
84
|
+
case "bridge":
|
|
85
|
+
return `Bridge ${params.amount ?? "?"} from ${params.chain ?? "?"} to ${params.toChain ?? "?"}? Reply yes to submit or no to cancel.`;
|
|
86
|
+
case "gov":
|
|
87
|
+
return `Governance ${params.op ?? "operation"} on ${chainLabel}? Reply yes to submit or no to cancel.`;
|
|
88
|
+
default:
|
|
89
|
+
return `Submit wallet ${params.subaction} on ${chainLabel}? Reply yes to confirm or no to cancel.`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export type WalletFinancialGateResult =
|
|
94
|
+
| { readonly proceed: true }
|
|
95
|
+
| {
|
|
96
|
+
readonly proceed: false;
|
|
97
|
+
readonly decision: ConfirmationDecision;
|
|
98
|
+
readonly text: string;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export async function gateWalletFinancialExecution(args: {
|
|
102
|
+
runtime: IAgentRuntime;
|
|
103
|
+
message: Memory;
|
|
104
|
+
params: WalletRouterParams;
|
|
105
|
+
callback?: HandlerCallback;
|
|
106
|
+
}): Promise<WalletFinancialGateResult> {
|
|
107
|
+
if (!requiresWalletFinancialConfirmation(args.params)) {
|
|
108
|
+
return { proceed: true };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const decision = await requireConfirmation({
|
|
112
|
+
runtime: args.runtime,
|
|
113
|
+
message: args.message,
|
|
114
|
+
actionName: WALLET_FINANCIAL_CONFIRM_ACTION,
|
|
115
|
+
pendingKey: walletFinancialPendingKey(args.params),
|
|
116
|
+
prompt: walletFinancialPreview(args.params),
|
|
117
|
+
callback: args.callback,
|
|
118
|
+
metadata: { subaction: args.params.subaction },
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
if (decision.status === "confirmed") {
|
|
122
|
+
return { proceed: true };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const text =
|
|
126
|
+
decision.status === "pending"
|
|
127
|
+
? walletFinancialPreview(args.params)
|
|
128
|
+
: "Wallet operation cancelled.";
|
|
129
|
+
|
|
130
|
+
return { proceed: false, decision, text };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function walletFinancialGateActionResult(
|
|
134
|
+
gate: Extract<WalletFinancialGateResult, { proceed: false }>,
|
|
135
|
+
): ActionResult {
|
|
136
|
+
const awaiting = gate.decision.status === "pending";
|
|
137
|
+
return {
|
|
138
|
+
success: awaiting,
|
|
139
|
+
text: gate.text,
|
|
140
|
+
values: {
|
|
141
|
+
walletActionPrepared: awaiting,
|
|
142
|
+
walletActionSucceeded: false,
|
|
143
|
+
},
|
|
144
|
+
data: {
|
|
145
|
+
requiresConfirmation: awaiting,
|
|
146
|
+
confirmationStatus: gate.decision.status,
|
|
147
|
+
awaitingUserInput: awaiting,
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
@@ -31,7 +31,7 @@ export class WalletBackendService extends Service {
|
|
|
31
31
|
static override serviceType = WALLET_BACKEND_SERVICE_TYPE;
|
|
32
32
|
|
|
33
33
|
override capabilityDescription =
|
|
34
|
-
"
|
|
34
|
+
"Wallet backend and chain router (EVM + Solana, local or Steward)";
|
|
35
35
|
|
|
36
36
|
private backend: WalletBackend | null = null;
|
|
37
37
|
private backendLoadError: unknown = null;
|
|
@@ -109,6 +109,20 @@ export class WalletBackendService extends Service {
|
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Resolve chain + required fields without signing. Used before out-of-band
|
|
114
|
+
* financial confirmation so invalid params fail fast (GHSA-rqm7-f4jc-84x3).
|
|
115
|
+
*/
|
|
116
|
+
preflightWalletAction(
|
|
117
|
+
params: WalletRouterParams,
|
|
118
|
+
): WalletRouterFailure | null {
|
|
119
|
+
const handlerResult = this.resolveHandler(params);
|
|
120
|
+
if (!handlerResult.ok) {
|
|
121
|
+
return handlerResult;
|
|
122
|
+
}
|
|
123
|
+
return this.validateRequiredParams(params);
|
|
124
|
+
}
|
|
125
|
+
|
|
112
126
|
async routeWalletAction(
|
|
113
127
|
params: WalletRouterParams,
|
|
114
128
|
): Promise<WalletRouterResult> {
|
|
@@ -83,14 +83,14 @@ export async function runIntentModel(
|
|
|
83
83
|
},
|
|
84
84
|
async () => {
|
|
85
85
|
const response = await runtime.useModel(modelType, modelParams);
|
|
86
|
-
return typeof response === "string" ? response : String(response
|
|
86
|
+
return typeof response === "string" ? response : String(response);
|
|
87
87
|
},
|
|
88
88
|
);
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
const startedAt = Date.now();
|
|
92
92
|
const response = await runtime.useModel(modelType, modelParams);
|
|
93
|
-
const text = typeof response === "string" ? response : String(response
|
|
93
|
+
const text = typeof response === "string" ? response : String(response);
|
|
94
94
|
logActiveTrajectoryLlmCall(runtime, {
|
|
95
95
|
model: modelLabel,
|
|
96
96
|
systemPrompt,
|
|
@@ -19,7 +19,7 @@ interface StewardEvmAccountBinding {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* Shape of the dynamically imported @elizaos/
|
|
22
|
+
* Shape of the dynamically imported @elizaos/plugin-steward-app module. Defined
|
|
23
23
|
* locally to avoid a devDependency cycle with app-steward.
|
|
24
24
|
*/
|
|
25
25
|
interface StewardEvmAccountModule {
|
|
@@ -41,7 +41,7 @@ const STEWARD_MODULE_ID = ["@elizaos", "app-steward"].join("/");
|
|
|
41
41
|
/**
|
|
42
42
|
* Cloud / mobile signing via Steward for EVM. Solana addresses may be exposed from
|
|
43
43
|
* Steward when `/vault/.../addresses` returns them; Solana **transaction** signing is
|
|
44
|
-
*
|
|
44
|
+
* unavailable here — callers must treat Solana writes as unavailable until wired.
|
|
45
45
|
*/
|
|
46
46
|
export class StewardBackend implements WalletBackend {
|
|
47
47
|
readonly kind = "steward" as const;
|
|
@@ -66,7 +66,7 @@ export class StewardBackend implements WalletBackend {
|
|
|
66
66
|
} catch (err) {
|
|
67
67
|
const detail = err instanceof Error ? err.message : String(err);
|
|
68
68
|
throw new StewardUnavailableError(
|
|
69
|
-
`Cannot load Steward wallet module (@elizaos/
|
|
69
|
+
`Cannot load Steward wallet module (@elizaos/plugin-steward-app): ${detail}`,
|
|
70
70
|
);
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -126,7 +126,7 @@ export class StewardBackend implements WalletBackend {
|
|
|
126
126
|
|
|
127
127
|
getSolanaSigner(): never {
|
|
128
128
|
throw new StewardUnavailableError(
|
|
129
|
-
"Solana transaction signing via Steward is
|
|
129
|
+
"Solana transaction signing via Steward is unavailable in this runtime yet.",
|
|
130
130
|
);
|
|
131
131
|
}
|
|
132
132
|
|