@elizaos/plugin-wallet 2.0.0-beta.1 → 2.0.3-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -45
- package/auto-enable.ts +1 -1
- package/dist/actions/failure-codes.d.ts +12 -0
- package/dist/actions/index.d.ts +1 -0
- package/dist/analytics/birdeye/actions/wallet-search-address.d.ts +7 -0
- package/dist/analytics/birdeye/birdeye-task.d.ts +27 -0
- package/dist/analytics/birdeye/birdeye.d.ts +140 -0
- package/dist/analytics/birdeye/constants.d.ts +68 -0
- package/dist/analytics/birdeye/providers/agent-portfolio-provider.d.ts +8 -0
- package/dist/analytics/birdeye/providers/market.d.ts +18 -0
- package/dist/analytics/birdeye/providers/portfolio-factory.d.ts +10 -0
- package/dist/analytics/birdeye/providers/trending.d.ts +19 -0
- package/dist/analytics/birdeye/providers/wallet.d.ts +5 -0
- package/dist/analytics/birdeye/search-category.d.ts +52 -0
- package/dist/analytics/birdeye/service.d.ts +94 -0
- package/dist/analytics/birdeye/types/api/common.d.ts +199 -0
- package/dist/analytics/birdeye/types/api/defi.d.ts +187 -0
- package/dist/analytics/birdeye/types/api/pair.d.ts +182 -0
- package/dist/analytics/birdeye/types/api/search.d.ts +64 -0
- package/dist/analytics/birdeye/types/api/token.d.ts +580 -0
- package/dist/analytics/birdeye/types/api/trader.d.ts +70 -0
- package/dist/analytics/birdeye/types/api/wallet.d.ts +161 -0
- package/dist/analytics/birdeye/types/shared.d.ts +83 -0
- package/dist/analytics/birdeye/utils.d.ts +74 -0
- package/dist/analytics/dexscreener/errors.d.ts +2 -0
- package/dist/analytics/dexscreener/index.d.ts +3 -0
- package/dist/analytics/dexscreener/search-category.d.ts +3 -0
- package/dist/analytics/dexscreener/service.d.ts +34 -0
- package/dist/analytics/dexscreener/types.d.ts +131 -0
- package/dist/analytics/lpinfo/index.d.ts +31 -0
- package/dist/analytics/lpinfo/kamino/index.d.ts +7 -0
- package/dist/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.d.ts +6 -0
- package/dist/analytics/lpinfo/kamino/providers/kaminoPoolProvider.d.ts +6 -0
- package/dist/analytics/lpinfo/kamino/providers/kaminoProvider.d.ts +6 -0
- package/dist/analytics/lpinfo/kamino/services/kaminoLiquidityService.d.ts +203 -0
- package/dist/analytics/lpinfo/kamino/services/kaminoService.d.ts +171 -0
- package/dist/analytics/lpinfo/steer/index.d.ts +7 -0
- package/dist/analytics/lpinfo/steer/providers/steerLiquidityProvider.d.ts +6 -0
- package/dist/analytics/lpinfo/steer/services/steerLiquidityService.d.ts +208 -0
- package/dist/analytics/lpinfo/steer/steer-display-types.d.ts +97 -0
- package/dist/analytics/news/index.d.ts +32 -0
- package/dist/analytics/news/interfaces/types.d.ts +177 -0
- package/dist/analytics/news/providers/defiNewsProvider.d.ts +106 -0
- package/dist/analytics/news/services/newsDataService.d.ts +72 -0
- package/dist/analytics/news/utils/formatters.d.ts +54 -0
- package/dist/analytics/token-info/action.d.ts +6 -0
- package/dist/analytics/token-info/index.d.ts +3 -0
- package/dist/analytics/token-info/params.d.ts +10 -0
- package/dist/analytics/token-info/providers.d.ts +4 -0
- package/dist/analytics/token-info/service.d.ts +19 -0
- package/dist/analytics/token-info/types.d.ts +45 -0
- package/dist/api/wallet-routes.d.ts +100 -0
- package/dist/audit/audit-log.d.ts +29 -0
- package/dist/browser-shim/build-shim.d.ts +31 -0
- package/dist/browser-shim/index.d.ts +1 -0
- package/dist/chains/evm/actions/helpers.d.ts +31 -0
- package/dist/chains/evm/actions/swap.d.ts +53 -0
- package/dist/chains/evm/actions/transfer.d.ts +10 -0
- package/dist/chains/evm/bridge-router.d.ts +44 -0
- package/dist/chains/evm/build.d.ts +2 -0
- package/dist/chains/evm/chain-handler.d.ts +37 -0
- package/dist/chains/evm/constants.d.ts +16 -0
- package/dist/chains/evm/dex/aerodrome/index.d.ts +6 -0
- package/dist/chains/evm/dex/aerodrome/services/AerodromeLpService.d.ts +27 -0
- package/dist/chains/evm/dex/aerodrome/types.d.ts +435 -0
- package/dist/chains/evm/dex/pancakeswp/index.d.ts +6 -0
- package/dist/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.d.ts +28 -0
- package/dist/chains/evm/dex/pancakeswp/types.d.ts +19 -0
- package/dist/chains/evm/dex/uniswap/index.d.ts +6 -0
- package/dist/chains/evm/dex/uniswap/services/UniswapV3LpService.d.ts +28 -0
- package/dist/chains/evm/dex/uniswap/types.d.ts +458 -0
- package/dist/chains/evm/generated/specs/spec-helpers.d.ts +35 -0
- package/dist/chains/evm/generated/specs/specs.d.ts +99 -0
- package/dist/chains/evm/gov-router.d.ts +6 -0
- package/dist/chains/evm/index.browser.d.ts +3 -0
- package/dist/chains/evm/index.d.ts +6 -0
- package/dist/chains/evm/prompts.d.ts +24 -0
- package/dist/chains/evm/providers/get-balance.d.ts +2 -0
- package/dist/chains/evm/providers/wallet.d.ts +35 -0
- package/dist/chains/evm/routes/sign.d.ts +13 -0
- package/dist/chains/evm/rpc-providers.d.ts +26 -0
- package/dist/chains/evm/service.d.ts +26 -0
- package/dist/chains/evm/templates/index.d.ts +1 -0
- package/dist/chains/evm/types/index.d.ts +296 -0
- package/dist/chains/evm/vitest.config.d.ts +2 -0
- package/dist/chains/registry.d.ts +3 -0
- package/dist/chains/solana/actions/confirmation.d.ts +9 -0
- package/dist/chains/solana/bn.d.ts +6 -0
- package/dist/chains/solana/build.d.ts +2 -0
- package/dist/chains/solana/constants.d.ts +2 -0
- package/dist/chains/solana/dex/meteora/e2e/scenarios.d.ts +10 -0
- package/dist/chains/solana/dex/meteora/e2e/test-utils.d.ts +28 -0
- package/dist/chains/solana/dex/meteora/index.d.ts +3 -0
- package/dist/chains/solana/dex/meteora/providers/positionProvider.d.ts +9 -0
- package/dist/chains/solana/dex/meteora/services/MeteoraLpService.d.ts +37 -0
- package/dist/chains/solana/dex/meteora/utils/dlmm.d.ts +6 -0
- package/dist/chains/solana/dex/meteora/utils/loadWallet.d.ts +14 -0
- package/dist/chains/solana/dex/meteora/utils/sendTransaction.d.ts +2 -0
- package/dist/chains/solana/dex/orca/index.d.ts +6 -0
- package/dist/chains/solana/dex/orca/providers/positionProvider.d.ts +10 -0
- package/dist/chains/solana/dex/orca/services/srv_orca.d.ts +10 -0
- package/dist/chains/solana/dex/orca/types.d.ts +61 -0
- package/dist/chains/solana/dex/orca/utils/loadWallet.d.ts +1 -0
- package/dist/chains/solana/dex/orca/utils/sendTransaction.d.ts +2 -0
- package/dist/chains/solana/dex/raydium/index.d.ts +6 -0
- package/dist/chains/solana/dex/raydium/providers/positionProvider.d.ts +10 -0
- package/dist/chains/solana/dex/raydium/services/srv_raydium.d.ts +104 -0
- package/dist/chains/solana/dex/raydium/types.d.ts +42 -0
- package/dist/chains/solana/environment.d.ts +15 -0
- package/dist/chains/solana/generated/specs/spec-helpers.d.ts +35 -0
- package/dist/chains/solana/generated/specs/specs.d.ts +73 -0
- package/dist/chains/solana/index.browser.d.ts +3 -0
- package/dist/chains/solana/index.d.ts +7 -0
- package/dist/chains/solana/keypairUtils.d.ts +7 -0
- package/dist/chains/solana/prompts.d.ts +12 -0
- package/dist/chains/solana/providers/wallet.d.ts +2 -0
- package/dist/chains/solana/routes/index.d.ts +2 -0
- package/dist/chains/solana/routes/sign.d.ts +16 -0
- package/dist/chains/solana/service.d.ts +237 -0
- package/dist/chains/solana/types.d.ts +377 -0
- package/dist/chains/solana/vitest.config.d.ts +2 -0
- package/dist/chains/wallet-action.d.ts +3 -0
- package/dist/contracts.d.ts +58 -0
- package/dist/core-augmentation.d.ts +9 -0
- package/dist/index.d.mts +27 -34727
- package/dist/index.d.ts +27 -0
- package/dist/index.mjs +28246 -21186
- package/dist/index.mjs.map +153 -0
- package/dist/lib/server-wallet-trade.d.ts +22 -0
- package/dist/lib/server-wallet-trade.js +333 -0
- package/dist/lib/server-wallet-trade.js.map +11 -0
- package/dist/lib/wallet-export-guard.d.ts +45 -0
- package/dist/lp/actions/liquidity.d.ts +2 -0
- package/dist/lp/e2e/real-token-tests.d.ts +6 -0
- package/dist/lp/e2e/scenarios.d.ts +9 -0
- package/dist/lp/e2e/test-utils.d.ts +28 -0
- package/dist/lp/lp-manager-entry.d.ts +18 -0
- package/dist/lp/services/ConcentratedLiquidityService.d.ts +32 -0
- package/dist/lp/services/DexInteractionService.d.ts +34 -0
- package/dist/lp/services/LpManagementService.d.ts +116 -0
- package/dist/lp/services/UserLpProfileService.d.ts +18 -0
- package/dist/lp/services/VaultService.d.ts +21 -0
- package/dist/lp/services/YieldOptimizationService.d.ts +59 -0
- package/dist/lp/services/__tests__/MockLpService.d.ts +17 -0
- package/dist/lp/types.d.ts +439 -0
- package/dist/lp/utils/solanaClient.d.ts +26 -0
- package/dist/plugin.d.ts +7 -0
- package/dist/policy/policy.d.ts +14 -0
- package/dist/providers/canonical-provider.d.ts +19 -0
- package/dist/providers/wallet-provider.d.ts +5 -0
- package/dist/register-routes.d.ts +1 -0
- package/dist/routes/plugin.d.ts +14 -0
- package/dist/routes/wallet-market-overview-route.d.ts +7 -0
- package/dist/sdk/abi.d.ts +396 -0
- package/dist/sdk/bridge/abis.d.ts +63 -0
- package/dist/sdk/bridge/client.d.ts +48 -0
- package/dist/sdk/bridge/index.d.ts +14 -0
- package/dist/sdk/bridge/solana.d.ts +131 -0
- package/dist/sdk/bridge/types.d.ts +92 -0
- package/dist/sdk/convenience.d.ts +104 -0
- package/dist/sdk/escrow/MutualStakeEscrow.d.ts +75 -0
- package/dist/sdk/escrow/types.d.ts +58 -0
- package/dist/sdk/escrow/verifiers.d.ts +25 -0
- package/dist/sdk/identity/erc8004.d.ts +304 -0
- package/dist/sdk/identity/reputation.d.ts +317 -0
- package/dist/sdk/identity/uaid.d.ts +192 -0
- package/dist/sdk/identity/validation.d.ts +282 -0
- package/dist/sdk/index.d.ts +133 -0
- package/dist/sdk/index.js +5284 -0
- package/dist/sdk/index.js.map +40 -0
- package/dist/sdk/policy/SpendingPolicy.d.ts +105 -0
- package/dist/sdk/policy/UptoBillingPolicy.d.ts +87 -0
- package/dist/sdk/router/PaymentRouter.d.ts +77 -0
- package/dist/sdk/router/index.d.ts +2 -0
- package/dist/sdk/swap/SwapModule.d.ts +47 -0
- package/dist/sdk/swap/abi.d.ts +50 -0
- package/dist/sdk/swap/index.d.ts +11 -0
- package/dist/sdk/swap/types.d.ts +101 -0
- package/dist/sdk/tokens/decimals.d.ts +64 -0
- package/dist/sdk/tokens/registry.d.ts +81 -0
- package/dist/sdk/tokens/solana.d.ts +107 -0
- package/dist/sdk/tokens/transfers.d.ts +94 -0
- package/dist/sdk/types.d.ts +129 -0
- package/dist/sdk/wallet-core.d.ts +29450 -0
- package/dist/sdk/x402/budget.d.ts +51 -0
- package/dist/sdk/x402/chains/abstract/index.d.ts +134 -0
- package/dist/sdk/x402/client.d.ts +66 -0
- package/dist/sdk/x402/index.d.ts +8 -0
- package/dist/sdk/x402/middleware.d.ts +37 -0
- package/dist/sdk/x402/multi-asset.d.ts +53 -0
- package/dist/sdk/x402/types.d.ts +109 -0
- package/dist/security/wallet-context-safety.d.ts +7 -0
- package/dist/security/wallet-financial-confirmation.d.ts +23 -0
- package/dist/services/wallet-backend-service.d.ts +39 -0
- package/dist/types/wallet-router.d.ts +130 -0
- package/dist/utils/intent-trajectory.d.ts +34 -0
- package/dist/wallet/backend.d.ts +41 -0
- package/dist/wallet/errors.d.ts +17 -0
- package/dist/wallet/index.d.ts +6 -0
- package/dist/wallet/local-eoa-backend.d.ts +37 -0
- package/dist/wallet/pending.d.ts +47 -0
- package/dist/wallet/select-backend.d.ts +11 -0
- package/dist/wallet/steward-backend.d.ts +22 -0
- package/dist/wallet-action.d.ts +1 -0
- package/dist/wallet-action.js +6292 -0
- package/dist/wallet-action.js.map +44 -0
- package/package.json +35 -21
- package/registry-entry.json +134 -0
- package/src/analytics/birdeye/actions/wallet-search-address.ts +85 -5
- package/src/analytics/birdeye/birdeye-task.ts +25 -9
- package/src/analytics/birdeye/birdeye.ts +6 -7
- package/src/analytics/birdeye/constants.ts +0 -1
- package/src/analytics/birdeye/providers/agent-portfolio-provider.ts +0 -1
- package/src/analytics/birdeye/providers/market.ts +51 -45
- package/src/analytics/birdeye/providers/portfolio-factory.ts +79 -38
- package/src/analytics/birdeye/providers/trending.ts +43 -46
- package/src/analytics/birdeye/providers/wallet.ts +0 -1
- package/src/analytics/birdeye/search-category.test.ts +1 -1
- package/src/analytics/birdeye/search-category.ts +77 -12
- package/src/analytics/birdeye/service.test.ts +146 -0
- package/src/analytics/birdeye/service.ts +220 -105
- package/src/analytics/birdeye/types/api/common.ts +0 -1
- package/src/analytics/birdeye/types/api/defi.ts +0 -1
- package/src/analytics/birdeye/types/api/pair.ts +0 -1
- package/src/analytics/birdeye/types/api/search.ts +0 -1
- package/src/analytics/birdeye/types/api/token.ts +0 -1
- package/src/analytics/birdeye/types/api/trader.ts +0 -1
- package/src/analytics/birdeye/types/api/wallet.ts +0 -1
- package/src/analytics/birdeye/types/shared.ts +0 -11
- package/src/analytics/birdeye/utils.test.ts +69 -0
- package/src/analytics/birdeye/utils.ts +11 -8
- package/src/analytics/dexscreener/search-category.ts +0 -1
- package/src/analytics/dexscreener/service.ts +7 -12
- package/src/analytics/dexscreener/types.ts +0 -1
- package/src/analytics/lpinfo/index.ts +5 -2
- package/src/analytics/lpinfo/kamino/README.md +2 -2
- package/src/analytics/lpinfo/kamino/index.ts +9 -2
- package/src/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.ts +6 -26
- package/src/analytics/lpinfo/kamino/providers/kaminoPoolProvider.ts +11 -12
- package/src/analytics/lpinfo/kamino/providers/kaminoProvider.ts +76 -32
- package/src/analytics/lpinfo/kamino/services/kaminoLiquidityService.ts +78 -38
- package/src/analytics/lpinfo/kamino/services/kaminoService.ts +71 -31
- package/src/analytics/lpinfo/steer/index.ts +7 -2
- package/src/analytics/lpinfo/steer/providers/steerLiquidityProvider.ts +25 -26
- package/src/analytics/lpinfo/steer/services/steerLiquidityService.ts +367 -149
- package/src/analytics/news/index.ts +7 -2
- package/src/analytics/news/interfaces/types.ts +0 -1
- package/src/analytics/news/providers/defiNewsProvider.ts +17 -44
- package/src/analytics/news/services/newsDataService.ts +1 -22
- package/src/analytics/news/utils/formatters.test.ts +60 -0
- package/src/analytics/news/utils/formatters.ts +0 -1
- package/src/analytics/token-info/action.ts +52 -212
- package/src/analytics/token-info/index.ts +1 -1
- package/src/analytics/token-info/params.test.ts +69 -0
- package/src/analytics/token-info/params.ts +13 -11
- package/src/analytics/token-info/providers.ts +46 -17
- package/src/analytics/token-info/service.ts +3 -3
- package/src/analytics/token-info/types.ts +2 -2
- package/src/api/wallet-routes.test.ts +56 -0
- package/src/api/wallet-routes.ts +1728 -0
- package/src/audit/audit-log.ts +57 -2
- package/src/browser-shim/build-shim.ts +1 -1
- package/src/browser-shim/shim.template.js +107 -117
- package/src/chains/{wallet-router.test.ts → __tests__/wallet-router.test.ts} +57 -10
- package/src/chains/evm/actions/helpers.ts +9 -7
- package/src/chains/evm/actions/swap.ts +176 -22
- package/src/chains/evm/actions/transfer.ts +29 -22
- package/src/chains/evm/biome.json +1 -1
- package/src/chains/evm/build.ts +6 -1
- package/src/chains/evm/constants.ts +19 -0
- package/src/chains/evm/contracts/artifacts/OZGovernor.json +25 -1682
- package/src/chains/evm/dex/aerodrome/index.ts +6 -1
- package/src/chains/evm/dex/aerodrome/services/AerodromeLpService.ts +41 -15
- package/src/chains/evm/dex/aerodrome/types.ts +1 -2
- package/src/chains/evm/dex/pancakeswp/index.ts +6 -1
- package/src/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.ts +54 -17
- package/src/chains/evm/dex/pancakeswp/types.ts +1 -2
- package/src/chains/evm/dex/uniswap/index.ts +6 -1
- package/src/chains/evm/dex/uniswap/services/UniswapV3LpService.ts +20 -9
- package/src/chains/evm/dex/uniswap/types.ts +1 -2
- package/src/chains/evm/gov-router.ts +3 -1
- package/src/chains/evm/index.browser.ts +1 -1
- package/src/chains/evm/index.ts +5 -1
- package/src/chains/evm/prompts.ts +5 -0
- package/src/chains/evm/providers/get-balance.ts +1 -1
- package/src/chains/evm/providers/wallet.ts +80 -9
- package/src/chains/evm/routes/sign.ts +35 -26
- package/src/chains/evm/rpc-providers.ts +1 -1
- package/src/chains/evm/types/index.ts +22 -2
- package/src/chains/registry.ts +1 -1
- package/src/chains/wallet-action.ts +301 -91
- package/src/index.ts +9 -5
- package/src/lib/wallet-export-guard.test.ts +233 -0
- package/src/lib/wallet-export-guard.ts +1 -1
- package/src/lp/actions/liquidity.ts +53 -26
- package/src/lp/e2e/real-token-tests.ts +0 -1
- package/src/lp/e2e/scenarios.ts +1 -2
- package/src/lp/e2e/test-utils.ts +20 -7
- package/src/lp/lp-manager-entry.ts +2 -5
- package/src/lp/services/ConcentratedLiquidityService.ts +3 -10
- package/src/lp/services/DexInteractionService.ts +1 -2
- package/src/lp/services/LpManagementService.test.ts +0 -1
- package/src/lp/services/LpManagementService.ts +75 -35
- package/src/lp/services/UserLpProfileService.ts +2 -3
- package/src/lp/services/VaultService.ts +10 -4
- package/src/lp/services/YieldOptimizationService.ts +29 -13
- package/src/lp/services/__tests__/MockLpService.ts +1 -2
- package/src/lp/types.ts +9 -13
- package/src/lp/utils/solanaClient.ts +4 -2
- package/src/plugin.routes.test.ts +24 -0
- package/src/plugin.ts +30 -13
- package/src/providers/canonical-provider.ts +1 -1
- package/src/providers/{unified-wallet-provider.ts → wallet-provider.ts} +3 -3
- package/src/routes/__fixtures__/coingecko-markets.recorded.json +97 -0
- package/src/routes/wallet-market-overview-route.ts +1 -1
- package/src/routes/wallet-market-overview.contract.test.ts +139 -0
- package/src/routes/wallet-market-overview.real.test.ts +83 -0
- package/src/sdk/escrow/MutualStakeEscrow.ts +1 -2
- package/src/sdk/identity/erc8004.ts +1 -1
- package/src/sdk/identity/validation.ts +3 -4
- package/src/sdk/index.ts +2 -2
- package/src/sdk/policy/SpendingPolicy.ts +1 -1
- package/src/sdk/router/PaymentRouter.ts +8 -11
- package/src/sdk/swap/SwapModule.ts +1 -1
- package/src/sdk/tokens/registry.ts +1 -1
- package/src/sdk/x402/middleware.ts +2 -8
- package/src/security/__tests__/wallet-context-safety.test.ts +79 -0
- package/src/security/__tests__/wallet-financial-confirmation.test.ts +88 -0
- package/src/security/wallet-context-safety.ts +128 -0
- package/src/security/wallet-financial-confirmation.ts +150 -0
- package/src/services/wallet-backend-service.ts +15 -1
- package/src/utils/intent-trajectory.ts +2 -2
- package/src/wallet/steward-backend.ts +4 -4
- package/dist/LpManagementService-BWrQ5-cO.mjs +0 -353
- package/dist/MockLpService-D_Apn4Fd.mjs +0 -99
- package/dist/aerodrome-CfnESC32.mjs +0 -890
- package/dist/chunk-hT5z_Zn9.mjs +0 -35
- package/dist/lib/server-wallet-trade.d.mts +0 -34
- package/dist/lib/server-wallet-trade.mjs +0 -306
- package/dist/meteora-BPX39hZo.mjs +0 -22640
- package/dist/orca-Bybp1HXO.mjs +0 -249
- package/dist/pancakeswp-CkEXlXti.mjs +0 -604
- package/dist/plugin-ZO_MTyd0.mjs +0 -529
- package/dist/raydium-rfaM9yEf.mjs +0 -539
- package/dist/sdk/index.d.mts +0 -32492
- package/dist/sdk/index.mjs +0 -6415
- package/dist/types-D5252NZk.mjs +0 -487
- package/dist/uniswap-CReXgXVN.mjs +0 -573
- package/dist/wallet-action.d.mts +0 -6
- package/dist/wallet-action.mjs +0 -820
- package/src/analytics/birdeye/tasks/birdeye.ts +0 -232
- package/src/analytics/lpinfo/index.d.ts +0 -7
- package/src/chains/evm/contracts/artifacts/TimelockController.json +0 -1007
- package/src/chains/evm/contracts/artifacts/VoteToken.json +0 -895
- package/src/lp/tasks/LpAutoRebalanceTask.ts +0 -117
- package/src/lp/tasks/__tests__/LpAutoRebalanceTask.test.ts +0 -370
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck — legacy code from absorbed plugins (lp-manager, lpinfo, dexscreener, defi-news, birdeye); strict types pending cleanup
|
|
2
1
|
import type { IAgentRuntime, JsonValue } from "@elizaos/core";
|
|
3
2
|
import { logger, Service } from "@elizaos/core";
|
|
4
3
|
import type { StakingPool } from "@steerprotocol/sdk";
|
|
@@ -15,9 +14,13 @@ import { arbitrum, base, mainnet, optimism, polygon } from "viem/chains";
|
|
|
15
14
|
import type {
|
|
16
15
|
SteerStakingPoolDetailInput,
|
|
17
16
|
SteerVaultDetailInput,
|
|
17
|
+
SteerVaultPositionRow,
|
|
18
18
|
} from "../steer-display-types.js";
|
|
19
19
|
|
|
20
|
+
type SteerClientCtor = ConstructorParameters<typeof SteerClient>;
|
|
21
|
+
type VaultClientCtor = ConstructorParameters<typeof VaultClient>;
|
|
20
22
|
type StakingClientCtor = ConstructorParameters<typeof StakingClient>;
|
|
23
|
+
type HexAddress = `0x${string}`;
|
|
21
24
|
|
|
22
25
|
type SteerEarnedRewardsResult = Awaited<ReturnType<StakingClient["earned"]>>;
|
|
23
26
|
type SteerStakingSupplyResult = Awaited<
|
|
@@ -49,7 +52,7 @@ interface RawSteerVault {
|
|
|
49
52
|
name?: string;
|
|
50
53
|
token0?: string | { address?: string };
|
|
51
54
|
token1?: string | { address?: string };
|
|
52
|
-
pool?: { poolAddress?: string; feeTier?: number };
|
|
55
|
+
pool?: { poolAddress?: string; feeTier?: number | string };
|
|
53
56
|
poolAddress?: string;
|
|
54
57
|
fee?: number;
|
|
55
58
|
aprData?: Record<string, number>;
|
|
@@ -57,6 +60,19 @@ interface RawSteerVault {
|
|
|
57
60
|
apr?: number;
|
|
58
61
|
tvl?: number;
|
|
59
62
|
volume24h?: number;
|
|
63
|
+
isActive?: boolean;
|
|
64
|
+
createdAt?: number | string;
|
|
65
|
+
protocol?: string;
|
|
66
|
+
strategyType?: string;
|
|
67
|
+
positions?: SteerVaultPositionRow[];
|
|
68
|
+
ammType?: string | number;
|
|
69
|
+
singleAssetDepositContract?: string;
|
|
70
|
+
beaconName?: string;
|
|
71
|
+
protocolBaseType?: string;
|
|
72
|
+
targetProtocol?: string;
|
|
73
|
+
feeApr?: number;
|
|
74
|
+
stakingApr?: number;
|
|
75
|
+
merklApr?: number;
|
|
60
76
|
}
|
|
61
77
|
|
|
62
78
|
// Supported chain IDs
|
|
@@ -121,12 +137,159 @@ interface GraphQLVaultData {
|
|
|
121
137
|
deployer: string;
|
|
122
138
|
}
|
|
123
139
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
140
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
141
|
+
return value !== null && typeof value === "object";
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function formatLogError(error: unknown): string {
|
|
145
|
+
return error instanceof Error ? error.message : String(error);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function isHexAddress(value: unknown): value is HexAddress {
|
|
149
|
+
return typeof value === "string" && /^0x[a-fA-F0-9]{40}$/.test(value);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function getSdkError(response: unknown): string | undefined {
|
|
153
|
+
if (!isRecord(response)) {
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
return typeof response.error === "string" ? response.error : undefined;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function isSuccessfulSdkResponse(
|
|
160
|
+
response: unknown,
|
|
161
|
+
): response is { success: true; data: unknown; error?: unknown } {
|
|
162
|
+
return (
|
|
163
|
+
isRecord(response) &&
|
|
164
|
+
response.success === true &&
|
|
165
|
+
response.data !== null &&
|
|
166
|
+
response.data !== undefined
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function getEdgesFromData(data: unknown): unknown[] {
|
|
171
|
+
if (!isRecord(data) || !Array.isArray(data.edges)) {
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
return data.edges;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function isRawSteerVault(value: unknown): value is RawSteerVault {
|
|
178
|
+
return (
|
|
179
|
+
isRecord(value) &&
|
|
180
|
+
(typeof value.vaultAddress === "string" ||
|
|
181
|
+
typeof value.address === "string" ||
|
|
182
|
+
typeof value.name === "string" ||
|
|
183
|
+
isRecord(value.pool))
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function getRawVaultNodes(response: unknown): RawSteerVault[] {
|
|
188
|
+
if (!isSuccessfulSdkResponse(response)) {
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return getEdgesFromData(response.data)
|
|
193
|
+
.map((edge) => (isRecord(edge) ? edge.node : undefined))
|
|
194
|
+
.filter(isRawSteerVault);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function isSteerPoolNode(value: unknown): value is SteerPoolNode {
|
|
198
|
+
return (
|
|
199
|
+
isRecord(value) &&
|
|
200
|
+
(typeof value.poolAddress === "string" || typeof value.id === "string")
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function getPoolNodes(response: unknown): SteerPoolNode[] {
|
|
205
|
+
if (!isSuccessfulSdkResponse(response)) {
|
|
206
|
+
return [];
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return getEdgesFromData(response.data)
|
|
210
|
+
.map((edge) => (isRecord(edge) ? edge.node : undefined))
|
|
211
|
+
.filter(isSteerPoolNode);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function getResponseDebug(response: unknown): Record<string, unknown> {
|
|
215
|
+
const responseRecord = isRecord(response) ? response : {};
|
|
216
|
+
const data = responseRecord.data;
|
|
217
|
+
const edges = isRecord(data) ? data.edges : undefined;
|
|
218
|
+
|
|
219
|
+
return {
|
|
220
|
+
success: responseRecord.success === true,
|
|
221
|
+
hasData: data !== null && data !== undefined,
|
|
222
|
+
dataType: typeof data,
|
|
223
|
+
isArray: Array.isArray(data),
|
|
224
|
+
hasEdges: Array.isArray(edges),
|
|
225
|
+
edgesLength: Array.isArray(edges) ? edges.length : 0,
|
|
127
226
|
};
|
|
128
227
|
}
|
|
129
228
|
|
|
229
|
+
function isGraphQLTokenRef(
|
|
230
|
+
value: unknown,
|
|
231
|
+
): value is GraphQLVaultData["strategyToken"] {
|
|
232
|
+
if (!isRecord(value) || !isRecord(value.creator)) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return (
|
|
237
|
+
typeof value.id === "string" &&
|
|
238
|
+
typeof value.name === "string" &&
|
|
239
|
+
typeof value.creator.id === "string" &&
|
|
240
|
+
typeof value.admin === "string"
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function isGraphQLVaultData(value: unknown): value is GraphQLVaultData {
|
|
245
|
+
if (!isRecord(value)) {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const requiredStringFields = [
|
|
250
|
+
"id",
|
|
251
|
+
"name",
|
|
252
|
+
"token0",
|
|
253
|
+
"token1",
|
|
254
|
+
"pool",
|
|
255
|
+
"weeklyFeeAPR",
|
|
256
|
+
"token0Symbol",
|
|
257
|
+
"token0Decimals",
|
|
258
|
+
"token1Symbol",
|
|
259
|
+
"token1Decimals",
|
|
260
|
+
"token0Balance",
|
|
261
|
+
"token1Balance",
|
|
262
|
+
"totalLPTokensIssued",
|
|
263
|
+
"feeTier",
|
|
264
|
+
"fees0",
|
|
265
|
+
"fees1",
|
|
266
|
+
"beaconName",
|
|
267
|
+
"payloadIpfs",
|
|
268
|
+
"deployer",
|
|
269
|
+
];
|
|
270
|
+
|
|
271
|
+
return (
|
|
272
|
+
requiredStringFields.every((field) => typeof value[field] === "string") &&
|
|
273
|
+
isGraphQLTokenRef(value.strategyToken)
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function getGraphQLVaultData(response: unknown): GraphQLVaultData | null {
|
|
278
|
+
if (!isRecord(response) || !isRecord(response.data)) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
return isGraphQLVaultData(response.data.vault) ? response.data.vault : null;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function hasGraphQLMeta(response: unknown): boolean {
|
|
286
|
+
return (
|
|
287
|
+
isRecord(response) &&
|
|
288
|
+
isRecord(response.data) &&
|
|
289
|
+
isRecord(response.data._meta)
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
130
293
|
/**
|
|
131
294
|
* Steer Finance Liquidity Protocol Service
|
|
132
295
|
* Handles interactions with Steer Finance protocol using the official SDK
|
|
@@ -145,7 +308,7 @@ export class SteerLiquidityService extends Service {
|
|
|
145
308
|
capabilityDescription =
|
|
146
309
|
"Provides detailed access to Steer Finance vaults and staking pools for specific tokens using the official SDK." as const;
|
|
147
310
|
|
|
148
|
-
constructor(runtime
|
|
311
|
+
constructor(runtime?: IAgentRuntime) {
|
|
149
312
|
super(runtime);
|
|
150
313
|
|
|
151
314
|
// Initialize supported chains
|
|
@@ -159,12 +322,16 @@ export class SteerLiquidityService extends Service {
|
|
|
159
322
|
transport: http(),
|
|
160
323
|
});
|
|
161
324
|
|
|
162
|
-
|
|
325
|
+
const steerClientConfig = {
|
|
163
326
|
client: viemClient,
|
|
164
|
-
}
|
|
327
|
+
} as SteerClientCtor[0];
|
|
328
|
+
new SteerClient(steerClientConfig);
|
|
165
329
|
logger.log("Steer SDK client initialized successfully");
|
|
166
330
|
} catch (error) {
|
|
167
|
-
logger.error(
|
|
331
|
+
logger.error(
|
|
332
|
+
"Failed to initialize Steer SDK client:",
|
|
333
|
+
formatLogError(error),
|
|
334
|
+
);
|
|
168
335
|
throw new Error("Steer SDK initialization failed");
|
|
169
336
|
}
|
|
170
337
|
|
|
@@ -178,10 +345,10 @@ export class SteerLiquidityService extends Service {
|
|
|
178
345
|
);
|
|
179
346
|
|
|
180
347
|
// Verify runtime has required methods
|
|
181
|
-
if (!runtime
|
|
348
|
+
if (!runtime?.getService) {
|
|
182
349
|
logger.warn("Runtime missing getService method");
|
|
183
350
|
}
|
|
184
|
-
if (!runtime
|
|
351
|
+
if (!runtime?.getCache) {
|
|
185
352
|
logger.warn("Runtime missing getCache method");
|
|
186
353
|
}
|
|
187
354
|
|
|
@@ -231,15 +398,15 @@ export class SteerLiquidityService extends Service {
|
|
|
231
398
|
|
|
232
399
|
// Initialize vault client for this chain
|
|
233
400
|
const vaultClient = new VaultClient(
|
|
234
|
-
publicClient,
|
|
235
|
-
walletClient,
|
|
401
|
+
publicClient as unknown as VaultClientCtor[0],
|
|
402
|
+
walletClient as VaultClientCtor[1],
|
|
236
403
|
"production",
|
|
237
404
|
);
|
|
238
405
|
this.vaultClients.set(chainId, vaultClient);
|
|
239
406
|
|
|
240
407
|
// Initialize staking client for this chain
|
|
241
408
|
const stakingClient = new StakingClient(
|
|
242
|
-
walletClient as StakingClientCtor[0],
|
|
409
|
+
walletClient as unknown as StakingClientCtor[0],
|
|
243
410
|
);
|
|
244
411
|
this.stakingClients.set(chainId, stakingClient);
|
|
245
412
|
|
|
@@ -249,7 +416,7 @@ export class SteerLiquidityService extends Service {
|
|
|
249
416
|
`Successfully initialized clients for ${this.supportedChains.length} chains`,
|
|
250
417
|
);
|
|
251
418
|
} catch (error) {
|
|
252
|
-
logger.error("Error initializing chain clients:", error);
|
|
419
|
+
logger.error("Error initializing chain clients:", formatLogError(error));
|
|
253
420
|
throw new Error("Failed to initialize chain clients");
|
|
254
421
|
}
|
|
255
422
|
}
|
|
@@ -329,7 +496,7 @@ export class SteerLiquidityService extends Service {
|
|
|
329
496
|
} catch (error) {
|
|
330
497
|
logger.error(
|
|
331
498
|
`Error searching for token ${tokenIdentifier} on chain ${chainId}:`,
|
|
332
|
-
error,
|
|
499
|
+
formatLogError(error),
|
|
333
500
|
);
|
|
334
501
|
}
|
|
335
502
|
}
|
|
@@ -358,7 +525,10 @@ export class SteerLiquidityService extends Service {
|
|
|
358
525
|
`Chain ${chainId}: Successfully processed ${chainVaults.length} vaults`,
|
|
359
526
|
);
|
|
360
527
|
} catch (error) {
|
|
361
|
-
logger.error(
|
|
528
|
+
logger.error(
|
|
529
|
+
`Error fetching data for chain ${chainId}:`,
|
|
530
|
+
formatLogError(error),
|
|
531
|
+
);
|
|
362
532
|
}
|
|
363
533
|
}
|
|
364
534
|
}
|
|
@@ -403,7 +573,7 @@ export class SteerLiquidityService extends Service {
|
|
|
403
573
|
{} as { [key: number]: number },
|
|
404
574
|
);
|
|
405
575
|
|
|
406
|
-
logger.log(
|
|
576
|
+
logger.log({ vaultsByChain }, "Vaults by chain");
|
|
407
577
|
|
|
408
578
|
const stats: TokenLiquidityStats = {
|
|
409
579
|
tokenIdentifier,
|
|
@@ -428,7 +598,10 @@ export class SteerLiquidityService extends Service {
|
|
|
428
598
|
|
|
429
599
|
return stats;
|
|
430
600
|
} catch (error) {
|
|
431
|
-
logger.error(
|
|
601
|
+
logger.error(
|
|
602
|
+
"Error getting Steer liquidity stats:",
|
|
603
|
+
formatLogError(error),
|
|
604
|
+
);
|
|
432
605
|
throw new Error(
|
|
433
606
|
`Failed to get Steer liquidity stats: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
434
607
|
);
|
|
@@ -448,45 +621,37 @@ export class SteerLiquidityService extends Service {
|
|
|
448
621
|
return [];
|
|
449
622
|
}
|
|
450
623
|
|
|
451
|
-
|
|
452
|
-
success: boolean;
|
|
453
|
-
data?: { edges?: Array<{ node?: RawSteerVault }> };
|
|
454
|
-
error?: string;
|
|
455
|
-
};
|
|
456
|
-
let vaultsResponse: VaultSdkList;
|
|
624
|
+
let vaultsResponse: unknown;
|
|
457
625
|
try {
|
|
458
626
|
vaultsResponse = await vaultClient.getVaults({ chainId }, 100, null);
|
|
459
627
|
} catch (error) {
|
|
460
|
-
logger.error(
|
|
628
|
+
logger.error(
|
|
629
|
+
`API call failed for chain ${chainId}:`,
|
|
630
|
+
formatLogError(error),
|
|
631
|
+
);
|
|
461
632
|
return [];
|
|
462
633
|
}
|
|
463
634
|
|
|
464
|
-
if (!vaultsResponse
|
|
635
|
+
if (!isSuccessfulSdkResponse(vaultsResponse)) {
|
|
636
|
+
const sdkError = getSdkError(vaultsResponse);
|
|
465
637
|
logger.warn(
|
|
466
|
-
`Failed to get vaults for chain ${chainId}: ${
|
|
638
|
+
`Failed to get vaults for chain ${chainId}: ${sdkError || "Unknown error"}`,
|
|
467
639
|
);
|
|
468
640
|
// If it's a server error, log it but continue with other chains
|
|
469
|
-
if (
|
|
641
|
+
if (sdkError?.includes("INTERNAL_SERVER_ERROR")) {
|
|
470
642
|
logger.warn(`Chain ${chainId} has server issues, skipping for now`);
|
|
471
643
|
}
|
|
472
644
|
return [];
|
|
473
645
|
}
|
|
474
646
|
|
|
475
647
|
// Debug: Log the response structure
|
|
476
|
-
logger.log(
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
isArray: Array.isArray(vaultsResponse.data),
|
|
481
|
-
hasEdges: !!vaultsResponse.data?.edges,
|
|
482
|
-
edgesLength: vaultsResponse.data?.edges?.length || 0,
|
|
483
|
-
});
|
|
648
|
+
logger.log(
|
|
649
|
+
getResponseDebug(vaultsResponse),
|
|
650
|
+
`Vault response structure for chain ${chainId}`,
|
|
651
|
+
);
|
|
484
652
|
|
|
485
653
|
// Extract vaults from the paginated response structure
|
|
486
|
-
const vaults
|
|
487
|
-
vaultsResponse.data?.edges
|
|
488
|
-
?.map((edge: { node?: RawSteerVault }) => edge.node)
|
|
489
|
-
.filter((n): n is RawSteerVault => n !== undefined) || [];
|
|
654
|
+
const vaults = getRawVaultNodes(vaultsResponse);
|
|
490
655
|
logger.log(
|
|
491
656
|
`Retrieved ${vaults.length} vaults from SDK for chain ${chainId}`,
|
|
492
657
|
);
|
|
@@ -498,7 +663,10 @@ export class SteerLiquidityService extends Service {
|
|
|
498
663
|
if (!vault) return null;
|
|
499
664
|
return await this.processVaultData(vault, chainId);
|
|
500
665
|
} catch (error) {
|
|
501
|
-
logger.error(
|
|
666
|
+
logger.error(
|
|
667
|
+
`Error processing vault ${vault.address}:`,
|
|
668
|
+
formatLogError(error),
|
|
669
|
+
);
|
|
502
670
|
return null;
|
|
503
671
|
}
|
|
504
672
|
}),
|
|
@@ -508,7 +676,10 @@ export class SteerLiquidityService extends Service {
|
|
|
508
676
|
(vault): vault is SteerVaultDetailInput => vault !== null,
|
|
509
677
|
);
|
|
510
678
|
} catch (error) {
|
|
511
|
-
logger.error(
|
|
679
|
+
logger.error(
|
|
680
|
+
`Error getting vaults for chain ${chainId}:`,
|
|
681
|
+
formatLogError(error),
|
|
682
|
+
);
|
|
512
683
|
return [];
|
|
513
684
|
}
|
|
514
685
|
}
|
|
@@ -527,46 +698,44 @@ export class SteerLiquidityService extends Service {
|
|
|
527
698
|
return [];
|
|
528
699
|
}
|
|
529
700
|
|
|
530
|
-
|
|
531
|
-
success: boolean;
|
|
532
|
-
data?: { edges?: Array<{ node?: RawSteerVault }> };
|
|
533
|
-
error?: string;
|
|
534
|
-
};
|
|
535
|
-
let vaultsResponse: VaultSdkList;
|
|
701
|
+
let vaultsResponse: unknown;
|
|
536
702
|
try {
|
|
537
703
|
vaultsResponse = await vaultClient.getVaults({ chainId }, 100, null);
|
|
538
704
|
} catch (error) {
|
|
539
|
-
logger.error(
|
|
705
|
+
logger.error(
|
|
706
|
+
`API call failed for chain ${chainId}:`,
|
|
707
|
+
formatLogError(error),
|
|
708
|
+
);
|
|
540
709
|
return [];
|
|
541
710
|
}
|
|
542
711
|
|
|
543
|
-
if (!vaultsResponse
|
|
712
|
+
if (!isSuccessfulSdkResponse(vaultsResponse)) {
|
|
544
713
|
logger.warn(
|
|
545
|
-
`Failed to get vaults for chain ${chainId}: ${vaultsResponse
|
|
714
|
+
`Failed to get vaults for chain ${chainId}: ${getSdkError(vaultsResponse) || "Unknown error"}`,
|
|
546
715
|
);
|
|
547
716
|
return [];
|
|
548
717
|
}
|
|
549
718
|
|
|
550
719
|
// Extract vaults from the paginated response structure
|
|
551
|
-
const allVaults
|
|
552
|
-
vaultsResponse.data?.edges
|
|
553
|
-
?.map((edge: { node?: RawSteerVault }) => edge.node)
|
|
554
|
-
.filter((n): n is RawSteerVault => n !== undefined) || [];
|
|
720
|
+
const allVaults = getRawVaultNodes(vaultsResponse);
|
|
555
721
|
logger.log(
|
|
556
722
|
`Searching ${allVaults.length} vaults for token ${tokenAddress} on chain ${chainId}`,
|
|
557
723
|
);
|
|
558
724
|
|
|
559
725
|
// Debug: Log first vault structure to understand the data format
|
|
560
726
|
if (allVaults.length > 0) {
|
|
561
|
-
logger.log(
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
727
|
+
logger.log(
|
|
728
|
+
{
|
|
729
|
+
vaultAddress: allVaults[0].vaultAddress,
|
|
730
|
+
address: allVaults[0].address,
|
|
731
|
+
token0: allVaults[0].token0,
|
|
732
|
+
token1: allVaults[0].token1,
|
|
733
|
+
token0Type: typeof allVaults[0].token0,
|
|
734
|
+
token1Type: typeof allVaults[0].token1,
|
|
735
|
+
pool: allVaults[0].pool,
|
|
736
|
+
},
|
|
737
|
+
`Sample vault structure for chain ${chainId}`,
|
|
738
|
+
);
|
|
570
739
|
}
|
|
571
740
|
|
|
572
741
|
const matchingVaults: SteerVaultDetailInput[] = [];
|
|
@@ -587,7 +756,10 @@ export class SteerLiquidityService extends Service {
|
|
|
587
756
|
}
|
|
588
757
|
}
|
|
589
758
|
} catch (error) {
|
|
590
|
-
logger.log(
|
|
759
|
+
logger.log(
|
|
760
|
+
`Error processing vault ${vault.address}:`,
|
|
761
|
+
formatLogError(error),
|
|
762
|
+
);
|
|
591
763
|
}
|
|
592
764
|
}
|
|
593
765
|
|
|
@@ -598,7 +770,7 @@ export class SteerLiquidityService extends Service {
|
|
|
598
770
|
} catch (error) {
|
|
599
771
|
logger.error(
|
|
600
772
|
`Error getting vaults for token ${tokenAddress} on chain ${chainId}:`,
|
|
601
|
-
error,
|
|
773
|
+
formatLogError(error),
|
|
602
774
|
);
|
|
603
775
|
return [];
|
|
604
776
|
}
|
|
@@ -645,7 +817,11 @@ export class SteerLiquidityService extends Service {
|
|
|
645
817
|
// Extract basic vault information
|
|
646
818
|
const vaultAddress = vault.vaultAddress || vault.address || "";
|
|
647
819
|
const poolAddress = vault.pool?.poolAddress || vault.poolAddress;
|
|
648
|
-
const
|
|
820
|
+
const rawFeeTier = vault.pool?.feeTier ?? vault.fee ?? 0.3;
|
|
821
|
+
const feeTier =
|
|
822
|
+
typeof rawFeeTier === "number"
|
|
823
|
+
? rawFeeTier
|
|
824
|
+
: Number.parseFloat(rawFeeTier) || 0.3;
|
|
649
825
|
|
|
650
826
|
// Extract APY data from various sources
|
|
651
827
|
const apyData = vault.aprData || {};
|
|
@@ -657,9 +833,9 @@ export class SteerLiquidityService extends Service {
|
|
|
657
833
|
apyData.apr14dAvg ||
|
|
658
834
|
0;
|
|
659
835
|
|
|
660
|
-
const processedVault = {
|
|
836
|
+
const processedVault: SteerVaultDetailInput = {
|
|
661
837
|
address: vaultAddress,
|
|
662
|
-
name: vault.name || `Steer Vault ${vaultAddress
|
|
838
|
+
name: vault.name || `Steer Vault ${vaultAddress.slice(0, 8)}...`,
|
|
663
839
|
chainId,
|
|
664
840
|
token0: vault.token0 || "Unknown",
|
|
665
841
|
token1: vault.token1 || "Unknown",
|
|
@@ -678,7 +854,11 @@ export class SteerLiquidityService extends Service {
|
|
|
678
854
|
positions: vault.positions || [],
|
|
679
855
|
poolAddress: poolAddress,
|
|
680
856
|
ammType: vault.ammType || "UniswapV3",
|
|
681
|
-
singleAssetDepositContract:
|
|
857
|
+
singleAssetDepositContract: isHexAddress(
|
|
858
|
+
vault.singleAssetDepositContract,
|
|
859
|
+
)
|
|
860
|
+
? vault.singleAssetDepositContract
|
|
861
|
+
: undefined,
|
|
682
862
|
// Additional fields from SDK
|
|
683
863
|
protocol: vault.protocol,
|
|
684
864
|
beaconName: vault.beaconName,
|
|
@@ -749,7 +929,7 @@ export class SteerLiquidityService extends Service {
|
|
|
749
929
|
} catch (error) {
|
|
750
930
|
logger.log(
|
|
751
931
|
`Could not fetch price data for vault ${vaultAddress}:`,
|
|
752
|
-
error,
|
|
932
|
+
formatLogError(error),
|
|
753
933
|
);
|
|
754
934
|
}
|
|
755
935
|
} catch (_error) {
|
|
@@ -768,12 +948,15 @@ export class SteerLiquidityService extends Service {
|
|
|
768
948
|
} catch (error) {
|
|
769
949
|
logger.log(
|
|
770
950
|
`Could not enrich vault ${vaultAddress} with GraphQL data, returning basic info:`,
|
|
771
|
-
error,
|
|
951
|
+
formatLogError(error),
|
|
772
952
|
);
|
|
773
953
|
return processedVault;
|
|
774
954
|
}
|
|
775
955
|
} catch (error) {
|
|
776
|
-
logger.error(
|
|
956
|
+
logger.error(
|
|
957
|
+
`Error processing vault ${vault.address}:`,
|
|
958
|
+
formatLogError(error),
|
|
959
|
+
);
|
|
777
960
|
return null;
|
|
778
961
|
}
|
|
779
962
|
}
|
|
@@ -784,7 +967,7 @@ export class SteerLiquidityService extends Service {
|
|
|
784
967
|
async getVaultDetails(
|
|
785
968
|
vaultAddress: string,
|
|
786
969
|
chainId: number,
|
|
787
|
-
): Promise<SteerVaultDetailInput |
|
|
970
|
+
): Promise<SteerVaultDetailInput | null> {
|
|
788
971
|
try {
|
|
789
972
|
// First try to get data from GraphQL
|
|
790
973
|
const graphqlData = await this.getVaultDataFromGraphQL(vaultAddress);
|
|
@@ -830,9 +1013,13 @@ export class SteerLiquidityService extends Service {
|
|
|
830
1013
|
logger.log(
|
|
831
1014
|
`GraphQL data not available for ${vaultAddress}, falling back to SDK`,
|
|
832
1015
|
);
|
|
833
|
-
|
|
1016
|
+
const rawVault = await this.getVaultDetailsFromSDK(vaultAddress, chainId);
|
|
1017
|
+
return rawVault ? await this.processVaultData(rawVault, chainId) : null;
|
|
834
1018
|
} catch (error) {
|
|
835
|
-
logger.error(
|
|
1019
|
+
logger.error(
|
|
1020
|
+
`Error getting vault details for ${vaultAddress}:`,
|
|
1021
|
+
formatLogError(error),
|
|
1022
|
+
);
|
|
836
1023
|
return null;
|
|
837
1024
|
}
|
|
838
1025
|
}
|
|
@@ -852,25 +1039,33 @@ export class SteerLiquidityService extends Service {
|
|
|
852
1039
|
}
|
|
853
1040
|
|
|
854
1041
|
// Get vault details using SDK - use getVaults and filter
|
|
855
|
-
const vaultResponse = await vaultClient.getVaults(
|
|
1042
|
+
const vaultResponse: unknown = await vaultClient.getVaults(
|
|
1043
|
+
{ chainId },
|
|
1044
|
+
100,
|
|
1045
|
+
null,
|
|
1046
|
+
);
|
|
856
1047
|
|
|
857
|
-
if (!vaultResponse
|
|
1048
|
+
if (!isSuccessfulSdkResponse(vaultResponse)) {
|
|
858
1049
|
logger.warn(
|
|
859
|
-
`Failed to get vault details for ${vaultAddress}: ${vaultResponse
|
|
1050
|
+
`Failed to get vault details for ${vaultAddress}: ${getSdkError(vaultResponse) || "Unknown error"}`,
|
|
860
1051
|
);
|
|
861
1052
|
return null;
|
|
862
1053
|
}
|
|
863
1054
|
|
|
864
1055
|
// Extract vaults from the paginated response structure
|
|
865
|
-
const vaults
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
1056
|
+
const vaults = getRawVaultNodes(vaultResponse);
|
|
1057
|
+
const normalizedVaultAddress = vaultAddress.toLowerCase();
|
|
1058
|
+
return (
|
|
1059
|
+
vaults.find(
|
|
1060
|
+
(vault) =>
|
|
1061
|
+
(vault.vaultAddress || vault.address || "").toLowerCase() ===
|
|
1062
|
+
normalizedVaultAddress,
|
|
1063
|
+
) || null
|
|
1064
|
+
);
|
|
870
1065
|
} catch (error) {
|
|
871
1066
|
logger.error(
|
|
872
1067
|
`Error getting vault details for ${vaultAddress} on chain ${chainId}:`,
|
|
873
|
-
error,
|
|
1068
|
+
formatLogError(error),
|
|
874
1069
|
);
|
|
875
1070
|
return null;
|
|
876
1071
|
}
|
|
@@ -884,12 +1079,14 @@ export class SteerLiquidityService extends Service {
|
|
|
884
1079
|
chainId: number,
|
|
885
1080
|
): Promise<{ [address: string]: number } | null> {
|
|
886
1081
|
try {
|
|
887
|
-
//
|
|
888
|
-
|
|
889
|
-
logger.log(`Price fetching not yet implemented for chain ${chainId}`);
|
|
1082
|
+
// No price API is wired for this analytics path; null indicates no price data.
|
|
1083
|
+
logger.log(`Price data unavailable for chain ${chainId}`);
|
|
890
1084
|
return null;
|
|
891
1085
|
} catch (error) {
|
|
892
|
-
logger.error(
|
|
1086
|
+
logger.error(
|
|
1087
|
+
`Error getting token prices for chain ${chainId}:`,
|
|
1088
|
+
formatLogError(error),
|
|
1089
|
+
);
|
|
893
1090
|
return null;
|
|
894
1091
|
}
|
|
895
1092
|
}
|
|
@@ -920,11 +1117,8 @@ export class SteerLiquidityService extends Service {
|
|
|
920
1117
|
100,
|
|
921
1118
|
null,
|
|
922
1119
|
);
|
|
923
|
-
if (poolsResponse
|
|
924
|
-
const pools
|
|
925
|
-
poolsResponse.data.edges
|
|
926
|
-
?.map((edge: { node?: SteerPoolNode }) => edge.node)
|
|
927
|
-
.filter((n): n is SteerPoolNode => n !== undefined) || [];
|
|
1120
|
+
if (isSuccessfulSdkResponse(poolsResponse)) {
|
|
1121
|
+
const pools = getPoolNodes(poolsResponse);
|
|
928
1122
|
const matchingPool = pools.find(
|
|
929
1123
|
(pool: SteerPoolNode) =>
|
|
930
1124
|
pool.poolAddress?.toLowerCase() === poolAddress.toLowerCase() ||
|
|
@@ -949,7 +1143,7 @@ export class SteerLiquidityService extends Service {
|
|
|
949
1143
|
} catch (error) {
|
|
950
1144
|
logger.log(
|
|
951
1145
|
`Could not fetch pool data from SDK for ${poolAddress}:`,
|
|
952
|
-
error,
|
|
1146
|
+
formatLogError(error),
|
|
953
1147
|
);
|
|
954
1148
|
}
|
|
955
1149
|
|
|
@@ -963,7 +1157,7 @@ export class SteerLiquidityService extends Service {
|
|
|
963
1157
|
} catch (error) {
|
|
964
1158
|
logger.error(
|
|
965
1159
|
`Error getting pool data for ${poolAddress} on chain ${chainId}:`,
|
|
966
|
-
error,
|
|
1160
|
+
formatLogError(error),
|
|
967
1161
|
);
|
|
968
1162
|
return null;
|
|
969
1163
|
}
|
|
@@ -998,7 +1192,7 @@ export class SteerLiquidityService extends Service {
|
|
|
998
1192
|
} catch (error) {
|
|
999
1193
|
logger.error(
|
|
1000
1194
|
`Error getting staking pool details for ${poolAddress} on chain ${chainId}:`,
|
|
1001
|
-
error,
|
|
1195
|
+
formatLogError(error),
|
|
1002
1196
|
);
|
|
1003
1197
|
return null;
|
|
1004
1198
|
}
|
|
@@ -1035,9 +1229,9 @@ export class SteerLiquidityService extends Service {
|
|
|
1035
1229
|
);
|
|
1036
1230
|
}
|
|
1037
1231
|
|
|
1038
|
-
const result = await response.json();
|
|
1232
|
+
const result: unknown = await response.json();
|
|
1039
1233
|
|
|
1040
|
-
if (result
|
|
1234
|
+
if (hasGraphQLMeta(result)) {
|
|
1041
1235
|
logger.log("GraphQL connection test successful");
|
|
1042
1236
|
return { success: true };
|
|
1043
1237
|
} else {
|
|
@@ -1045,7 +1239,7 @@ export class SteerLiquidityService extends Service {
|
|
|
1045
1239
|
return { success: false, error: "Unexpected response structure" };
|
|
1046
1240
|
}
|
|
1047
1241
|
} catch (error) {
|
|
1048
|
-
logger.error("GraphQL connection test failed:", error);
|
|
1242
|
+
logger.error("GraphQL connection test failed:", formatLogError(error));
|
|
1049
1243
|
return {
|
|
1050
1244
|
success: false,
|
|
1051
1245
|
error: error instanceof Error ? error.message : "Unknown error",
|
|
@@ -1074,7 +1268,7 @@ export class SteerLiquidityService extends Service {
|
|
|
1074
1268
|
} catch (error) {
|
|
1075
1269
|
logger.error(
|
|
1076
1270
|
`GraphQL vault query test failed for ${vaultAddress}:`,
|
|
1077
|
-
error,
|
|
1271
|
+
formatLogError(error),
|
|
1078
1272
|
);
|
|
1079
1273
|
return {
|
|
1080
1274
|
success: false,
|
|
@@ -1107,20 +1301,13 @@ export class SteerLiquidityService extends Service {
|
|
|
1107
1301
|
100,
|
|
1108
1302
|
null,
|
|
1109
1303
|
);
|
|
1110
|
-
logger.log(
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
isArray: Array.isArray(vaultsResponse.data),
|
|
1115
|
-
hasEdges: !!vaultsResponse.data?.edges,
|
|
1116
|
-
edgesLength: vaultsResponse.data?.edges?.length || 0,
|
|
1117
|
-
});
|
|
1304
|
+
logger.log(
|
|
1305
|
+
getResponseDebug(vaultsResponse),
|
|
1306
|
+
`Chain ${chainId} vault response`,
|
|
1307
|
+
);
|
|
1118
1308
|
|
|
1119
|
-
if (vaultsResponse
|
|
1120
|
-
const vaults =
|
|
1121
|
-
vaultsResponse.data.edges
|
|
1122
|
-
?.map((edge: { node?: RawSteerVault }) => edge.node)
|
|
1123
|
-
.filter((n): n is RawSteerVault => n !== undefined) || [];
|
|
1309
|
+
if (isSuccessfulSdkResponse(vaultsResponse)) {
|
|
1310
|
+
const vaults = getRawVaultNodes(vaultsResponse);
|
|
1124
1311
|
totalVaultCount += vaults.length;
|
|
1125
1312
|
logger.log(`Chain ${chainId}: Found ${vaults.length} vaults`);
|
|
1126
1313
|
}
|
|
@@ -1143,7 +1330,10 @@ export class SteerLiquidityService extends Service {
|
|
|
1143
1330
|
} catch (error) {
|
|
1144
1331
|
const errorMsg = `Chain ${chainId}: ${error instanceof Error ? error.message : "Unknown error"}`;
|
|
1145
1332
|
connectionErrors.push(errorMsg);
|
|
1146
|
-
logger.error(
|
|
1333
|
+
logger.error(
|
|
1334
|
+
`Connection test failed for chain ${chainId}:`,
|
|
1335
|
+
formatLogError(error),
|
|
1336
|
+
);
|
|
1147
1337
|
}
|
|
1148
1338
|
}
|
|
1149
1339
|
|
|
@@ -1161,7 +1351,7 @@ export class SteerLiquidityService extends Service {
|
|
|
1161
1351
|
);
|
|
1162
1352
|
return result;
|
|
1163
1353
|
} catch (error) {
|
|
1164
|
-
logger.error("Error testing Steer connection:", error);
|
|
1354
|
+
logger.error("Error testing Steer connection:", formatLogError(error));
|
|
1165
1355
|
return {
|
|
1166
1356
|
connectionTest: false,
|
|
1167
1357
|
supportedChains: this.supportedChains,
|
|
@@ -1272,7 +1462,10 @@ export class SteerLiquidityService extends Service {
|
|
|
1272
1462
|
this.isRunning = true;
|
|
1273
1463
|
logger.log("SteerLiquidityService started successfully");
|
|
1274
1464
|
} catch (error) {
|
|
1275
|
-
logger.error(
|
|
1465
|
+
logger.error(
|
|
1466
|
+
"Failed to start SteerLiquidityService:",
|
|
1467
|
+
formatLogError(error),
|
|
1468
|
+
);
|
|
1276
1469
|
throw error;
|
|
1277
1470
|
}
|
|
1278
1471
|
}
|
|
@@ -1287,7 +1480,10 @@ export class SteerLiquidityService extends Service {
|
|
|
1287
1480
|
this.isRunning = false;
|
|
1288
1481
|
logger.log("SteerLiquidityService stopped successfully");
|
|
1289
1482
|
} catch (error) {
|
|
1290
|
-
logger.error(
|
|
1483
|
+
logger.error(
|
|
1484
|
+
"Failed to stop SteerLiquidityService:",
|
|
1485
|
+
formatLogError(error),
|
|
1486
|
+
);
|
|
1291
1487
|
throw error;
|
|
1292
1488
|
}
|
|
1293
1489
|
}
|
|
@@ -1319,7 +1515,12 @@ export class SteerLiquidityService extends Service {
|
|
|
1319
1515
|
throw new Error(`Vault ${vaultAddress} not found on chain ${chainId}`);
|
|
1320
1516
|
}
|
|
1321
1517
|
|
|
1322
|
-
|
|
1518
|
+
const poolAddress = vault.poolAddress;
|
|
1519
|
+
const singleAssetDepositContract = vault.singleAssetDepositContract;
|
|
1520
|
+
if (
|
|
1521
|
+
!isHexAddress(poolAddress) ||
|
|
1522
|
+
!isHexAddress(singleAssetDepositContract)
|
|
1523
|
+
) {
|
|
1323
1524
|
throw new Error(
|
|
1324
1525
|
`Vault ${vaultAddress} does not support single-asset deposits`,
|
|
1325
1526
|
);
|
|
@@ -1330,22 +1531,22 @@ export class SteerLiquidityService extends Service {
|
|
|
1330
1531
|
{
|
|
1331
1532
|
assets,
|
|
1332
1533
|
receiver:
|
|
1333
|
-
"0x0000000000000000000000000000000000000000" as `0x${string}`,
|
|
1534
|
+
"0x0000000000000000000000000000000000000000" as `0x${string}`,
|
|
1334
1535
|
vault: vaultAddress as `0x${string}`,
|
|
1335
1536
|
isToken0,
|
|
1336
1537
|
depositSlippagePercent,
|
|
1337
1538
|
swapSlippageBP,
|
|
1338
1539
|
ammType: AMMType.UniswapV3,
|
|
1339
|
-
singleAssetDepositContract
|
|
1540
|
+
singleAssetDepositContract,
|
|
1340
1541
|
},
|
|
1341
|
-
|
|
1542
|
+
poolAddress,
|
|
1342
1543
|
);
|
|
1343
1544
|
|
|
1344
1545
|
return preview;
|
|
1345
1546
|
} catch (error) {
|
|
1346
1547
|
logger.error(
|
|
1347
1548
|
`Error previewing single-asset deposit for vault ${vaultAddress}:`,
|
|
1348
|
-
error,
|
|
1549
|
+
formatLogError(error),
|
|
1349
1550
|
);
|
|
1350
1551
|
throw error;
|
|
1351
1552
|
}
|
|
@@ -1375,7 +1576,12 @@ export class SteerLiquidityService extends Service {
|
|
|
1375
1576
|
throw new Error(`Vault ${vaultAddress} not found on chain ${chainId}`);
|
|
1376
1577
|
}
|
|
1377
1578
|
|
|
1378
|
-
if (!
|
|
1579
|
+
if (!isHexAddress(receiver)) {
|
|
1580
|
+
throw new Error(`Receiver ${receiver} is not a valid EVM address`);
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
const singleAssetDepositContract = vault.singleAssetDepositContract;
|
|
1584
|
+
if (!isHexAddress(singleAssetDepositContract)) {
|
|
1379
1585
|
throw new Error(
|
|
1380
1586
|
`Vault ${vaultAddress} does not support single-asset deposits`,
|
|
1381
1587
|
);
|
|
@@ -1384,20 +1590,20 @@ export class SteerLiquidityService extends Service {
|
|
|
1384
1590
|
// Execute the single-asset deposit using SDK
|
|
1385
1591
|
const result = await vaultClient.singleAssetDeposit({
|
|
1386
1592
|
assets,
|
|
1387
|
-
receiver
|
|
1593
|
+
receiver,
|
|
1388
1594
|
vault: vaultAddress as `0x${string}`,
|
|
1389
1595
|
isToken0,
|
|
1390
1596
|
depositSlippagePercent,
|
|
1391
1597
|
swapSlippageBP,
|
|
1392
1598
|
ammType: AMMType.UniswapV3,
|
|
1393
|
-
singleAssetDepositContract
|
|
1599
|
+
singleAssetDepositContract,
|
|
1394
1600
|
});
|
|
1395
1601
|
|
|
1396
1602
|
return result;
|
|
1397
1603
|
} catch (error) {
|
|
1398
1604
|
logger.error(
|
|
1399
1605
|
`Error executing single-asset deposit for vault ${vaultAddress}:`,
|
|
1400
|
-
error,
|
|
1606
|
+
formatLogError(error),
|
|
1401
1607
|
);
|
|
1402
1608
|
throw error;
|
|
1403
1609
|
}
|
|
@@ -1425,7 +1631,7 @@ export class SteerLiquidityService extends Service {
|
|
|
1425
1631
|
} catch (error) {
|
|
1426
1632
|
logger.error(
|
|
1427
1633
|
`Error getting earned rewards for pool ${poolAddress}:`,
|
|
1428
|
-
error,
|
|
1634
|
+
formatLogError(error),
|
|
1429
1635
|
);
|
|
1430
1636
|
throw error;
|
|
1431
1637
|
}
|
|
@@ -1451,7 +1657,7 @@ export class SteerLiquidityService extends Service {
|
|
|
1451
1657
|
} catch (error) {
|
|
1452
1658
|
logger.error(
|
|
1453
1659
|
`Error getting total supply for pool ${poolAddress}:`,
|
|
1454
|
-
error,
|
|
1660
|
+
formatLogError(error),
|
|
1455
1661
|
);
|
|
1456
1662
|
throw error;
|
|
1457
1663
|
}
|
|
@@ -1477,7 +1683,10 @@ export class SteerLiquidityService extends Service {
|
|
|
1477
1683
|
);
|
|
1478
1684
|
return balance;
|
|
1479
1685
|
} catch (error) {
|
|
1480
|
-
logger.error(
|
|
1686
|
+
logger.error(
|
|
1687
|
+
`Error getting balance for pool ${poolAddress}:`,
|
|
1688
|
+
formatLogError(error),
|
|
1689
|
+
);
|
|
1481
1690
|
throw error;
|
|
1482
1691
|
}
|
|
1483
1692
|
}
|
|
@@ -1547,32 +1756,36 @@ export class SteerLiquidityService extends Service {
|
|
|
1547
1756
|
);
|
|
1548
1757
|
}
|
|
1549
1758
|
|
|
1550
|
-
const result:
|
|
1759
|
+
const result: unknown = await response.json();
|
|
1760
|
+
const vaultData = getGraphQLVaultData(result);
|
|
1551
1761
|
|
|
1552
|
-
if (
|
|
1762
|
+
if (vaultData) {
|
|
1553
1763
|
logger.log(
|
|
1554
1764
|
`Successfully fetched GraphQL data for vault ${vaultAddress}`,
|
|
1555
1765
|
);
|
|
1556
|
-
logger.log(
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1766
|
+
logger.log(
|
|
1767
|
+
{
|
|
1768
|
+
name: vaultData.name,
|
|
1769
|
+
token0Symbol: vaultData.token0Symbol,
|
|
1770
|
+
token1Symbol: vaultData.token1Symbol,
|
|
1771
|
+
weeklyFeeAPR: vaultData.weeklyFeeAPR,
|
|
1772
|
+
token0Balance: vaultData.token0Balance,
|
|
1773
|
+
token1Balance: vaultData.token1Balance,
|
|
1774
|
+
},
|
|
1775
|
+
"GraphQL vault data",
|
|
1776
|
+
);
|
|
1777
|
+
return vaultData;
|
|
1565
1778
|
} else {
|
|
1566
1779
|
logger.warn(
|
|
1567
1780
|
`No vault data found in GraphQL response for ${vaultAddress}`,
|
|
1568
1781
|
);
|
|
1569
|
-
logger.log(
|
|
1782
|
+
logger.log("GraphQL response:", JSON.stringify(result, null, 2));
|
|
1570
1783
|
return null;
|
|
1571
1784
|
}
|
|
1572
1785
|
} catch (error) {
|
|
1573
1786
|
logger.error(
|
|
1574
1787
|
`Error fetching GraphQL data for vault ${vaultAddress}:`,
|
|
1575
|
-
error,
|
|
1788
|
+
formatLogError(error),
|
|
1576
1789
|
);
|
|
1577
1790
|
return null;
|
|
1578
1791
|
}
|
|
@@ -1586,12 +1799,11 @@ export class SteerLiquidityService extends Service {
|
|
|
1586
1799
|
_chainId: number,
|
|
1587
1800
|
): Promise<SteerVaultDetailInput> {
|
|
1588
1801
|
try {
|
|
1589
|
-
|
|
1802
|
+
const vaultAddress = vault.address || vault.vaultAddress;
|
|
1803
|
+
if (!vaultAddress) {
|
|
1590
1804
|
logger.warn("Vault missing address, cannot fetch GraphQL data");
|
|
1591
1805
|
return vault;
|
|
1592
1806
|
}
|
|
1593
|
-
|
|
1594
|
-
const vaultAddress = vault.address || vault.vaultAddress;
|
|
1595
1807
|
logger.log(`Enriching vault ${vaultAddress} with GraphQL data...`);
|
|
1596
1808
|
|
|
1597
1809
|
// Fetch GraphQL data
|
|
@@ -1653,7 +1865,10 @@ export class SteerLiquidityService extends Service {
|
|
|
1653
1865
|
);
|
|
1654
1866
|
return vault;
|
|
1655
1867
|
} catch (error) {
|
|
1656
|
-
logger.error(
|
|
1868
|
+
logger.error(
|
|
1869
|
+
"Error enriching vault with GraphQL data:",
|
|
1870
|
+
formatLogError(error),
|
|
1871
|
+
);
|
|
1657
1872
|
return vault; // Return original vault data if enrichment fails
|
|
1658
1873
|
}
|
|
1659
1874
|
}
|
|
@@ -1683,7 +1898,10 @@ export class SteerLiquidityService extends Service {
|
|
|
1683
1898
|
logger.log(`Estimated TVL: $${estimatedTvl.toLocaleString()}`);
|
|
1684
1899
|
return estimatedTvl;
|
|
1685
1900
|
} catch (error) {
|
|
1686
|
-
logger.error(
|
|
1901
|
+
logger.error(
|
|
1902
|
+
"Error calculating TVL from balances:",
|
|
1903
|
+
formatLogError(error),
|
|
1904
|
+
);
|
|
1687
1905
|
return 0;
|
|
1688
1906
|
}
|
|
1689
1907
|
}
|