@elizaos/plugin-wallet 2.0.0-beta.1

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.
Files changed (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/auto-enable.ts +76 -0
  4. package/dist/LpManagementService-BWrQ5-cO.mjs +353 -0
  5. package/dist/MockLpService-D_Apn4Fd.mjs +99 -0
  6. package/dist/aerodrome-CfnESC32.mjs +890 -0
  7. package/dist/chunk-hT5z_Zn9.mjs +35 -0
  8. package/dist/index.d.mts +34727 -0
  9. package/dist/index.mjs +21590 -0
  10. package/dist/lib/server-wallet-trade.d.mts +34 -0
  11. package/dist/lib/server-wallet-trade.mjs +306 -0
  12. package/dist/meteora-BPX39hZo.mjs +22640 -0
  13. package/dist/orca-Bybp1HXO.mjs +249 -0
  14. package/dist/pancakeswp-CkEXlXti.mjs +604 -0
  15. package/dist/plugin-ZO_MTyd0.mjs +529 -0
  16. package/dist/raydium-rfaM9yEf.mjs +539 -0
  17. package/dist/sdk/index.d.mts +32492 -0
  18. package/dist/sdk/index.mjs +6415 -0
  19. package/dist/types-D5252NZk.mjs +487 -0
  20. package/dist/uniswap-CReXgXVN.mjs +573 -0
  21. package/dist/wallet-action.d.mts +6 -0
  22. package/dist/wallet-action.mjs +820 -0
  23. package/package.json +152 -0
  24. package/src/actions/failure-codes.ts +79 -0
  25. package/src/actions/index.ts +1 -0
  26. package/src/analytics/birdeye/actions/wallet-search-address.ts +9 -0
  27. package/src/analytics/birdeye/birdeye-task.ts +175 -0
  28. package/src/analytics/birdeye/birdeye.ts +813 -0
  29. package/src/analytics/birdeye/constants.ts +74 -0
  30. package/src/analytics/birdeye/providers/agent-portfolio-provider.ts +18 -0
  31. package/src/analytics/birdeye/providers/market.ts +227 -0
  32. package/src/analytics/birdeye/providers/portfolio-factory.test.ts +138 -0
  33. package/src/analytics/birdeye/providers/portfolio-factory.ts +252 -0
  34. package/src/analytics/birdeye/providers/trending.ts +365 -0
  35. package/src/analytics/birdeye/providers/wallet.ts +14 -0
  36. package/src/analytics/birdeye/search-category.test.ts +207 -0
  37. package/src/analytics/birdeye/search-category.ts +506 -0
  38. package/src/analytics/birdeye/service.ts +992 -0
  39. package/src/analytics/birdeye/tasks/birdeye.ts +232 -0
  40. package/src/analytics/birdeye/types/api/common.ts +305 -0
  41. package/src/analytics/birdeye/types/api/defi.ts +220 -0
  42. package/src/analytics/birdeye/types/api/pair.ts +200 -0
  43. package/src/analytics/birdeye/types/api/search.ts +86 -0
  44. package/src/analytics/birdeye/types/api/token.ts +635 -0
  45. package/src/analytics/birdeye/types/api/trader.ts +76 -0
  46. package/src/analytics/birdeye/types/api/wallet.ts +181 -0
  47. package/src/analytics/birdeye/types/shared.ts +106 -0
  48. package/src/analytics/birdeye/utils.ts +700 -0
  49. package/src/analytics/dexscreener/errors.ts +28 -0
  50. package/src/analytics/dexscreener/index.ts +3 -0
  51. package/src/analytics/dexscreener/search-category.test.ts +49 -0
  52. package/src/analytics/dexscreener/search-category.ts +42 -0
  53. package/src/analytics/dexscreener/service.ts +595 -0
  54. package/src/analytics/dexscreener/types.ts +128 -0
  55. package/src/analytics/lpinfo/index.d.ts +7 -0
  56. package/src/analytics/lpinfo/index.ts +52 -0
  57. package/src/analytics/lpinfo/kamino/README.md +102 -0
  58. package/src/analytics/lpinfo/kamino/index.ts +24 -0
  59. package/src/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.ts +422 -0
  60. package/src/analytics/lpinfo/kamino/providers/kaminoPoolProvider.ts +365 -0
  61. package/src/analytics/lpinfo/kamino/providers/kaminoProvider.ts +496 -0
  62. package/src/analytics/lpinfo/kamino/services/kaminoLiquidityService.ts +1123 -0
  63. package/src/analytics/lpinfo/kamino/services/kaminoService.ts +758 -0
  64. package/src/analytics/lpinfo/steer/README.md +169 -0
  65. package/src/analytics/lpinfo/steer/index.ts +23 -0
  66. package/src/analytics/lpinfo/steer/providers/steerLiquidityProvider.ts +544 -0
  67. package/src/analytics/lpinfo/steer/services/steerLiquidityService.ts +1690 -0
  68. package/src/analytics/lpinfo/steer/steer-display-types.ts +99 -0
  69. package/src/analytics/news/index.ts +52 -0
  70. package/src/analytics/news/interfaces/types.ts +222 -0
  71. package/src/analytics/news/providers/defiNewsProvider.ts +734 -0
  72. package/src/analytics/news/services/newsDataService.ts +332 -0
  73. package/src/analytics/news/utils/formatters.ts +151 -0
  74. package/src/analytics/token-info/action.ts +240 -0
  75. package/src/analytics/token-info/index.ts +3 -0
  76. package/src/analytics/token-info/params.ts +215 -0
  77. package/src/analytics/token-info/providers.ts +681 -0
  78. package/src/analytics/token-info/service.ts +168 -0
  79. package/src/analytics/token-info/types.ts +74 -0
  80. package/src/audit/audit-log.ts +45 -0
  81. package/src/browser-shim/build-shim.ts +123 -0
  82. package/src/browser-shim/index.ts +5 -0
  83. package/src/browser-shim/shim.template.js +563 -0
  84. package/src/chains/evm/.github/workflows/npm-deploy.yml +112 -0
  85. package/src/chains/evm/LICENSE +21 -0
  86. package/src/chains/evm/README.md +106 -0
  87. package/src/chains/evm/actions/helpers.ts +147 -0
  88. package/src/chains/evm/actions/swap.ts +839 -0
  89. package/src/chains/evm/actions/transfer.ts +254 -0
  90. package/src/chains/evm/biome.json +61 -0
  91. package/src/chains/evm/bridge-router.ts +660 -0
  92. package/src/chains/evm/build.ts +89 -0
  93. package/src/chains/evm/chain-handler.ts +416 -0
  94. package/src/chains/evm/constants.ts +23 -0
  95. package/src/chains/evm/contracts/artifacts/OZGovernor.json +1707 -0
  96. package/src/chains/evm/contracts/artifacts/TimelockController.json +1007 -0
  97. package/src/chains/evm/contracts/artifacts/VoteToken.json +895 -0
  98. package/src/chains/evm/dex/aerodrome/index.ts +34 -0
  99. package/src/chains/evm/dex/aerodrome/services/AerodromeLpService.ts +558 -0
  100. package/src/chains/evm/dex/aerodrome/types.ts +318 -0
  101. package/src/chains/evm/dex/pancakeswp/index.ts +35 -0
  102. package/src/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.ts +743 -0
  103. package/src/chains/evm/dex/pancakeswp/types.ts +65 -0
  104. package/src/chains/evm/dex/uniswap/index.ts +35 -0
  105. package/src/chains/evm/dex/uniswap/services/UniswapV3LpService.ts +759 -0
  106. package/src/chains/evm/dex/uniswap/types.ts +390 -0
  107. package/src/chains/evm/generated/specs/spec-helpers.ts +73 -0
  108. package/src/chains/evm/generated/specs/specs.ts +151 -0
  109. package/src/chains/evm/gov-router.ts +250 -0
  110. package/src/chains/evm/index.browser.ts +16 -0
  111. package/src/chains/evm/index.ts +31 -0
  112. package/src/chains/evm/prompts.ts +193 -0
  113. package/src/chains/evm/providers/get-balance.ts +123 -0
  114. package/src/chains/evm/providers/wallet.ts +715 -0
  115. package/src/chains/evm/routes/sign.ts +333 -0
  116. package/src/chains/evm/rpc-providers.ts +410 -0
  117. package/src/chains/evm/service.ts +140 -0
  118. package/src/chains/evm/templates/index.ts +10 -0
  119. package/src/chains/evm/types/index.ts +432 -0
  120. package/src/chains/evm/vitest.config.ts +18 -0
  121. package/src/chains/registry.ts +668 -0
  122. package/src/chains/solana/README.md +367 -0
  123. package/src/chains/wallet-action.ts +533 -0
  124. package/src/chains/wallet-router.test.ts +296 -0
  125. package/src/contracts.ts +65 -0
  126. package/src/core-augmentation.ts +10 -0
  127. package/src/index.ts +71 -0
  128. package/src/lib/server-wallet-trade.ts +192 -0
  129. package/src/lib/wallet-export-guard.ts +330 -0
  130. package/src/lp/actions/liquidity.ts +827 -0
  131. package/src/lp/e2e/real-token-tests.ts +428 -0
  132. package/src/lp/e2e/scenarios.ts +470 -0
  133. package/src/lp/e2e/test-utils.ts +145 -0
  134. package/src/lp/lp-manager-entry.ts +303 -0
  135. package/src/lp/services/ConcentratedLiquidityService.ts +120 -0
  136. package/src/lp/services/DexInteractionService.ts +226 -0
  137. package/src/lp/services/LpManagementService.test.ts +148 -0
  138. package/src/lp/services/LpManagementService.ts +632 -0
  139. package/src/lp/services/UserLpProfileService.ts +163 -0
  140. package/src/lp/services/VaultService.ts +153 -0
  141. package/src/lp/services/YieldOptimizationService.ts +344 -0
  142. package/src/lp/services/__tests__/MockLpService.ts +146 -0
  143. package/src/lp/tasks/LpAutoRebalanceTask.ts +117 -0
  144. package/src/lp/tasks/__tests__/LpAutoRebalanceTask.test.ts +370 -0
  145. package/src/lp/types.ts +582 -0
  146. package/src/lp/utils/solanaClient.ts +143 -0
  147. package/src/plugin.ts +125 -0
  148. package/src/policy/policy.ts +19 -0
  149. package/src/providers/canonical-provider.ts +27 -0
  150. package/src/providers/unified-wallet-provider.ts +79 -0
  151. package/src/register-routes.ts +11 -0
  152. package/src/routes/plugin.ts +47 -0
  153. package/src/routes/wallet-market-overview-route.ts +869 -0
  154. package/src/sdk/abi.ts +258 -0
  155. package/src/sdk/bridge/abis.ts +126 -0
  156. package/src/sdk/bridge/client.ts +518 -0
  157. package/src/sdk/bridge/index.ts +56 -0
  158. package/src/sdk/bridge/solana.ts +604 -0
  159. package/src/sdk/bridge/types.ts +202 -0
  160. package/src/sdk/convenience.ts +347 -0
  161. package/src/sdk/escrow/MutualStakeEscrow.ts +480 -0
  162. package/src/sdk/escrow/types.ts +64 -0
  163. package/src/sdk/escrow/verifiers.ts +73 -0
  164. package/src/sdk/identity/erc8004.ts +692 -0
  165. package/src/sdk/identity/reputation.ts +449 -0
  166. package/src/sdk/identity/uaid.ts +497 -0
  167. package/src/sdk/identity/validation.ts +372 -0
  168. package/src/sdk/index.ts +763 -0
  169. package/src/sdk/policy/SpendingPolicy.ts +260 -0
  170. package/src/sdk/policy/UptoBillingPolicy.ts +320 -0
  171. package/src/sdk/router/PaymentRouter.ts +215 -0
  172. package/src/sdk/router/index.ts +8 -0
  173. package/src/sdk/swap/SwapModule.ts +310 -0
  174. package/src/sdk/swap/abi.ts +117 -0
  175. package/src/sdk/swap/index.ts +34 -0
  176. package/src/sdk/swap/types.ts +135 -0
  177. package/src/sdk/tokens/decimals.ts +140 -0
  178. package/src/sdk/tokens/registry.ts +911 -0
  179. package/src/sdk/tokens/solana.ts +419 -0
  180. package/src/sdk/tokens/transfers.ts +327 -0
  181. package/src/sdk/types.ts +158 -0
  182. package/src/sdk/wallet-core.ts +115 -0
  183. package/src/sdk/x402/budget.ts +168 -0
  184. package/src/sdk/x402/chains/abstract/index.ts +280 -0
  185. package/src/sdk/x402/client.ts +320 -0
  186. package/src/sdk/x402/index.ts +46 -0
  187. package/src/sdk/x402/middleware.ts +92 -0
  188. package/src/sdk/x402/multi-asset.ts +144 -0
  189. package/src/sdk/x402/types.ts +156 -0
  190. package/src/services/wallet-backend-service.ts +328 -0
  191. package/src/types/wallet-router.ts +227 -0
  192. package/src/utils/intent-trajectory.ts +106 -0
  193. package/src/wallet/backend.ts +62 -0
  194. package/src/wallet/errors.ts +49 -0
  195. package/src/wallet/index.ts +27 -0
  196. package/src/wallet/local-eoa-backend.ts +201 -0
  197. package/src/wallet/pending.ts +60 -0
  198. package/src/wallet/select-backend.ts +47 -0
  199. package/src/wallet/steward-backend.ts +161 -0
  200. package/src/wallet-action.ts +1 -0
package/package.json ADDED
@@ -0,0 +1,152 @@
1
+ {
2
+ "name": "@elizaos/plugin-wallet",
3
+ "version": "2.0.0-beta.1",
4
+ "description": "Unified non-custodial wallet for elizaOS agents — EVM + Solana, ERC-6551 token-bound accounts, on-chain spend policies, x402 micropayments, CCTP bridge, Li.Fi swap routing, Jupiter routing, multi-DEX LP management (Raydium/Orca/Meteora on Solana, Uniswap/Aerodrome on EVM), Hyperliquid perps, Polymarket, Aave/Morpho lending, and Clanker token launches. Replaces plugin-evm + plugin-solana + plugin-raydium + plugin-orca + plugin-meteora + plugin-jupiter + plugin-lp-manager + plugin-clanker behind one canonical action+provider surface.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/eliza-ai/eliza/tree/main/eliza/plugins/plugin-wallet",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/eliza-ai/eliza.git",
11
+ "directory": "eliza/plugins/plugin-wallet"
12
+ },
13
+ "main": "dist/index.mjs",
14
+ "types": "dist/index.d.mts",
15
+ "exports": {
16
+ ".": {
17
+ "import": "./dist/index.mjs",
18
+ "default": "./dist/index.mjs",
19
+ "types": "./dist/index.d.mts"
20
+ },
21
+ "./package.json": "./package.json"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "src",
26
+ "auto-enable.ts",
27
+ "SDK-LICENSE"
28
+ ],
29
+ "elizaos": {
30
+ "plugin": {
31
+ "autoEnableModule": "./auto-enable.ts",
32
+ "capabilities": [
33
+ "wallet",
34
+ "evm",
35
+ "solana"
36
+ ]
37
+ }
38
+ },
39
+ "scripts": {
40
+ "build": "tsdown --no-config src/index.ts --format esm --dts --clean -d dist && tsdown --no-config src/sdk/index.ts --format esm --dts --no-clean -d dist/sdk && tsdown --no-config src/wallet-action.ts --format esm --dts --no-clean -d dist && tsdown --no-config src/lib/server-wallet-trade.ts --format esm --dts --no-clean -d dist/lib && mv dist/index-*.d.ts dist/index.d.ts 2>/dev/null || true && mv dist/sdk/index-*.d.ts dist/sdk/index.d.ts 2>/dev/null || true && mv dist/wallet-action-*.d.ts dist/wallet-action.d.ts 2>/dev/null || true && mv dist/lib/server-wallet-trade-*.d.ts dist/lib/server-wallet-trade.d.ts 2>/dev/null || true",
41
+ "check": "tsc --noEmit",
42
+ "lint": "bunx @biomejs/biome check --write --unsafe .",
43
+ "test": "vitest run --config ./vitest.config.ts",
44
+ "test:watch": "vitest --config ./vitest.config.ts",
45
+ "clean": "rm -rf dist"
46
+ },
47
+ "peerDependencies": {
48
+ "@elizaos/core": "2.0.0-beta.1",
49
+ "@elizaos/plugin-elizacloud": "2.0.0-beta.1"
50
+ },
51
+ "dependencies": {
52
+ "@coral-xyz/anchor": "^0.32.1",
53
+ "@elizaos/cloud-routing": "2.0.0-beta.1",
54
+ "@lifi/data-types": "^6.0.0",
55
+ "@lifi/sdk": "^3.7.9",
56
+ "@lifi/types": "^17.18.0",
57
+ "@noble/hashes": "^1.8.0",
58
+ "@orca-so/whirlpools": "^2.2.0",
59
+ "@orca-so/whirlpools-client": "^6.2.1",
60
+ "@orca-so/whirlpools-core": "^3.1.0",
61
+ "@orca-so/whirlpools-sdk": "^0.20.0",
62
+ "@raydium-io/raydium-sdk": "^1.3.1-beta.58",
63
+ "@solana/spl-token": "0.4.14",
64
+ "@solana/spl-token-metadata": "^0.1.6",
65
+ "@solana/web3.js": "1.98.4",
66
+ "@steerprotocol/sdk": "^3.0.7",
67
+ "bignumber.js": "^11.0.0",
68
+ "bs58": "^6.0.0",
69
+ "tweetnacl": "^1.0.3",
70
+ "viem": "^2.48.8",
71
+ "zod": "^4.4.3"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public"
75
+ },
76
+ "devDependencies": {
77
+ "@elizaos/core": "2.0.0-beta.1",
78
+ "@types/node": "^24.0.0",
79
+ "tsdown": "^0.21.10",
80
+ "typescript": "^6.0.3",
81
+ "vitest": "^4.0.18"
82
+ },
83
+ "agentConfig": {
84
+ "pluginType": "elizaos:plugin:1.0.0",
85
+ "pluginParameters": {
86
+ "ELIZA_WALLET_BACKEND": {
87
+ "type": "string",
88
+ "required": false,
89
+ "description": "Wallet backend selection: 'local' | 'steward' | 'auto'. Default: auto (desktop=local, cloud/mobile=steward).",
90
+ "default": "auto"
91
+ },
92
+ "EVM_PRIVATE_KEY": {
93
+ "type": "string",
94
+ "required": false,
95
+ "sensitive": true,
96
+ "description": "EVM private key (32-byte hex, 0x-prefixed). Local backend only. Hydrated from OS keychain when available."
97
+ },
98
+ "SOLANA_PRIVATE_KEY": {
99
+ "type": "string",
100
+ "required": false,
101
+ "sensitive": true,
102
+ "description": "Solana private key, base58-encoded. Local backend only. Hydrated from OS keychain when available."
103
+ },
104
+ "STEWARD_API_URL": {
105
+ "type": "string",
106
+ "required": false,
107
+ "description": "Steward API base URL. Required when ELIZA_WALLET_BACKEND=steward."
108
+ },
109
+ "STEWARD_AGENT_ID": {
110
+ "type": "string",
111
+ "required": false,
112
+ "description": "Steward agent identifier. Required when ELIZA_WALLET_BACKEND=steward."
113
+ },
114
+ "STEWARD_AGENT_TOKEN": {
115
+ "type": "string",
116
+ "required": false,
117
+ "sensitive": true,
118
+ "description": "Steward agent bearer token. Required when ELIZA_WALLET_BACKEND=steward."
119
+ },
120
+ "STEWARD_TENANT_ID": {
121
+ "type": "string",
122
+ "required": false,
123
+ "description": "Steward tenant identifier (typically the user ID)."
124
+ }
125
+ }
126
+ },
127
+ "keywords": [
128
+ "plugin",
129
+ "elizaos",
130
+ "wallet",
131
+ "non-custodial",
132
+ "evm",
133
+ "solana",
134
+ "erc-6551",
135
+ "x402",
136
+ "cctp",
137
+ "lifi",
138
+ "jupiter",
139
+ "raydium",
140
+ "orca",
141
+ "meteora",
142
+ "hyperliquid",
143
+ "polymarket",
144
+ "aave",
145
+ "morpho",
146
+ "clanker",
147
+ "lp-management",
148
+ "trading",
149
+ "automation"
150
+ ],
151
+ "packageType": "plugin"
152
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Single source of truth for action failure modes. Every error returned to the
3
+ * planner carries a code from one of these unions; the `detail` string is for
4
+ * humans, the code is for the planner to react on.
5
+ *
6
+ * See docs/architecture/wallet-and-trading.md §E.
7
+ */
8
+
9
+ export type ValidateFailureCode =
10
+ | "INVALID_PARAMS"
11
+ | "PLUGIN_DISABLED"
12
+ | "PROVIDER_UNAVAILABLE"
13
+ | "PROVIDER_AUTH_MISSING"
14
+ | "WALLET_NOT_AVAILABLE"
15
+ | "VENUE_NOT_SUPPORTED_ON_BACKEND"
16
+ | "VENUE_NOT_SUPPORTED_FOR_KIND"
17
+ | "POLICY_REQUIRES_APPROVAL"
18
+ | "POLICY_BLOCKED"
19
+ | "INSUFFICIENT_BALANCE"
20
+ | "MARKET_CLOSED"
21
+ | "INSTRUMENT_NOT_FOUND"
22
+ | "LEVERAGE_OUT_OF_RANGE"
23
+ | "SLIPPAGE_EXCEEDED"
24
+ | "WITHDRAWAL_NOT_ALLOWLISTED"
25
+ | "VENUE_GEO_RESTRICTED"
26
+ | "INVALID_ADDRESS"
27
+ | "TOKEN_NOT_SUPPORTED"
28
+ | "POOL_NOT_FOUND"
29
+ | "RANGE_OUT_OF_BOUNDS";
30
+
31
+ export type ActionFailureCode =
32
+ | "PROVIDER_REJECTED"
33
+ | "SIGNATURE_REJECTED"
34
+ | "STEWARD_UNAVAILABLE"
35
+ | "ROUTE_NOT_FOUND"
36
+ | "TRANSACTION_REVERTED"
37
+ | "TIMEOUT";
38
+
39
+ export type FailureCode = ValidateFailureCode | ActionFailureCode;
40
+
41
+ export const isValidateFailureCode = (
42
+ code: string,
43
+ ): code is ValidateFailureCode =>
44
+ (
45
+ [
46
+ "INVALID_PARAMS",
47
+ "PLUGIN_DISABLED",
48
+ "PROVIDER_UNAVAILABLE",
49
+ "PROVIDER_AUTH_MISSING",
50
+ "WALLET_NOT_AVAILABLE",
51
+ "VENUE_NOT_SUPPORTED_ON_BACKEND",
52
+ "VENUE_NOT_SUPPORTED_FOR_KIND",
53
+ "POLICY_REQUIRES_APPROVAL",
54
+ "POLICY_BLOCKED",
55
+ "INSUFFICIENT_BALANCE",
56
+ "MARKET_CLOSED",
57
+ "INSTRUMENT_NOT_FOUND",
58
+ "LEVERAGE_OUT_OF_RANGE",
59
+ "SLIPPAGE_EXCEEDED",
60
+ "WITHDRAWAL_NOT_ALLOWLISTED",
61
+ "VENUE_GEO_RESTRICTED",
62
+ "INVALID_ADDRESS",
63
+ "TOKEN_NOT_SUPPORTED",
64
+ "POOL_NOT_FOUND",
65
+ "RANGE_OUT_OF_BOUNDS",
66
+ ] satisfies ReadonlyArray<ValidateFailureCode>
67
+ ).includes(code as ValidateFailureCode);
68
+
69
+ export const isActionFailureCode = (code: string): code is ActionFailureCode =>
70
+ (
71
+ [
72
+ "PROVIDER_REJECTED",
73
+ "SIGNATURE_REJECTED",
74
+ "STEWARD_UNAVAILABLE",
75
+ "ROUTE_NOT_FOUND",
76
+ "TRANSACTION_REVERTED",
77
+ "TIMEOUT",
78
+ ] satisfies ReadonlyArray<ActionFailureCode>
79
+ ).includes(code as ActionFailureCode);
@@ -0,0 +1 @@
1
+ export * from "./failure-codes.js";
@@ -0,0 +1,9 @@
1
+ import { tokenInfoAction } from "../../token-info/action";
2
+
3
+ /**
4
+ * Compatibility export for the old BIRDEYE_LOOKUP action module.
5
+ * Birdeye lookup is now TOKEN_INFO with target="birdeye".
6
+ */
7
+ export const walletSearchAddressAction = tokenInfoAction;
8
+
9
+ export default tokenInfoAction;
@@ -0,0 +1,175 @@
1
+ // @ts-nocheck -- legacy wallet sync task from absorbed Birdeye plugin; strict types pending cleanup
2
+ import {
3
+ type Content,
4
+ createUniqueUuid,
5
+ type IAgentRuntime,
6
+ type ServiceTypeName,
7
+ type UUID,
8
+ } from "@elizaos/core";
9
+ import { BIRDEYE_SERVICE_NAME } from "./constants";
10
+ import type { BirdeyeService } from "./service";
11
+ import type {
12
+ BirdeyeSupportedChain,
13
+ Portfolio,
14
+ TransactionHistory,
15
+ } from "./types/shared";
16
+ import { extractChain } from "./utils";
17
+
18
+ export interface SentimentContent extends Content {
19
+ text: string;
20
+ source: "sentiment-analysis";
21
+ metadata: {
22
+ timeslot: string;
23
+ processed: boolean;
24
+ occuringTokens?: Array<{
25
+ token: string;
26
+ sentiment: number;
27
+ reason: string;
28
+ }>;
29
+ };
30
+ }
31
+
32
+ export default class Birdeye {
33
+ apiKey: string;
34
+ sentimentRoomId: UUID;
35
+ twitterFeedRoomId: UUID;
36
+ runtime: IAgentRuntime;
37
+
38
+ pSrvBirdeye: Promise<unknown>;
39
+ beService!: BirdeyeService;
40
+
41
+ constructor(runtime: IAgentRuntime) {
42
+ this.apiKey = runtime.getSetting("BIRDEYE_API_KEY");
43
+ this.sentimentRoomId = createUniqueUuid(runtime, "sentiment-analysis");
44
+ this.twitterFeedRoomId = createUniqueUuid(runtime, "twitter-feed");
45
+ this.runtime = runtime;
46
+
47
+ this.pSrvBirdeye = runtime
48
+ .getServiceLoadPromise(BIRDEYE_SERVICE_NAME as ServiceTypeName)
49
+ .then(() => {
50
+ this.beService = this.runtime.getService(
51
+ BIRDEYE_SERVICE_NAME,
52
+ ) as BirdeyeService;
53
+ });
54
+ }
55
+
56
+ private async syncWalletHistory(
57
+ chain: BirdeyeSupportedChain,
58
+ publicKey: string,
59
+ ) {
60
+ try {
61
+ await this.pSrvBirdeye;
62
+
63
+ if (!this.beService) {
64
+ throw new Error("BirdeyeService not initialized");
65
+ }
66
+
67
+ const birdeyeData = await this.beService.fetchWalletTxList(
68
+ chain,
69
+ publicKey,
70
+ );
71
+
72
+ const transactions: TransactionHistory[] = birdeyeData.map(
73
+ (tx: { txHash: string; blockTime: number | string }) => ({
74
+ txHash: tx.txHash,
75
+ blockTime: new Date(tx.blockTime),
76
+ data: tx,
77
+ }),
78
+ );
79
+
80
+ try {
81
+ const cachedTxs = await this.runtime.getCache<TransactionHistory[]>(
82
+ "transaction_history",
83
+ );
84
+ if (cachedTxs && Array.isArray(cachedTxs)) {
85
+ for (const cachedTx of cachedTxs) {
86
+ if (!transactions.some((tx) => tx.txHash === cachedTx.txHash)) {
87
+ transactions.push(cachedTx);
88
+ }
89
+ }
90
+ }
91
+ } catch (_error) {
92
+ this.runtime.logger.debug(
93
+ "Failed to get cached transactions, continuing with Birdeye data only",
94
+ );
95
+ }
96
+
97
+ for (const tx of transactions) {
98
+ if (typeof tx.blockTime === "string") {
99
+ tx.blockTime = new Date(tx.blockTime);
100
+ }
101
+ }
102
+
103
+ transactions.sort(
104
+ (a, b) => b.blockTime.getTime() - a.blockTime.getTime(),
105
+ );
106
+
107
+ try {
108
+ await this.runtime.setCache<TransactionHistory[]>(
109
+ "transaction_history",
110
+ transactions,
111
+ );
112
+ this.runtime.logger.debug(
113
+ `Birdeye Task - Updated transaction history with ${transactions.length} transactions for ${publicKey}`,
114
+ );
115
+ } catch (error) {
116
+ this.runtime.logger.debug(
117
+ `Failed to set transaction cache, continuing without caching: ${
118
+ error instanceof Error ? error.message : String(error)
119
+ }`,
120
+ );
121
+ }
122
+
123
+ return transactions;
124
+ } catch (error) {
125
+ this.runtime.logger.error(
126
+ `Failed to sync wallet history from Birdeye: ${
127
+ error instanceof Error ? error.message : String(error)
128
+ }`,
129
+ );
130
+ return [];
131
+ }
132
+ }
133
+
134
+ private async syncWalletPortfolio(
135
+ chain: BirdeyeSupportedChain,
136
+ publicKey: string,
137
+ ) {
138
+ await this.pSrvBirdeye;
139
+
140
+ if (!this.beService) {
141
+ throw new Error("BirdeyeService not initialized");
142
+ }
143
+
144
+ const data = await this.beService.fetchWalletTokenList(chain, publicKey);
145
+
146
+ await this.runtime.setCache<Portfolio>("portfolio", {
147
+ key: "PORTFOLIO",
148
+ data,
149
+ });
150
+ }
151
+
152
+ async syncWallet() {
153
+ const walletAddr = this.runtime.getSetting("BIRDEYE_WALLET_ADDR");
154
+ if (!walletAddr) {
155
+ return;
156
+ }
157
+
158
+ const explicitChain = this.runtime.getSetting("BIRDEYE_CHAIN");
159
+
160
+ try {
161
+ const chain = extractChain(walletAddr, explicitChain);
162
+ await this.syncWalletHistory(chain, walletAddr);
163
+ await this.syncWalletPortfolio(chain, walletAddr);
164
+
165
+ return true;
166
+ } catch (error) {
167
+ this.runtime.logger?.error(
168
+ `Failed to sync wallet: ${
169
+ error instanceof Error ? error.message : String(error)
170
+ }`,
171
+ );
172
+ return false;
173
+ }
174
+ }
175
+ }