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,216 @@
1
+ /**
2
+ * Wallet Registry
3
+ *
4
+ * Manages wallet resolution by walletId.
5
+ * Supports execution mode (with private key) and prepare mode (address-only).
6
+ *
7
+ * Now integrates with evm-wallet-skill for seamless wallet configuration.
8
+ * @see https://github.com/surfer77/evm-wallet-skill
9
+ */
10
+
11
+ import { WalletConfig } from '../types';
12
+ import { EvmWalletSkillAdapter, getWalletAdapter } from './skillWalletAdapter';
13
+
14
+ /**
15
+ * Wallet registry entry
16
+ */
17
+ interface WalletEntry extends WalletConfig {
18
+ mode: 'execute' | 'prepare';
19
+ }
20
+
21
+ /**
22
+ * Wallet Registry class for resolving wallet configurations
23
+ */
24
+ export class WalletRegistry {
25
+ private wallets: Map<string, WalletEntry>;
26
+ private skillAdapter: EvmWalletSkillAdapter;
27
+
28
+ constructor() {
29
+ this.skillAdapter = getWalletAdapter();
30
+ this.wallets = this.loadWallets();
31
+
32
+ // Log skill adapter status
33
+ if (this.skillAdapter.isUsingSkillWallets()) {
34
+ console.log('[walletRegistry] evm-wallet-skill integration active');
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Load wallet configurations from environment
40
+ *
41
+ * @returns Map of walletId to wallet entry
42
+ */
43
+ private loadWallets(): Map<string, WalletEntry> {
44
+ const walletsJson = process.env.AMPED_OC_WALLETS_JSON;
45
+ const mode = (process.env.AMPED_OC_MODE as 'execute' | 'prepare') || 'execute';
46
+
47
+ if (!walletsJson) {
48
+ console.warn('[walletRegistry] AMPED_OC_WALLETS_JSON not set');
49
+ return new Map();
50
+ }
51
+
52
+ try {
53
+ const walletConfigs = JSON.parse(walletsJson) as Record<string, WalletConfig>;
54
+ const wallets = new Map<string, WalletEntry>();
55
+
56
+ for (const [walletId, config] of Object.entries(walletConfigs)) {
57
+ wallets.set(walletId, {
58
+ ...config,
59
+ mode,
60
+ });
61
+ }
62
+
63
+ console.log(`[walletRegistry] Loaded ${wallets.size} wallet(s) in ${mode} mode`);
64
+ return wallets;
65
+ } catch (error) {
66
+ console.error('[walletRegistry] Failed to parse AMPED_OC_WALLETS_JSON', error);
67
+ return new Map();
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Get a wallet by its ID (synchronous version)
73
+ * Only checks local registry, not skill adapter
74
+ *
75
+ * @param walletId - The wallet identifier
76
+ * @returns The wallet configuration or null if not found
77
+ */
78
+ getWallet(walletId: string): WalletEntry | null {
79
+ const wallet = this.wallets.get(walletId);
80
+ if (wallet) {
81
+ return this.validateWallet(wallet, walletId);
82
+ }
83
+
84
+ console.error(`[walletRegistry] Wallet not found: ${walletId}`);
85
+ return null;
86
+ }
87
+
88
+ /**
89
+ * Resolve a wallet by its ID (async version)
90
+ * Checks local registry first, then tries skill adapter
91
+ *
92
+ * @param walletId - The wallet identifier
93
+ * @returns The wallet configuration or null if not found
94
+ */
95
+ async resolveWallet(walletId: string): Promise<WalletEntry | null> {
96
+ // Try local registry first (synchronous)
97
+ const wallet = this.getWallet(walletId);
98
+ if (wallet) {
99
+ return wallet;
100
+ }
101
+
102
+ // Try skill adapter (includes ~/.evm-wallet.json)
103
+ if (this.skillAdapter.isUsingSkillWallets()) {
104
+ try {
105
+ const config = await this.skillAdapter.getWalletConfig(walletId);
106
+ const mode = this.getMode();
107
+
108
+ return {
109
+ address: config.address,
110
+ privateKey: config.privateKey,
111
+ mode,
112
+ };
113
+ } catch (error) {
114
+ console.error(`[walletRegistry] Skill wallet resolution failed: ${error}`);
115
+ }
116
+ }
117
+
118
+ console.error(`[walletRegistry] Wallet not found: ${walletId}`);
119
+ return null;
120
+ }
121
+
122
+ /**
123
+ * Validate a wallet entry
124
+ */
125
+ private validateWallet(wallet: WalletEntry, walletId: string): WalletEntry | null {
126
+ // In execute mode, validate that private key is present
127
+ if (wallet.mode === 'execute' && !wallet.privateKey) {
128
+ console.error(`[walletRegistry] Wallet ${walletId} missing privateKey in execute mode`);
129
+ return null;
130
+ }
131
+
132
+ // Validate address format (basic check)
133
+ if (!wallet.address || !wallet.address.startsWith('0x')) {
134
+ console.error(`[walletRegistry] Wallet ${walletId} has invalid address: ${wallet.address}`);
135
+ return null;
136
+ }
137
+
138
+ return wallet;
139
+ }
140
+
141
+ /**
142
+ * Get the wallet mode (execute or prepare)
143
+ *
144
+ * @returns The current wallet mode
145
+ */
146
+ getMode(): 'execute' | 'prepare' {
147
+ return (process.env.AMPED_OC_MODE as 'execute' | 'prepare') || 'execute';
148
+ }
149
+
150
+ /**
151
+ * Check if running in execute mode
152
+ *
153
+ * @returns True if in execute mode
154
+ */
155
+ isExecuteMode(): boolean {
156
+ return this.getMode() === 'execute';
157
+ }
158
+
159
+ /**
160
+ * Check if running in prepare mode
161
+ *
162
+ * @returns True if in prepare mode
163
+ */
164
+ isPrepareMode(): boolean {
165
+ return this.getMode() === 'prepare';
166
+ }
167
+
168
+ /**
169
+ * Get all registered wallet IDs (local + skill)
170
+ *
171
+ * @returns Array of wallet IDs
172
+ */
173
+ getWalletIds(): string[] {
174
+ const localIds = Array.from(this.wallets.keys());
175
+ const skillIds = this.skillAdapter.getWalletIds();
176
+ // Merge unique IDs
177
+ return [...new Set([...localIds, ...skillIds])];
178
+ }
179
+
180
+ /**
181
+ * Get the count of registered wallets (local + skill)
182
+ *
183
+ * @returns Number of wallets
184
+ */
185
+ getWalletCount(): number {
186
+ return this.getWalletIds().length;
187
+ }
188
+
189
+ /**
190
+ * Reload wallets from environment (useful for hot-reloading)
191
+ */
192
+ reload(): void {
193
+ this.wallets = this.loadWallets();
194
+ }
195
+ }
196
+
197
+ // Singleton instance
198
+ let walletRegistryInstance: WalletRegistry | null = null;
199
+
200
+ /**
201
+ * Get the singleton wallet registry instance
202
+ * @returns The WalletRegistry singleton
203
+ */
204
+ export function getWalletRegistry(): WalletRegistry {
205
+ if (!walletRegistryInstance) {
206
+ walletRegistryInstance = new WalletRegistry();
207
+ }
208
+ return walletRegistryInstance;
209
+ }
210
+
211
+ /**
212
+ * Reset the wallet registry (useful for testing)
213
+ */
214
+ export function resetWalletRegistry(): void {
215
+ walletRegistryInstance = null;
216
+ }