@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
package/src/audit/audit-log.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import type {
|
|
2
3
|
ActionFailureCode,
|
|
3
4
|
ValidateFailureCode,
|
|
4
5
|
} from "../actions/failure-codes.js";
|
|
5
6
|
import type { SignScope } from "../wallet/pending.js";
|
|
6
7
|
|
|
8
|
+
const AUDIT_HASH_ALGORITHM = "sha256";
|
|
9
|
+
const AUDIT_GENESIS_HASH = "0".repeat(64);
|
|
10
|
+
|
|
7
11
|
export type AuditKind =
|
|
8
12
|
| "action_validate_start"
|
|
9
13
|
| "action_validate_end"
|
|
@@ -25,8 +29,7 @@ export type AuditOutcome =
|
|
|
25
29
|
| "rejected";
|
|
26
30
|
|
|
27
31
|
/**
|
|
28
|
-
* Row shape for the append-only audit log
|
|
29
|
-
* Implementation + SQL migration land with Phase 1 runtime wiring.
|
|
32
|
+
* Row shape for the append-only audit log.
|
|
30
33
|
*/
|
|
31
34
|
export interface AuditLogRow {
|
|
32
35
|
readonly id: bigint;
|
|
@@ -43,3 +46,55 @@ export interface AuditLogRow {
|
|
|
43
46
|
readonly prevHash: string;
|
|
44
47
|
readonly rowHash: string;
|
|
45
48
|
}
|
|
49
|
+
|
|
50
|
+
export type AuditLogRowInput = Omit<
|
|
51
|
+
AuditLogRow,
|
|
52
|
+
"id" | "ts" | "prevHash" | "rowHash"
|
|
53
|
+
> & {
|
|
54
|
+
readonly id?: bigint;
|
|
55
|
+
readonly ts?: number;
|
|
56
|
+
readonly prevHash?: string | null;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export function createAuditLogRow(input: AuditLogRowInput): AuditLogRow {
|
|
60
|
+
const rowWithoutHash = {
|
|
61
|
+
id: input.id ?? 0n,
|
|
62
|
+
ts: input.ts ?? Date.now(),
|
|
63
|
+
actor: input.actor,
|
|
64
|
+
kind: input.kind,
|
|
65
|
+
scope: input.scope,
|
|
66
|
+
actionName: input.actionName,
|
|
67
|
+
paramsHash: input.paramsHash,
|
|
68
|
+
approvalId: input.approvalId,
|
|
69
|
+
outcome: input.outcome,
|
|
70
|
+
failureCode: input.failureCode,
|
|
71
|
+
detail: input.detail,
|
|
72
|
+
prevHash: input.prevHash ?? AUDIT_GENESIS_HASH,
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
...rowWithoutHash,
|
|
76
|
+
rowHash: computeAuditLogRowHash(rowWithoutHash),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function verifyAuditLogRow(row: AuditLogRow): boolean {
|
|
81
|
+
return row.rowHash === computeAuditLogRowHash(row);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function computeAuditLogRowHash(row: Omit<AuditLogRow, "rowHash">): string {
|
|
85
|
+
const canonical = JSON.stringify({
|
|
86
|
+
id: row.id.toString(),
|
|
87
|
+
ts: row.ts,
|
|
88
|
+
actor: row.actor,
|
|
89
|
+
kind: row.kind,
|
|
90
|
+
scope: row.scope,
|
|
91
|
+
actionName: row.actionName,
|
|
92
|
+
paramsHash: row.paramsHash,
|
|
93
|
+
approvalId: row.approvalId,
|
|
94
|
+
outcome: row.outcome,
|
|
95
|
+
failureCode: row.failureCode,
|
|
96
|
+
detail: row.detail,
|
|
97
|
+
prevHash: row.prevHash,
|
|
98
|
+
});
|
|
99
|
+
return createHash(AUDIT_HASH_ALGORITHM).update(canonical).digest("hex");
|
|
100
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
|
+
// biome-ignore-all lint/correctness/noInnerDeclarations: this injected browser template intentionally uses function-scoped var declarations for compatibility.
|
|
2
3
|
/**
|
|
3
4
|
* Wallet shim — runs inside an arbitrary dApp page (in MAIN world) and exposes
|
|
4
5
|
* the agent's resident keypairs as both a Solana Wallet-Standard wallet and an
|
|
@@ -6,7 +7,7 @@
|
|
|
6
7
|
* HTTP API (`@elizaos/plugin-wallet` sign endpoints) over fetch.
|
|
7
8
|
*
|
|
8
9
|
* The shim is consumed via `buildWalletShim({ apiBase, signToken, walletName,
|
|
9
|
-
* walletIcon, solanaPublicKey, evmAddress })` which substitutes the
|
|
10
|
+
* walletIcon, solanaPublicKey, evmAddress })` which substitutes the config
|
|
10
11
|
* `__SHIM_CONFIG__` token and returns a self-contained string suitable for
|
|
11
12
|
* `Page.addInitScript` / `BROWSER eval` / a MAIN-world content script.
|
|
12
13
|
*
|
|
@@ -32,7 +33,9 @@
|
|
|
32
33
|
for (var i = 0; i < bytes.length; i += chunk) {
|
|
33
34
|
bin += String.fromCharCode.apply(
|
|
34
35
|
null,
|
|
35
|
-
bytes.subarray
|
|
36
|
+
bytes.subarray
|
|
37
|
+
? bytes.subarray(i, i + chunk)
|
|
38
|
+
: bytes.slice(i, i + chunk),
|
|
36
39
|
);
|
|
37
40
|
}
|
|
38
41
|
return btoa(bin);
|
|
@@ -43,11 +46,11 @@
|
|
|
43
46
|
for (var i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
|
|
44
47
|
return out;
|
|
45
48
|
}
|
|
46
|
-
function
|
|
49
|
+
function _bytesToHex(bytes) {
|
|
47
50
|
var out = "0x";
|
|
48
51
|
for (var i = 0; i < bytes.length; i++) {
|
|
49
52
|
var h = bytes[i].toString(16);
|
|
50
|
-
out += h.length === 1 ?
|
|
53
|
+
out += h.length === 1 ? `0${h}` : h;
|
|
51
54
|
}
|
|
52
55
|
return out;
|
|
53
56
|
}
|
|
@@ -56,7 +59,7 @@
|
|
|
56
59
|
}
|
|
57
60
|
// base58 (Bitcoin alphabet) — small impl, only needed to log the active key
|
|
58
61
|
var B58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
59
|
-
function
|
|
62
|
+
function _base58Encode(bytes) {
|
|
60
63
|
var digits = [0];
|
|
61
64
|
for (var i = 0; i < bytes.length; i++) {
|
|
62
65
|
var carry = bytes[i];
|
|
@@ -100,13 +103,13 @@
|
|
|
100
103
|
method: "POST",
|
|
101
104
|
headers: {
|
|
102
105
|
"Content-Type": "application/json",
|
|
103
|
-
Authorization:
|
|
106
|
+
Authorization: `Bearer ${CONFIG.signToken}`,
|
|
104
107
|
},
|
|
105
108
|
body: JSON.stringify(body || {}),
|
|
106
|
-
}).then(
|
|
109
|
+
}).then((r) => {
|
|
107
110
|
if (!r.ok) {
|
|
108
|
-
return r.text().then(
|
|
109
|
-
throw new Error(
|
|
111
|
+
return r.text().then((t) => {
|
|
112
|
+
throw new Error(`wallet-shim ${path} ${r.status}: ${t}`);
|
|
110
113
|
});
|
|
111
114
|
}
|
|
112
115
|
return r.json();
|
|
@@ -117,17 +120,15 @@
|
|
|
117
120
|
function makeEmitter() {
|
|
118
121
|
var listeners = {};
|
|
119
122
|
return {
|
|
120
|
-
on:
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
});
|
|
123
|
+
on: (e, l) => {
|
|
124
|
+
listeners[e] = listeners[e] || [];
|
|
125
|
+
listeners[e].push(l);
|
|
126
|
+
return () => {
|
|
127
|
+
listeners[e] = (listeners[e] || []).filter((x) => x !== l);
|
|
126
128
|
};
|
|
127
129
|
},
|
|
128
|
-
emit:
|
|
129
|
-
|
|
130
|
-
(listeners[e] || []).forEach(function (l) {
|
|
130
|
+
emit: (e, ...args) => {
|
|
131
|
+
(listeners[e] || []).forEach((l) => {
|
|
131
132
|
try {
|
|
132
133
|
l.apply(null, args);
|
|
133
134
|
} catch (_) {}
|
|
@@ -167,46 +168,40 @@
|
|
|
167
168
|
|
|
168
169
|
function signTransaction(input) {
|
|
169
170
|
var inputs = Array.isArray(input) ? input : [input];
|
|
170
|
-
var b64s = inputs.map(
|
|
171
|
-
return bytesToBase64(i.transaction);
|
|
172
|
-
});
|
|
171
|
+
var b64s = inputs.map((i) => bytesToBase64(i.transaction));
|
|
173
172
|
return api("/wallet/solana/sign-all-transactions", {
|
|
174
173
|
transactionsBase64: b64s,
|
|
175
|
-
}).then(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
})
|
|
179
|
-
|
|
174
|
+
}).then((resp) =>
|
|
175
|
+
resp.signedBase64s.map((b64) => ({
|
|
176
|
+
signedTransaction: base64ToBytes(b64),
|
|
177
|
+
})),
|
|
178
|
+
);
|
|
180
179
|
}
|
|
181
180
|
|
|
182
181
|
function signAndSendTransaction(input) {
|
|
183
182
|
var inputs = Array.isArray(input) ? input : [input];
|
|
184
183
|
return Promise.all(
|
|
185
|
-
inputs.map(
|
|
186
|
-
|
|
184
|
+
inputs.map((i) =>
|
|
185
|
+
api("/wallet/solana/sign-and-send-transaction", {
|
|
187
186
|
transactionBase64: bytesToBase64(i.transaction),
|
|
188
187
|
sendOptions: i.options || {},
|
|
189
|
-
}).then(
|
|
190
|
-
|
|
191
|
-
});
|
|
192
|
-
}),
|
|
188
|
+
}).then((resp) => ({ signature: base58Decode(resp.signature) })),
|
|
189
|
+
),
|
|
193
190
|
);
|
|
194
191
|
}
|
|
195
192
|
|
|
196
193
|
function signMessage(input) {
|
|
197
194
|
var inputs = Array.isArray(input) ? input : [input];
|
|
198
195
|
return Promise.all(
|
|
199
|
-
inputs.map(
|
|
200
|
-
|
|
196
|
+
inputs.map((i) =>
|
|
197
|
+
api("/wallet/solana/sign-message", {
|
|
201
198
|
messageBase64: bytesToBase64(i.message),
|
|
202
|
-
}).then(
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
});
|
|
209
|
-
}),
|
|
199
|
+
}).then((resp) => ({
|
|
200
|
+
signedMessage: i.message,
|
|
201
|
+
signature: base64ToBytes(resp.signatureBase64),
|
|
202
|
+
signatureType: "ed25519",
|
|
203
|
+
})),
|
|
204
|
+
),
|
|
210
205
|
);
|
|
211
206
|
}
|
|
212
207
|
|
|
@@ -221,9 +216,7 @@
|
|
|
221
216
|
"standard:disconnect": { version: "1.0.0", disconnect: disconnect },
|
|
222
217
|
"standard:events": {
|
|
223
218
|
version: "1.0.0",
|
|
224
|
-
on:
|
|
225
|
-
return emitter.on(e, l);
|
|
226
|
-
},
|
|
219
|
+
on: (e, l) => emitter.on(e, l),
|
|
227
220
|
},
|
|
228
221
|
"solana:signTransaction": {
|
|
229
222
|
version: "1.0.0",
|
|
@@ -246,7 +239,7 @@
|
|
|
246
239
|
function registerCallback(api) {
|
|
247
240
|
try {
|
|
248
241
|
api.register(wallet);
|
|
249
|
-
} catch (
|
|
242
|
+
} catch (_e) {
|
|
250
243
|
// already registered or registry refused — non-fatal
|
|
251
244
|
}
|
|
252
245
|
}
|
|
@@ -264,8 +257,8 @@
|
|
|
264
257
|
try {
|
|
265
258
|
window.addEventListener(
|
|
266
259
|
"wallet-standard:app-ready",
|
|
267
|
-
|
|
268
|
-
if (e
|
|
260
|
+
(e) => {
|
|
261
|
+
if (e?.detail) registerCallback(e.detail);
|
|
269
262
|
},
|
|
270
263
|
false,
|
|
271
264
|
);
|
|
@@ -284,88 +277,95 @@
|
|
|
284
277
|
var phantomLike = {
|
|
285
278
|
isPhantom: true,
|
|
286
279
|
isConnected: true,
|
|
287
|
-
publicKey: {
|
|
280
|
+
publicKey: {
|
|
281
|
+
toBase58: () => publicKey,
|
|
282
|
+
toBuffer: () => publicKeyBytes,
|
|
283
|
+
toBytes: () => publicKeyBytes,
|
|
284
|
+
toString: () => publicKey,
|
|
285
|
+
},
|
|
288
286
|
connect: function () {
|
|
289
287
|
return Promise.resolve({ publicKey: this.publicKey });
|
|
290
288
|
},
|
|
291
|
-
disconnect:
|
|
289
|
+
disconnect: () => {
|
|
292
290
|
emitter.emit("disconnect");
|
|
293
291
|
return Promise.resolve();
|
|
294
292
|
},
|
|
295
293
|
on: emitter.on,
|
|
296
|
-
off:
|
|
297
|
-
signTransaction:
|
|
294
|
+
off: () => {},
|
|
295
|
+
signTransaction: (tx) => {
|
|
298
296
|
// legacy phantom returns a single signed tx (Transaction object); we
|
|
299
297
|
// only have raw bytes so dApps using the new adapter pattern get the
|
|
300
298
|
// proper Wallet-Standard call instead.
|
|
301
299
|
var serialized =
|
|
302
300
|
typeof tx.serialize === "function"
|
|
303
|
-
? tx.serialize({
|
|
301
|
+
? tx.serialize({
|
|
302
|
+
requireAllSignatures: false,
|
|
303
|
+
verifySignatures: false,
|
|
304
|
+
})
|
|
304
305
|
: tx;
|
|
305
306
|
return api("/wallet/solana/sign-transaction", {
|
|
306
307
|
transactionBase64: bytesToBase64(new Uint8Array(serialized)),
|
|
307
|
-
}).then(
|
|
308
|
+
}).then((resp) => {
|
|
308
309
|
var bytes = base64ToBytes(resp.signedBase64);
|
|
309
310
|
// Try to populate signatures back into the original tx object so
|
|
310
311
|
// dApp code that does `tx.signatures` keeps working.
|
|
311
312
|
if (tx && Array.isArray(tx.signatures)) {
|
|
312
|
-
//
|
|
313
|
+
// Return raw bytes so the dApp can re-deserialize.
|
|
313
314
|
}
|
|
314
315
|
// Most dApps either re-deserialize or call signAndSend; expose bytes
|
|
315
316
|
// via `serialize()` on the returned object.
|
|
316
317
|
return {
|
|
317
|
-
serialize:
|
|
318
|
-
return bytes;
|
|
319
|
-
},
|
|
318
|
+
serialize: () => bytes,
|
|
320
319
|
__signedBytes: bytes,
|
|
321
320
|
};
|
|
322
321
|
});
|
|
323
322
|
},
|
|
324
|
-
signAllTransactions:
|
|
325
|
-
var b64s = txs.map(
|
|
323
|
+
signAllTransactions: (txs) => {
|
|
324
|
+
var b64s = txs.map((tx) => {
|
|
326
325
|
var serialized =
|
|
327
326
|
typeof tx.serialize === "function"
|
|
328
|
-
? tx.serialize({
|
|
327
|
+
? tx.serialize({
|
|
328
|
+
requireAllSignatures: false,
|
|
329
|
+
verifySignatures: false,
|
|
330
|
+
})
|
|
329
331
|
: tx;
|
|
330
332
|
return bytesToBase64(new Uint8Array(serialized));
|
|
331
333
|
});
|
|
332
334
|
return api("/wallet/solana/sign-all-transactions", {
|
|
333
335
|
transactionsBase64: b64s,
|
|
334
|
-
}).then(
|
|
335
|
-
|
|
336
|
+
}).then((resp) =>
|
|
337
|
+
resp.signedBase64s.map((b64) => {
|
|
336
338
|
var bytes = base64ToBytes(b64);
|
|
337
339
|
return {
|
|
338
|
-
serialize:
|
|
339
|
-
return bytes;
|
|
340
|
-
},
|
|
340
|
+
serialize: () => bytes,
|
|
341
341
|
__signedBytes: bytes,
|
|
342
342
|
};
|
|
343
|
-
})
|
|
344
|
-
|
|
343
|
+
}),
|
|
344
|
+
);
|
|
345
345
|
},
|
|
346
|
-
signMessage:
|
|
347
|
-
|
|
346
|
+
signMessage: (message, _encoding) =>
|
|
347
|
+
api("/wallet/solana/sign-message", {
|
|
348
348
|
messageBase64: bytesToBase64(
|
|
349
|
-
message instanceof Uint8Array
|
|
349
|
+
message instanceof Uint8Array
|
|
350
|
+
? message
|
|
351
|
+
: utf8ToBytes(String(message)),
|
|
350
352
|
),
|
|
351
|
-
}).then(
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
});
|
|
357
|
-
},
|
|
358
|
-
signAndSendTransaction: function (tx, options) {
|
|
353
|
+
}).then((resp) => ({
|
|
354
|
+
signature: base64ToBytes(resp.signatureBase64),
|
|
355
|
+
publicKey: { toBase58: () => publicKey },
|
|
356
|
+
})),
|
|
357
|
+
signAndSendTransaction: (tx, options) => {
|
|
359
358
|
var serialized =
|
|
360
359
|
typeof tx.serialize === "function"
|
|
361
|
-
? tx.serialize({
|
|
360
|
+
? tx.serialize({
|
|
361
|
+
requireAllSignatures: false,
|
|
362
|
+
verifySignatures: false,
|
|
363
|
+
})
|
|
362
364
|
: tx;
|
|
363
365
|
return api("/wallet/solana/sign-and-send-transaction", {
|
|
364
366
|
transactionBase64: bytesToBase64(new Uint8Array(serialized)),
|
|
365
367
|
sendOptions: options || {},
|
|
366
|
-
}).then(
|
|
367
|
-
return { signature: resp.signature };
|
|
368
|
-
});
|
|
368
|
+
}).then((resp) => ({ signature: resp.signature }));
|
|
369
369
|
},
|
|
370
370
|
};
|
|
371
371
|
|
|
@@ -392,7 +392,7 @@
|
|
|
392
392
|
if (!CONFIG.evmAddress) return;
|
|
393
393
|
var address = CONFIG.evmAddress.toLowerCase();
|
|
394
394
|
var emitter = makeEmitter();
|
|
395
|
-
var chainId =
|
|
395
|
+
var chainId = `0x${CONFIG.evmChainId.toString(16)}`;
|
|
396
396
|
|
|
397
397
|
function rpc(method, params) {
|
|
398
398
|
// Forward read-only RPC methods to a public RPC for this chain. The agent
|
|
@@ -408,10 +408,8 @@
|
|
|
408
408
|
params: params || [],
|
|
409
409
|
}),
|
|
410
410
|
})
|
|
411
|
-
.then(
|
|
412
|
-
|
|
413
|
-
})
|
|
414
|
-
.then(function (j) {
|
|
411
|
+
.then((r) => r.json())
|
|
412
|
+
.then((j) => {
|
|
415
413
|
if (j.error) throw new Error(j.error.message || "rpc error");
|
|
416
414
|
return j.result;
|
|
417
415
|
});
|
|
@@ -421,9 +419,9 @@
|
|
|
421
419
|
isMetaMask: true, // many dApps gate connect-button discovery on this
|
|
422
420
|
isElizaWallet: true,
|
|
423
421
|
_state: { isConnected: true, accounts: [address], chainId: chainId },
|
|
424
|
-
request:
|
|
425
|
-
var method = args
|
|
426
|
-
var params =
|
|
422
|
+
request: (args) => {
|
|
423
|
+
var method = args?.method;
|
|
424
|
+
var params = args?.params || [];
|
|
427
425
|
switch (method) {
|
|
428
426
|
case "eth_requestAccounts":
|
|
429
427
|
case "eth_accounts":
|
|
@@ -431,11 +429,13 @@
|
|
|
431
429
|
case "eth_chainId":
|
|
432
430
|
case "net_version":
|
|
433
431
|
return Promise.resolve(
|
|
434
|
-
method === "net_version"
|
|
432
|
+
method === "net_version"
|
|
433
|
+
? String(parseInt(chainId, 16))
|
|
434
|
+
: chainId,
|
|
435
435
|
);
|
|
436
436
|
case "wallet_switchEthereumChain":
|
|
437
437
|
try {
|
|
438
|
-
var nextHex = params[0]
|
|
438
|
+
var nextHex = params[0]?.chainId;
|
|
439
439
|
if (typeof nextHex === "string") {
|
|
440
440
|
chainId = nextHex;
|
|
441
441
|
emitter.emit("chainChanged", chainId);
|
|
@@ -459,17 +459,13 @@
|
|
|
459
459
|
maybeAddr = swap;
|
|
460
460
|
}
|
|
461
461
|
return api("/wallet/evm/personal-sign", { message: msg }).then(
|
|
462
|
-
|
|
463
|
-
return r.signature;
|
|
464
|
-
},
|
|
462
|
+
(r) => r.signature,
|
|
465
463
|
);
|
|
466
464
|
}
|
|
467
465
|
case "eth_sign": {
|
|
468
|
-
return api("/wallet/evm/personal-sign", {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
},
|
|
472
|
-
);
|
|
466
|
+
return api("/wallet/evm/personal-sign", {
|
|
467
|
+
message: params[1],
|
|
468
|
+
}).then((r) => r.signature);
|
|
473
469
|
}
|
|
474
470
|
case "eth_signTypedData_v4":
|
|
475
471
|
case "eth_signTypedData": {
|
|
@@ -480,9 +476,7 @@
|
|
|
480
476
|
} catch (_) {}
|
|
481
477
|
}
|
|
482
478
|
return api("/wallet/evm/sign-typed-data", { typedData: data }).then(
|
|
483
|
-
|
|
484
|
-
return r.signature;
|
|
485
|
-
},
|
|
479
|
+
(r) => r.signature,
|
|
486
480
|
);
|
|
487
481
|
}
|
|
488
482
|
case "eth_sendTransaction": {
|
|
@@ -490,31 +484,25 @@
|
|
|
490
484
|
return api("/wallet/evm/send-transaction", {
|
|
491
485
|
chainId: parseInt(chainId, 16),
|
|
492
486
|
tx: tx,
|
|
493
|
-
}).then(
|
|
494
|
-
return r.hash;
|
|
495
|
-
});
|
|
487
|
+
}).then((r) => r.hash);
|
|
496
488
|
}
|
|
497
489
|
case "eth_signTransaction": {
|
|
498
490
|
var tx2 = params[0] || {};
|
|
499
491
|
return api("/wallet/evm/sign-transaction", {
|
|
500
492
|
chainId: parseInt(chainId, 16),
|
|
501
493
|
tx: tx2,
|
|
502
|
-
}).then(
|
|
503
|
-
return r.signedTransaction;
|
|
504
|
-
});
|
|
494
|
+
}).then((r) => r.signedTransaction);
|
|
505
495
|
}
|
|
506
496
|
default:
|
|
507
497
|
// forward read-only methods to public RPC
|
|
508
498
|
return rpc(method, params);
|
|
509
499
|
}
|
|
510
500
|
},
|
|
511
|
-
on:
|
|
501
|
+
on: (e, l) => {
|
|
512
502
|
emitter.on(e, l);
|
|
513
503
|
},
|
|
514
|
-
removeListener:
|
|
515
|
-
enable:
|
|
516
|
-
return Promise.resolve([address]);
|
|
517
|
-
},
|
|
504
|
+
removeListener: () => {},
|
|
505
|
+
enable: () => Promise.resolve([address]),
|
|
518
506
|
};
|
|
519
507
|
|
|
520
508
|
try {
|
|
@@ -533,7 +521,9 @@
|
|
|
533
521
|
var info = {
|
|
534
522
|
uuid:
|
|
535
523
|
"00000000-0000-4000-8000-" +
|
|
536
|
-
|
|
524
|
+
`000000000000${Math.floor(Math.random() * 1e12).toString(16)}`.slice(
|
|
525
|
+
-12,
|
|
526
|
+
),
|
|
537
527
|
name: CONFIG.walletName,
|
|
538
528
|
icon: CONFIG.walletIcon,
|
|
539
529
|
rdns: "ai.elizaos.wallet",
|
|
@@ -552,7 +542,7 @@
|
|
|
552
542
|
announce();
|
|
553
543
|
|
|
554
544
|
// Notify dApps that a connected wallet exists.
|
|
555
|
-
setTimeout(
|
|
545
|
+
setTimeout(() => {
|
|
556
546
|
emitter.emit("connect", { chainId: chainId });
|
|
557
547
|
emitter.emit("accountsChanged", [address]);
|
|
558
548
|
}, 0);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { HandlerOptions, IAgentRuntime, Memory } from "@elizaos/core";
|
|
2
2
|
import { describe, expect, it, vi } from "vitest";
|
|
3
|
-
import { WalletBackendService } from "
|
|
3
|
+
import { WalletBackendService } from "../../services/wallet-backend-service";
|
|
4
4
|
import type {
|
|
5
5
|
WalletChainHandler,
|
|
6
6
|
WalletRouterExecution,
|
|
7
7
|
WalletRouterParams,
|
|
8
|
-
} from "
|
|
9
|
-
import { walletRouterAction } from "
|
|
8
|
+
} from "../../types/wallet-router";
|
|
9
|
+
import { walletRouterAction } from "../wallet-action";
|
|
10
10
|
|
|
11
11
|
function createRuntime(): IAgentRuntime {
|
|
12
12
|
const logger = {
|
|
@@ -16,12 +16,22 @@ function createRuntime(): IAgentRuntime {
|
|
|
16
16
|
log: vi.fn(),
|
|
17
17
|
warn: vi.fn(),
|
|
18
18
|
};
|
|
19
|
+
const cache = new Map<string, unknown>();
|
|
19
20
|
const runtime = {
|
|
20
21
|
agentId: "test-agent",
|
|
21
22
|
character: { name: "Test Agent", settings: {} },
|
|
22
23
|
getService: vi.fn(() => null),
|
|
23
24
|
getServicesByType: vi.fn(() => []),
|
|
24
25
|
getSetting: vi.fn(() => null),
|
|
26
|
+
getCache: vi.fn(async <T>(key: string) => cache.get(key) as T | undefined),
|
|
27
|
+
setCache: vi.fn(async (key: string, value: unknown) => {
|
|
28
|
+
cache.set(key, value);
|
|
29
|
+
return true;
|
|
30
|
+
}),
|
|
31
|
+
deleteCache: vi.fn(async (key: string) => {
|
|
32
|
+
cache.delete(key);
|
|
33
|
+
return true;
|
|
34
|
+
}),
|
|
25
35
|
logger,
|
|
26
36
|
};
|
|
27
37
|
|
|
@@ -99,17 +109,36 @@ function handler(
|
|
|
99
109
|
};
|
|
100
110
|
}
|
|
101
111
|
|
|
102
|
-
function message(): Memory {
|
|
112
|
+
function message(text = "wallet action"): Memory {
|
|
103
113
|
return {
|
|
104
114
|
id: "00000000-0000-0000-0000-000000000001",
|
|
105
115
|
entityId: "00000000-0000-0000-0000-000000000002",
|
|
106
116
|
agentId: "00000000-0000-0000-0000-000000000003",
|
|
107
117
|
roomId: "00000000-0000-0000-0000-000000000004",
|
|
108
|
-
content: { text
|
|
118
|
+
content: { text },
|
|
109
119
|
createdAt: Date.now(),
|
|
110
120
|
} as Memory;
|
|
111
121
|
}
|
|
112
122
|
|
|
123
|
+
async function runConfirmed(
|
|
124
|
+
runtime: IAgentRuntime,
|
|
125
|
+
parameters: Record<string, unknown>,
|
|
126
|
+
) {
|
|
127
|
+
const first = await walletRouterAction.handler(
|
|
128
|
+
runtime,
|
|
129
|
+
message("please transfer"),
|
|
130
|
+
undefined,
|
|
131
|
+
{ parameters } as HandlerOptions,
|
|
132
|
+
);
|
|
133
|
+
expect(first?.data?.requiresConfirmation).toBe(true);
|
|
134
|
+
return walletRouterAction.handler(
|
|
135
|
+
runtime,
|
|
136
|
+
message("yes, confirm"),
|
|
137
|
+
undefined,
|
|
138
|
+
{ parameters } as HandlerOptions,
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
|
|
113
142
|
async function run(
|
|
114
143
|
runtime: IAgentRuntime,
|
|
115
144
|
parameters: Record<string, unknown>,
|
|
@@ -125,7 +154,7 @@ describe("wallet router action", () => {
|
|
|
125
154
|
const base = handler("base", "Base", "8453", "evm");
|
|
126
155
|
service.registerChainHandler(base);
|
|
127
156
|
|
|
128
|
-
const result = await
|
|
157
|
+
const result = await runConfirmed(runtime, {
|
|
129
158
|
subaction: "transfer",
|
|
130
159
|
chain: "base",
|
|
131
160
|
fromToken: "ETH",
|
|
@@ -152,7 +181,7 @@ describe("wallet router action", () => {
|
|
|
152
181
|
const base = handler("base", "Base", "8453", "evm");
|
|
153
182
|
service.registerChainHandler(base);
|
|
154
183
|
|
|
155
|
-
const result = await
|
|
184
|
+
const result = await runConfirmed(runtime, {
|
|
156
185
|
subaction: "swap",
|
|
157
186
|
chain: "8453",
|
|
158
187
|
fromToken: "0x0000000000000000000000000000000000000000",
|
|
@@ -179,7 +208,7 @@ describe("wallet router action", () => {
|
|
|
179
208
|
const solana = handler("solana", "Solana", "solana-mainnet", "solana");
|
|
180
209
|
service.registerChainHandler(solana);
|
|
181
210
|
|
|
182
|
-
const transfer = await
|
|
211
|
+
const transfer = await runConfirmed(runtime, {
|
|
183
212
|
subaction: "transfer",
|
|
184
213
|
chain: "sol",
|
|
185
214
|
fromToken: "SOL",
|
|
@@ -187,7 +216,7 @@ describe("wallet router action", () => {
|
|
|
187
216
|
recipient: "9xQeWvG816bUx9EPfWJXn4xHLh1BaK7Z7QXDXuGpS9SW",
|
|
188
217
|
mode: "execute",
|
|
189
218
|
});
|
|
190
|
-
const swap = await
|
|
219
|
+
const swap = await runConfirmed(runtime, {
|
|
191
220
|
subaction: "swap",
|
|
192
221
|
chain: "solana",
|
|
193
222
|
fromToken: "SOL",
|
|
@@ -255,7 +284,7 @@ describe("wallet router action", () => {
|
|
|
255
284
|
const base = handler("base", "Base", "8453", "evm");
|
|
256
285
|
service.registerChainHandler(base);
|
|
257
286
|
|
|
258
|
-
const result = await
|
|
287
|
+
const result = await runConfirmed(runtime, {
|
|
259
288
|
subaction: "swap",
|
|
260
289
|
fromToken: "ETH",
|
|
261
290
|
toToken: "USDC",
|
|
@@ -271,6 +300,24 @@ describe("wallet router action", () => {
|
|
|
271
300
|
expect(result?.data?.chain).toBe("base");
|
|
272
301
|
});
|
|
273
302
|
|
|
303
|
+
it("does not execute when LLM sets confirmed:true without a user yes reply", async () => {
|
|
304
|
+
const { runtime, service } = createService();
|
|
305
|
+
const base = handler("base", "Base", "8453", "evm");
|
|
306
|
+
service.registerChainHandler(base);
|
|
307
|
+
|
|
308
|
+
const result = await run(runtime, {
|
|
309
|
+
subaction: "transfer",
|
|
310
|
+
chain: "base",
|
|
311
|
+
amount: "0.5",
|
|
312
|
+
recipient: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
|
|
313
|
+
mode: "execute",
|
|
314
|
+
confirmed: true,
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
expect(result?.data?.requiresConfirmation).toBe(true);
|
|
318
|
+
expect(base.execute).not.toHaveBeenCalled();
|
|
319
|
+
});
|
|
320
|
+
|
|
274
321
|
it("prepares dry-run metadata without executing", async () => {
|
|
275
322
|
const { runtime, service } = createService();
|
|
276
323
|
const base = handler("base", "Base", "8453", "evm");
|