amped-defi 1.0.0

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 (189) hide show
  1. package/README.md +757 -0
  2. package/dist/__mocks__/@sodax/sdk.d.ts +24 -0
  3. package/dist/__mocks__/@sodax/sdk.d.ts.map +1 -0
  4. package/dist/__mocks__/@sodax/sdk.js +24 -0
  5. package/dist/__mocks__/@sodax/sdk.js.map +1 -0
  6. package/dist/__tests__/setup.d.ts +4 -0
  7. package/dist/__tests__/setup.d.ts.map +1 -0
  8. package/dist/__tests__/setup.js +32 -0
  9. package/dist/__tests__/setup.js.map +1 -0
  10. package/dist/index.d.ts +66 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +281 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/policy/policyEngine.d.ts +119 -0
  15. package/dist/policy/policyEngine.d.ts.map +1 -0
  16. package/dist/policy/policyEngine.js +322 -0
  17. package/dist/policy/policyEngine.js.map +1 -0
  18. package/dist/providers/spokeProviderFactory.d.ts +38 -0
  19. package/dist/providers/spokeProviderFactory.d.ts.map +1 -0
  20. package/dist/providers/spokeProviderFactory.js +212 -0
  21. package/dist/providers/spokeProviderFactory.js.map +1 -0
  22. package/dist/sodax/client.d.ts +34 -0
  23. package/dist/sodax/client.d.ts.map +1 -0
  24. package/dist/sodax/client.js +99 -0
  25. package/dist/sodax/client.js.map +1 -0
  26. package/dist/tools/bridge.d.ts +105 -0
  27. package/dist/tools/bridge.d.ts.map +1 -0
  28. package/dist/tools/bridge.js +334 -0
  29. package/dist/tools/bridge.js.map +1 -0
  30. package/dist/tools/discovery.d.ts +141 -0
  31. package/dist/tools/discovery.d.ts.map +1 -0
  32. package/dist/tools/discovery.js +777 -0
  33. package/dist/tools/discovery.js.map +1 -0
  34. package/dist/tools/moneyMarket.d.ts +227 -0
  35. package/dist/tools/moneyMarket.d.ts.map +1 -0
  36. package/dist/tools/moneyMarket.js +867 -0
  37. package/dist/tools/moneyMarket.js.map +1 -0
  38. package/dist/tools/portfolio.d.ts +43 -0
  39. package/dist/tools/portfolio.d.ts.map +1 -0
  40. package/dist/tools/portfolio.js +538 -0
  41. package/dist/tools/portfolio.js.map +1 -0
  42. package/dist/tools/swap.d.ts +71 -0
  43. package/dist/tools/swap.d.ts.map +1 -0
  44. package/dist/tools/swap.js +762 -0
  45. package/dist/tools/swap.js.map +1 -0
  46. package/dist/tools/walletManagement.d.ts +80 -0
  47. package/dist/tools/walletManagement.d.ts.map +1 -0
  48. package/dist/tools/walletManagement.js +289 -0
  49. package/dist/tools/walletManagement.js.map +1 -0
  50. package/dist/types.d.ts +205 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +5 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/utils/errorUtils.d.ts +2 -0
  55. package/dist/utils/errorUtils.d.ts.map +1 -0
  56. package/dist/utils/errorUtils.js +19 -0
  57. package/dist/utils/errorUtils.js.map +1 -0
  58. package/dist/utils/errors.d.ts +144 -0
  59. package/dist/utils/errors.d.ts.map +1 -0
  60. package/dist/utils/errors.js +310 -0
  61. package/dist/utils/errors.js.map +1 -0
  62. package/dist/utils/positionAggregator.d.ts +122 -0
  63. package/dist/utils/positionAggregator.d.ts.map +1 -0
  64. package/dist/utils/positionAggregator.js +377 -0
  65. package/dist/utils/positionAggregator.js.map +1 -0
  66. package/dist/utils/priceService.d.ts +45 -0
  67. package/dist/utils/priceService.d.ts.map +1 -0
  68. package/dist/utils/priceService.js +108 -0
  69. package/dist/utils/priceService.js.map +1 -0
  70. package/dist/utils/sodaxApi.d.ts +92 -0
  71. package/dist/utils/sodaxApi.d.ts.map +1 -0
  72. package/dist/utils/sodaxApi.js +143 -0
  73. package/dist/utils/sodaxApi.js.map +1 -0
  74. package/dist/utils/tokenResolver.d.ts +54 -0
  75. package/dist/utils/tokenResolver.d.ts.map +1 -0
  76. package/dist/utils/tokenResolver.js +252 -0
  77. package/dist/utils/tokenResolver.js.map +1 -0
  78. package/dist/wallet/backendConfig.d.ts +37 -0
  79. package/dist/wallet/backendConfig.d.ts.map +1 -0
  80. package/dist/wallet/backendConfig.js +125 -0
  81. package/dist/wallet/backendConfig.js.map +1 -0
  82. package/dist/wallet/backends/BankrBackend.d.ts +73 -0
  83. package/dist/wallet/backends/BankrBackend.d.ts.map +1 -0
  84. package/dist/wallet/backends/BankrBackend.js +315 -0
  85. package/dist/wallet/backends/BankrBackend.js.map +1 -0
  86. package/dist/wallet/backends/BankrWalletProvider.d.ts +75 -0
  87. package/dist/wallet/backends/BankrWalletProvider.d.ts.map +1 -0
  88. package/dist/wallet/backends/BankrWalletProvider.js +243 -0
  89. package/dist/wallet/backends/BankrWalletProvider.js.map +1 -0
  90. package/dist/wallet/backends/EnvBackend.d.ts +50 -0
  91. package/dist/wallet/backends/EnvBackend.d.ts.map +1 -0
  92. package/dist/wallet/backends/EnvBackend.js +114 -0
  93. package/dist/wallet/backends/EnvBackend.js.map +1 -0
  94. package/dist/wallet/backends/EvmWalletSkillBackend.d.ts +40 -0
  95. package/dist/wallet/backends/EvmWalletSkillBackend.d.ts.map +1 -0
  96. package/dist/wallet/backends/EvmWalletSkillBackend.js +81 -0
  97. package/dist/wallet/backends/EvmWalletSkillBackend.js.map +1 -0
  98. package/dist/wallet/backends/index.d.ts +10 -0
  99. package/dist/wallet/backends/index.d.ts.map +1 -0
  100. package/dist/wallet/backends/index.js +10 -0
  101. package/dist/wallet/backends/index.js.map +1 -0
  102. package/dist/wallet/index.d.ts +9 -0
  103. package/dist/wallet/index.d.ts.map +1 -0
  104. package/dist/wallet/index.js +12 -0
  105. package/dist/wallet/index.js.map +1 -0
  106. package/dist/wallet/providers/AmpedWalletProvider.d.ts +107 -0
  107. package/dist/wallet/providers/AmpedWalletProvider.d.ts.map +1 -0
  108. package/dist/wallet/providers/AmpedWalletProvider.js +208 -0
  109. package/dist/wallet/providers/AmpedWalletProvider.js.map +1 -0
  110. package/dist/wallet/providers/BankrBackend.d.ts +105 -0
  111. package/dist/wallet/providers/BankrBackend.d.ts.map +1 -0
  112. package/dist/wallet/providers/BankrBackend.js +327 -0
  113. package/dist/wallet/providers/BankrBackend.js.map +1 -0
  114. package/dist/wallet/providers/LocalKeyBackend.d.ts +62 -0
  115. package/dist/wallet/providers/LocalKeyBackend.d.ts.map +1 -0
  116. package/dist/wallet/providers/LocalKeyBackend.js +152 -0
  117. package/dist/wallet/providers/LocalKeyBackend.js.map +1 -0
  118. package/dist/wallet/providers/chainConfig.d.ts +209 -0
  119. package/dist/wallet/providers/chainConfig.d.ts.map +1 -0
  120. package/dist/wallet/providers/chainConfig.js +175 -0
  121. package/dist/wallet/providers/chainConfig.js.map +1 -0
  122. package/dist/wallet/providers/index.d.ts +30 -0
  123. package/dist/wallet/providers/index.d.ts.map +1 -0
  124. package/dist/wallet/providers/index.js +32 -0
  125. package/dist/wallet/providers/index.js.map +1 -0
  126. package/dist/wallet/providers/types.d.ts +156 -0
  127. package/dist/wallet/providers/types.d.ts.map +1 -0
  128. package/dist/wallet/providers/types.js +11 -0
  129. package/dist/wallet/providers/types.js.map +1 -0
  130. package/dist/wallet/skillWalletAdapter.d.ts +96 -0
  131. package/dist/wallet/skillWalletAdapter.d.ts.map +1 -0
  132. package/dist/wallet/skillWalletAdapter.js +280 -0
  133. package/dist/wallet/skillWalletAdapter.js.map +1 -0
  134. package/dist/wallet/types.d.ts +134 -0
  135. package/dist/wallet/types.d.ts.map +1 -0
  136. package/dist/wallet/types.js +138 -0
  137. package/dist/wallet/types.js.map +1 -0
  138. package/dist/wallet/walletManager.d.ts +111 -0
  139. package/dist/wallet/walletManager.d.ts.map +1 -0
  140. package/dist/wallet/walletManager.js +476 -0
  141. package/dist/wallet/walletManager.js.map +1 -0
  142. package/dist/wallet/walletRegistry.d.ts +95 -0
  143. package/dist/wallet/walletRegistry.d.ts.map +1 -0
  144. package/dist/wallet/walletRegistry.js +184 -0
  145. package/dist/wallet/walletRegistry.js.map +1 -0
  146. package/index.js +2 -0
  147. package/openclaw.plugin.json +37 -0
  148. package/package.json +69 -0
  149. package/src/__mocks__/@sodax/sdk.ts +28 -0
  150. package/src/__tests__/errors.test.ts +238 -0
  151. package/src/__tests__/policyEngine.test.ts +354 -0
  152. package/src/__tests__/positionAggregator.test.ts +271 -0
  153. package/src/__tests__/setup.ts +35 -0
  154. package/src/__tests__/sodaxApi.test.ts +203 -0
  155. package/src/__tests__/walletRegistry.test.ts +155 -0
  156. package/src/index.ts +376 -0
  157. package/src/policy/policyEngine.ts +389 -0
  158. package/src/providers/spokeProviderFactory.ts +283 -0
  159. package/src/sodax/client.ts +113 -0
  160. package/src/tools/bridge.ts +425 -0
  161. package/src/tools/discovery.ts +989 -0
  162. package/src/tools/moneyMarket.ts +1265 -0
  163. package/src/tools/portfolio.ts +697 -0
  164. package/src/tools/swap.ts +926 -0
  165. package/src/tools/walletManagement.ts +359 -0
  166. package/src/types.ts +228 -0
  167. package/src/utils/errorUtils.ts +16 -0
  168. package/src/utils/errors.ts +396 -0
  169. package/src/utils/positionAggregator.ts +559 -0
  170. package/src/utils/priceService.ts +153 -0
  171. package/src/utils/sodaxApi.ts +261 -0
  172. package/src/utils/tokenResolver.ts +286 -0
  173. package/src/wallet/backendConfig.ts +151 -0
  174. package/src/wallet/backends/BankrBackend.ts +399 -0
  175. package/src/wallet/backends/BankrWalletProvider.ts +329 -0
  176. package/src/wallet/backends/EnvBackend.ts +149 -0
  177. package/src/wallet/backends/EvmWalletSkillBackend.ts +110 -0
  178. package/src/wallet/backends/index.ts +10 -0
  179. package/src/wallet/index.ts +14 -0
  180. package/src/wallet/providers/AmpedWalletProvider.ts +267 -0
  181. package/src/wallet/providers/BankrBackend.ts +407 -0
  182. package/src/wallet/providers/LocalKeyBackend.ts +184 -0
  183. package/src/wallet/providers/chainConfig.ts +194 -0
  184. package/src/wallet/providers/index.ts +62 -0
  185. package/src/wallet/providers/types.ts +186 -0
  186. package/src/wallet/skillWalletAdapter.ts +335 -0
  187. package/src/wallet/types.ts +248 -0
  188. package/src/wallet/walletManager.ts +561 -0
  189. package/src/wallet/walletRegistry.ts +216 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moneyMarket.js","sourceRoot":"","sources":["../../src/tools/moneyMarket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Portfolio Summary Tool
3
+ *
4
+ * Provides a unified view of all wallet balances and positions.
5
+ * Queries native tokens and major stablecoins via RPC, plus money market positions.
6
+ *
7
+ * @module tools/portfolio
8
+ */
9
+ import { Static } from '@sinclair/typebox';
10
+ /**
11
+ * Schema for amped_portfolio_summary
12
+ */
13
+ export declare const PortfolioSummarySchema: import("@sinclair/typebox").TObject<{
14
+ walletId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
15
+ chains: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
16
+ includeZeroBalances: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
17
+ }>;
18
+ type PortfolioSummaryParams = Static<typeof PortfolioSummarySchema>;
19
+ /**
20
+ * Handle portfolio summary request
21
+ */
22
+ export declare function handlePortfolioSummary(params: PortfolioSummaryParams): Promise<unknown>;
23
+ /**
24
+ * Get all Solana balances for a wallet
25
+ */
26
+ export declare function getSolanaWalletBalances(address: string, includeZeroBalances?: boolean): Promise<{
27
+ chainId: string;
28
+ chainName: string;
29
+ native: {
30
+ symbol: string;
31
+ balance: string;
32
+ usdValue?: string;
33
+ };
34
+ tokens: Array<{
35
+ symbol: string;
36
+ balance: string;
37
+ address: string;
38
+ usdValue?: string;
39
+ }>;
40
+ chainTotalUsd?: string;
41
+ } | null>;
42
+ export {};
43
+ //# sourceMappingURL=portfolio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../../src/tools/portfolio.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAgBjD;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;EAWjC,CAAC;AAEH,KAAK,sBAAsB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AA2QpE;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAoOlB;AAmHD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,mBAAmB,GAAE,OAAe,GACnC,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CAAC,CA4BR"}
@@ -0,0 +1,538 @@
1
+ /**
2
+ * Portfolio Summary Tool
3
+ *
4
+ * Provides a unified view of all wallet balances and positions.
5
+ * Queries native tokens and major stablecoins via RPC, plus money market positions.
6
+ *
7
+ * @module tools/portfolio
8
+ */
9
+ import { Type } from '@sinclair/typebox';
10
+ import { createPublicClient, http, formatUnits } from 'viem';
11
+ import { getWalletManager } from '../wallet';
12
+ import { aggregateCrossChainPositions, formatHealthFactor, getHealthFactorStatus } from '../utils/positionAggregator';
13
+ import { fetchTokenPrices } from '../utils/priceService';
14
+ import { getViemChain, getDefaultRpcUrl, resolveChainId, CHAIN_IDS, } from '../wallet/providers/chainConfig';
15
+ // ============================================================================
16
+ // TypeBox Schema
17
+ // ============================================================================
18
+ /**
19
+ * Schema for amped_portfolio_summary
20
+ */
21
+ export const PortfolioSummarySchema = Type.Object({
22
+ walletId: Type.Optional(Type.String({
23
+ description: 'Specific wallet to query (defaults to all wallets)',
24
+ })),
25
+ chains: Type.Optional(Type.Array(Type.String(), {
26
+ description: 'Specific chains to query (defaults to all supported chains)',
27
+ })),
28
+ includeZeroBalances: Type.Optional(Type.Boolean({
29
+ description: 'Include tokens with zero balance',
30
+ default: false,
31
+ })),
32
+ });
33
+ /**
34
+ * Major tokens to check on each chain
35
+ */
36
+ const MAJOR_TOKENS = {
37
+ [CHAIN_IDS.ETHEREUM]: [
38
+ { address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', symbol: 'USDC', decimals: 6 },
39
+ { address: '0xdAC17F958D2ee523a2206206994597C13D831ec7', symbol: 'USDT', decimals: 6 },
40
+ { address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', symbol: 'WETH', decimals: 18 },
41
+ ],
42
+ [CHAIN_IDS.BASE]: [
43
+ { address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', symbol: 'USDC', decimals: 6 },
44
+ { address: '0x4200000000000000000000000000000000000006', symbol: 'WETH', decimals: 18 },
45
+ ],
46
+ [CHAIN_IDS.ARBITRUM]: [
47
+ { address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', symbol: 'USDC', decimals: 6 },
48
+ { address: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', symbol: 'USDT', decimals: 6 },
49
+ { address: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', symbol: 'WETH', decimals: 18 },
50
+ ],
51
+ [CHAIN_IDS.OPTIMISM]: [
52
+ { address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85', symbol: 'USDC', decimals: 6 },
53
+ { address: '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', symbol: 'USDT', decimals: 6 },
54
+ { address: '0x4200000000000000000000000000000000000006', symbol: 'WETH', decimals: 18 },
55
+ ],
56
+ [CHAIN_IDS.POLYGON]: [
57
+ { address: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', symbol: 'USDC', decimals: 6 },
58
+ { address: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', symbol: 'USDT', decimals: 6 },
59
+ { address: '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', symbol: 'WETH', decimals: 18 },
60
+ ],
61
+ [CHAIN_IDS.BSC]: [
62
+ { address: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', symbol: 'USDC', decimals: 18 },
63
+ { address: '0x55d398326f99059fF775485246999027B3197955', symbol: 'USDT', decimals: 18 },
64
+ { address: '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', symbol: 'WETH', decimals: 18 },
65
+ ],
66
+ [CHAIN_IDS.AVALANCHE]: [
67
+ { address: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', symbol: 'USDC', decimals: 6 },
68
+ { address: '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7', symbol: 'USDT', decimals: 6 },
69
+ { address: '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB', symbol: 'WETH', decimals: 18 },
70
+ ],
71
+ [CHAIN_IDS.SONIC]: [
72
+ { address: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894', symbol: 'USDC', decimals: 6 },
73
+ ],
74
+ [CHAIN_IDS.LIGHTLINK]: [
75
+ { address: '0xbCF8C1B03bBDDA88D579330BDF236B58F8bb2cFd', symbol: 'USDC', decimals: 6 },
76
+ ],
77
+ };
78
+ /**
79
+ * Native token symbols by chain
80
+ */
81
+ const NATIVE_SYMBOLS = {
82
+ [CHAIN_IDS.ETHEREUM]: 'ETH',
83
+ [CHAIN_IDS.ARBITRUM]: 'ETH',
84
+ [CHAIN_IDS.OPTIMISM]: 'ETH',
85
+ [CHAIN_IDS.BASE]: 'ETH',
86
+ [CHAIN_IDS.POLYGON]: 'POL',
87
+ [CHAIN_IDS.BSC]: 'BNB',
88
+ [CHAIN_IDS.AVALANCHE]: 'AVAX',
89
+ [CHAIN_IDS.SONIC]: 'S',
90
+ [CHAIN_IDS.LIGHTLINK]: 'ETH',
91
+ [CHAIN_IDS.HYPEREVM]: 'HYPE',
92
+ [CHAIN_IDS.KAIA]: 'KAIA',
93
+ };
94
+ /**
95
+ * Chain ID to name mapping
96
+ */
97
+ const CHAIN_NAMES = {
98
+ [CHAIN_IDS.ETHEREUM]: 'Ethereum',
99
+ [CHAIN_IDS.ARBITRUM]: 'Arbitrum',
100
+ [CHAIN_IDS.OPTIMISM]: 'Optimism',
101
+ [CHAIN_IDS.BASE]: 'Base',
102
+ [CHAIN_IDS.POLYGON]: 'Polygon',
103
+ [CHAIN_IDS.BSC]: 'BSC',
104
+ [CHAIN_IDS.AVALANCHE]: 'Avalanche',
105
+ [CHAIN_IDS.SONIC]: 'Sonic',
106
+ [CHAIN_IDS.LIGHTLINK]: 'LightLink',
107
+ [CHAIN_IDS.HYPEREVM]: 'HyperEVM',
108
+ [CHAIN_IDS.KAIA]: 'Kaia',
109
+ };
110
+ /**
111
+ * Chain name strings for wallet support check
112
+ */
113
+ const CHAIN_NAME_STRINGS = {
114
+ [CHAIN_IDS.ETHEREUM]: ['ethereum'],
115
+ [CHAIN_IDS.BASE]: ['base'],
116
+ [CHAIN_IDS.ARBITRUM]: ['arbitrum'],
117
+ [CHAIN_IDS.OPTIMISM]: ['optimism'],
118
+ [CHAIN_IDS.POLYGON]: ['polygon'],
119
+ [CHAIN_IDS.BSC]: ['bsc'],
120
+ [CHAIN_IDS.AVALANCHE]: ['avalanche', 'avax'],
121
+ [CHAIN_IDS.SONIC]: ['sonic'],
122
+ [CHAIN_IDS.LIGHTLINK]: ['lightlink'],
123
+ };
124
+ // ============================================================================
125
+ // Helper Functions
126
+ // ============================================================================
127
+ /**
128
+ * Create a viem public client for a chain
129
+ */
130
+ function createClient(chainId) {
131
+ const chain = getViemChain(chainId);
132
+ const rpcUrl = getDefaultRpcUrl(chainId);
133
+ return createPublicClient({
134
+ chain,
135
+ transport: http(rpcUrl, { timeout: 10000 }),
136
+ });
137
+ }
138
+ /**
139
+ * Get native balance for a wallet on a chain
140
+ */
141
+ async function getNativeBalance(client, address, chainId) {
142
+ try {
143
+ const balance = await client.getBalance({ address });
144
+ return {
145
+ symbol: NATIVE_SYMBOLS[chainId] || 'ETH',
146
+ balance: formatUnits(balance, 18),
147
+ balanceRaw: balance,
148
+ };
149
+ }
150
+ catch (error) {
151
+ console.error(`[portfolio] Failed to get native balance on chain ${chainId}:`, error);
152
+ return { symbol: NATIVE_SYMBOLS[chainId] || 'ETH', balance: '0', balanceRaw: 0n };
153
+ }
154
+ }
155
+ /**
156
+ * Get ERC20 token balance using eth_call directly (avoids viem type issues)
157
+ */
158
+ async function getTokenBalance(rpcUrl, walletAddress, tokenAddress, decimals, symbol) {
159
+ try {
160
+ // balanceOf(address) selector: 0x70a08231
161
+ const paddedAddress = walletAddress.slice(2).toLowerCase().padStart(64, '0');
162
+ const callData = `0x70a08231${paddedAddress}`;
163
+ const response = await fetch(rpcUrl, {
164
+ method: 'POST',
165
+ headers: { 'Content-Type': 'application/json' },
166
+ body: JSON.stringify({
167
+ jsonrpc: '2.0',
168
+ method: 'eth_call',
169
+ params: [{ to: tokenAddress, data: callData }, 'latest'],
170
+ id: 1,
171
+ }),
172
+ });
173
+ const json = await response.json();
174
+ const result = json.result;
175
+ if (!result || result === '0x' || result === '0x0') {
176
+ return { symbol, balance: '0', balanceRaw: 0n, address: tokenAddress };
177
+ }
178
+ const balanceRaw = BigInt(result);
179
+ const balance = formatUnits(balanceRaw, decimals);
180
+ return { symbol, balance, balanceRaw, address: tokenAddress };
181
+ }
182
+ catch (error) {
183
+ console.error(`[portfolio] Failed to get ${symbol} balance:`, error);
184
+ return { symbol, balance: '0', balanceRaw: 0n, address: tokenAddress };
185
+ }
186
+ }
187
+ /**
188
+ * Query all balances for a wallet on a specific chain
189
+ */
190
+ async function getChainBalances(address, chainId, includeZeroBalances) {
191
+ const client = createClient(chainId);
192
+ const rpcUrl = getDefaultRpcUrl(chainId);
193
+ const chainName = CHAIN_NAMES[chainId] || `Chain ${chainId}`;
194
+ // Get native balance
195
+ const native = await getNativeBalance(client, address, chainId);
196
+ // Get token balances
197
+ const tokenConfigs = MAJOR_TOKENS[chainId] || [];
198
+ const tokenPromises = tokenConfigs.map((t) => getTokenBalance(rpcUrl, address, t.address, t.decimals, t.symbol));
199
+ const tokenResults = await Promise.all(tokenPromises);
200
+ // Filter zero balances if requested
201
+ const tokens = includeZeroBalances
202
+ ? tokenResults.map((t) => ({ symbol: t.symbol, balance: t.balance, address: t.address }))
203
+ : tokenResults
204
+ .filter((t) => t.balanceRaw > 0n)
205
+ .map((t) => ({ symbol: t.symbol, balance: t.balance, address: t.address }));
206
+ return {
207
+ chainId: chainId.toString(),
208
+ chainName,
209
+ native: {
210
+ symbol: native.symbol,
211
+ balance: parseFloat(native.balance).toFixed(6),
212
+ },
213
+ tokens,
214
+ };
215
+ }
216
+ /**
217
+ * Handle portfolio summary request
218
+ */
219
+ export async function handlePortfolioSummary(params) {
220
+ const { walletId, chains, includeZeroBalances = false } = params;
221
+ console.log('[portfolio:summary] Fetching portfolio summary', {
222
+ walletId: walletId || 'all',
223
+ chains: chains || 'all',
224
+ includeZeroBalances,
225
+ });
226
+ // Fetch token prices from SODAX (cached, 1 min TTL)
227
+ let priceMap = null;
228
+ try {
229
+ priceMap = await fetchTokenPrices();
230
+ }
231
+ catch (err) {
232
+ console.warn('[portfolio] Failed to fetch prices, USD values will be unavailable:', err);
233
+ }
234
+ const walletManager = getWalletManager();
235
+ const allWallets = await walletManager.listWallets();
236
+ // Filter to specific wallet if requested
237
+ const walletsToQuery = walletId
238
+ ? allWallets.filter((w) => w.nickname === walletId)
239
+ : allWallets;
240
+ if (walletsToQuery.length === 0) {
241
+ return {
242
+ success: false,
243
+ error: walletId ? `Wallet not found: ${walletId}` : 'No wallets configured',
244
+ };
245
+ }
246
+ // Determine chains to query
247
+ // Query all chains with configured tokens by default
248
+ const defaultChains = [
249
+ CHAIN_IDS.BASE,
250
+ CHAIN_IDS.ETHEREUM,
251
+ CHAIN_IDS.ARBITRUM,
252
+ CHAIN_IDS.OPTIMISM,
253
+ CHAIN_IDS.POLYGON,
254
+ CHAIN_IDS.SONIC,
255
+ CHAIN_IDS.BSC,
256
+ CHAIN_IDS.AVALANCHE,
257
+ CHAIN_IDS.LIGHTLINK,
258
+ ];
259
+ const chainIdsToQuery = chains
260
+ ? chains.map((c) => resolveChainId(c))
261
+ : defaultChains;
262
+ const results = [];
263
+ let totalValueUsd = 0;
264
+ // Helper to get USD price for a symbol
265
+ const getPrice = (symbol) => {
266
+ if (!priceMap)
267
+ return null;
268
+ const lower = symbol.toLowerCase();
269
+ return priceMap.bySymbol.get(lower) ?? priceMap.bySymbol.get('soda' + lower) ?? null;
270
+ };
271
+ for (const wallet of walletsToQuery) {
272
+ // Skip wallets without known addresses
273
+ if (wallet.address === '0x...') {
274
+ console.log(`[portfolio] Skipping wallet ${wallet.nickname} - address not resolved`);
275
+ continue;
276
+ }
277
+ const address = wallet.address;
278
+ // Filter chains to those the wallet supports
279
+ const supportedChains = wallet.chains || [];
280
+ const chainsForWallet = chainIdsToQuery.filter((cid) => {
281
+ const names = CHAIN_NAME_STRINGS[cid] || [];
282
+ return supportedChains.length === 0 || names.some((n) => supportedChains.includes(n));
283
+ });
284
+ // Query balances for each chain (in parallel)
285
+ const balancePromises = chainsForWallet.map((cid) => getChainBalances(address, cid, includeZeroBalances).catch((err) => {
286
+ console.error(`[portfolio] Failed to query chain ${cid}:`, err);
287
+ return null;
288
+ }));
289
+ const balanceResults = (await Promise.all(balancePromises)).filter((b) => b !== null);
290
+ // Filter out chains with no balances if not including zeros
291
+ const filteredBalances = includeZeroBalances
292
+ ? balanceResults
293
+ : balanceResults.filter((b) => parseFloat(b.native.balance) > 0 || b.tokens.length > 0);
294
+ // Add USD values to balances
295
+ let walletBalanceUsd = 0;
296
+ const balancesWithUsd = filteredBalances.map((chainBalance) => {
297
+ let chainTotalUsd = 0;
298
+ // Native token USD value
299
+ const nativePrice = getPrice(chainBalance.native.symbol);
300
+ const nativeBalance = parseFloat(chainBalance.native.balance);
301
+ const nativeUsdValue = nativePrice ? nativeBalance * nativePrice : null;
302
+ if (nativeUsdValue)
303
+ chainTotalUsd += nativeUsdValue;
304
+ // Token USD values
305
+ const tokensWithUsd = chainBalance.tokens.map((token) => {
306
+ const price = getPrice(token.symbol);
307
+ const balance = parseFloat(token.balance);
308
+ const usdValue = price ? balance * price : null;
309
+ if (usdValue)
310
+ chainTotalUsd += usdValue;
311
+ return {
312
+ ...token,
313
+ usdValue: usdValue ? `$${usdValue.toFixed(2)}` : undefined,
314
+ };
315
+ });
316
+ walletBalanceUsd += chainTotalUsd;
317
+ return {
318
+ chainId: chainBalance.chainId,
319
+ chainName: chainBalance.chainName,
320
+ native: {
321
+ symbol: chainBalance.native.symbol,
322
+ balance: chainBalance.native.balance,
323
+ usdValue: nativeUsdValue ? `$${nativeUsdValue.toFixed(2)}` : undefined,
324
+ },
325
+ tokens: tokensWithUsd,
326
+ chainTotalUsd: chainTotalUsd > 0 ? `$${chainTotalUsd.toFixed(2)}` : undefined,
327
+ };
328
+ });
329
+ // Query Solana balances if wallet has a Solana address
330
+ // Bankr wallets have a separate Solana address that can be cached
331
+ const solanaAddress = wallet.solanaAddress;
332
+ if (solanaAddress) {
333
+ try {
334
+ const solanaBalances = await getSolanaWalletBalances(solanaAddress, includeZeroBalances);
335
+ if (solanaBalances) {
336
+ // Add USD values for Solana
337
+ let solanaTotalUsd = 0;
338
+ const solPrice = getPrice('SOL');
339
+ const nativeBalance = parseFloat(solanaBalances.native.balance);
340
+ const nativeUsdValue = solPrice ? nativeBalance * solPrice : null;
341
+ if (nativeUsdValue)
342
+ solanaTotalUsd += nativeUsdValue;
343
+ const tokensWithUsd = solanaBalances.tokens.map((token) => {
344
+ const price = getPrice(token.symbol);
345
+ const balance = parseFloat(token.balance);
346
+ const usdValue = price ? balance * price : null;
347
+ if (usdValue)
348
+ solanaTotalUsd += usdValue;
349
+ return { ...token, usdValue: usdValue ? `${usdValue.toFixed(2)}` : undefined };
350
+ });
351
+ walletBalanceUsd += solanaTotalUsd;
352
+ balancesWithUsd.push({
353
+ chainId: 'solana',
354
+ chainName: 'Solana',
355
+ native: {
356
+ symbol: solanaBalances.native.symbol,
357
+ balance: solanaBalances.native.balance,
358
+ usdValue: nativeUsdValue ? `${nativeUsdValue.toFixed(2)}` : undefined,
359
+ },
360
+ tokens: tokensWithUsd,
361
+ chainTotalUsd: solanaTotalUsd > 0 ? `${solanaTotalUsd.toFixed(2)}` : undefined,
362
+ });
363
+ }
364
+ }
365
+ catch (err) {
366
+ console.error(`[portfolio] Failed to get Solana balances for ${wallet.nickname}:`, err);
367
+ }
368
+ }
369
+ // Get money market positions (aggregate)
370
+ let mmSummary;
371
+ try {
372
+ const positions = await aggregateCrossChainPositions(wallet.nickname);
373
+ if (positions && (positions.summary.totalSupplyUsd > 0 || positions.summary.totalBorrowUsd > 0)) {
374
+ const hfStatus = getHealthFactorStatus(positions.summary.healthFactor);
375
+ // Build per-chain breakdown with individual health factors
376
+ const chainBreakdown = positions.chainSummaries.map(cs => ({
377
+ chainId: cs.chainId,
378
+ supplyUsd: cs.supplyUsd.toFixed(2),
379
+ borrowUsd: cs.borrowUsd.toFixed(2),
380
+ healthFactor: formatHealthFactor(cs.healthFactor),
381
+ healthStatus: getHealthFactorStatus(cs.healthFactor),
382
+ }));
383
+ mmSummary = {
384
+ totalSupplyUsd: positions.summary.totalSupplyUsd.toFixed(2),
385
+ totalBorrowUsd: positions.summary.totalBorrowUsd.toFixed(2),
386
+ netWorthUsd: positions.summary.netWorthUsd.toFixed(2),
387
+ healthFactor: formatHealthFactor(positions.summary.healthFactor),
388
+ healthStatus: hfStatus,
389
+ chainBreakdown,
390
+ };
391
+ // MM net worth is already USD - add to wallet total
392
+ walletBalanceUsd += positions.summary.netWorthUsd;
393
+ }
394
+ }
395
+ catch (err) {
396
+ console.error(`[portfolio] Failed to get MM positions for ${wallet.nickname}:`, err);
397
+ }
398
+ totalValueUsd += walletBalanceUsd;
399
+ results.push({
400
+ wallet: {
401
+ nickname: wallet.nickname,
402
+ address: wallet.address,
403
+ type: wallet.type,
404
+ },
405
+ balances: balancesWithUsd,
406
+ moneyMarket: mmSummary,
407
+ walletTotalUsd: walletBalanceUsd > 0 ? `$${walletBalanceUsd.toFixed(2)}` : undefined,
408
+ });
409
+ }
410
+ // Build summary
411
+ const summary = {
412
+ walletCount: results.length,
413
+ chainsQueried: chainIdsToQuery.length,
414
+ timestamp: new Date().toISOString(),
415
+ estimatedTotalUsd: totalValueUsd > 0 ? `$${totalValueUsd.toFixed(2)}` : 'No positions',
416
+ priceSource: priceMap ? 'SODAX' : 'unavailable',
417
+ };
418
+ return {
419
+ success: true,
420
+ summary,
421
+ wallets: results,
422
+ };
423
+ }
424
+ // ============================================================================
425
+ // Solana Balance Functions
426
+ // ============================================================================
427
+ const SOLANA_RPC_URL = 'https://api.mainnet-beta.solana.com';
428
+ /**
429
+ * Major SPL tokens to check on Solana
430
+ */
431
+ const SOLANA_TOKENS = [
432
+ { mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', symbol: 'USDC', decimals: 6 },
433
+ { mint: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', symbol: 'USDT', decimals: 6 },
434
+ ];
435
+ /**
436
+ * Get native SOL balance for a Solana wallet
437
+ */
438
+ async function getSolanaBalance(address) {
439
+ try {
440
+ const response = await fetch(SOLANA_RPC_URL, {
441
+ method: 'POST',
442
+ headers: { 'Content-Type': 'application/json' },
443
+ body: JSON.stringify({
444
+ jsonrpc: '2.0',
445
+ id: 1,
446
+ method: 'getBalance',
447
+ params: [address],
448
+ }),
449
+ });
450
+ const json = await response.json();
451
+ const lamports = BigInt(json.result?.value || 0);
452
+ // SOL has 9 decimals
453
+ const balance = Number(lamports) / 1e9;
454
+ return {
455
+ symbol: 'SOL',
456
+ balance: balance.toFixed(6),
457
+ balanceRaw: lamports,
458
+ };
459
+ }
460
+ catch (error) {
461
+ console.error('[portfolio] Failed to get SOL balance:', error);
462
+ return { symbol: 'SOL', balance: '0', balanceRaw: 0n };
463
+ }
464
+ }
465
+ /**
466
+ * Get SPL token balances for a Solana wallet
467
+ */
468
+ async function getSolanaTokenBalances(address) {
469
+ const results = [];
470
+ try {
471
+ // Query all token accounts owned by this wallet
472
+ const response = await fetch(SOLANA_RPC_URL, {
473
+ method: 'POST',
474
+ headers: { 'Content-Type': 'application/json' },
475
+ body: JSON.stringify({
476
+ jsonrpc: '2.0',
477
+ id: 1,
478
+ method: 'getTokenAccountsByOwner',
479
+ params: [
480
+ address,
481
+ { programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' },
482
+ { encoding: 'jsonParsed' },
483
+ ],
484
+ }),
485
+ });
486
+ const json = await response.json();
487
+ const accounts = json.result?.value || [];
488
+ // Match against known tokens
489
+ for (const tokenConfig of SOLANA_TOKENS) {
490
+ const account = accounts.find((a) => a.account.data.parsed.info.mint === tokenConfig.mint);
491
+ if (account) {
492
+ const amount = account.account.data.parsed.info.tokenAmount.uiAmount || 0;
493
+ if (amount > 0) {
494
+ results.push({
495
+ symbol: tokenConfig.symbol,
496
+ balance: amount.toFixed(6),
497
+ address: tokenConfig.mint,
498
+ });
499
+ }
500
+ }
501
+ }
502
+ }
503
+ catch (error) {
504
+ console.error('[portfolio] Failed to get Solana token balances:', error);
505
+ }
506
+ return results;
507
+ }
508
+ /**
509
+ * Get all Solana balances for a wallet
510
+ */
511
+ export async function getSolanaWalletBalances(address, includeZeroBalances = false) {
512
+ // Validate Solana address format (base58, 32-44 chars)
513
+ if (!address || address.startsWith('0x') || address.length < 32 || address.length > 44) {
514
+ return null;
515
+ }
516
+ try {
517
+ const native = await getSolanaBalance(address);
518
+ const tokens = await getSolanaTokenBalances(address);
519
+ // Skip if no balances and not including zeros
520
+ if (!includeZeroBalances && native.balanceRaw === 0n && tokens.length === 0) {
521
+ return null;
522
+ }
523
+ return {
524
+ chainId: 'solana',
525
+ chainName: 'Solana',
526
+ native: {
527
+ symbol: native.symbol,
528
+ balance: native.balance,
529
+ },
530
+ tokens,
531
+ };
532
+ }
533
+ catch (error) {
534
+ console.error('[portfolio] Failed to get Solana balances:', error);
535
+ return null;
536
+ }
537
+ }
538
+ //# sourceMappingURL=portfolio.js.map