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,243 @@
1
+ /**
2
+ * Bankr Wallet Provider for SODAX SDK
3
+ *
4
+ * Implements IEvmWalletProvider interface to allow SODAX SDK
5
+ * to execute transactions through Bankr's API.
6
+ *
7
+ * Instead of signing locally, transactions are submitted to Bankr
8
+ * which signs and broadcasts them server-side.
9
+ *
10
+ * Supported chains: Ethereum (1), Polygon (137), Base (8453)
11
+ */
12
+ import { createPublicClient, http } from 'viem';
13
+ import { mainnet, polygon, base } from 'viem/chains';
14
+ /**
15
+ * Chain configurations for Bankr
16
+ */
17
+ const BANKR_CHAINS = {
18
+ 1: { chain: mainnet, name: 'ethereum' },
19
+ 137: { chain: polygon, name: 'polygon' },
20
+ 8453: { chain: base, name: 'base' },
21
+ };
22
+ /**
23
+ * Bankr Wallet Provider
24
+ *
25
+ * Implements IEvmWalletProvider for use with SODAX SDK's SpokeProvider.
26
+ * Transactions are signed and broadcast via Bankr's Agent API.
27
+ */
28
+ export class BankrWalletProvider {
29
+ publicClient;
30
+ apiUrl;
31
+ apiKey;
32
+ chainId;
33
+ cachedAddress;
34
+ // Polling configuration
35
+ pollIntervalMs = 2000;
36
+ maxPollAttempts = 150; // 5 minutes max
37
+ constructor(config) {
38
+ this.apiKey = config.apiKey;
39
+ this.apiUrl = config.apiUrl || 'https://api.bankr.bot';
40
+ this.chainId = config.chainId;
41
+ this.cachedAddress = config.cachedAddress || null;
42
+ // Validate chain support
43
+ const chainConfig = BANKR_CHAINS[config.chainId];
44
+ if (!chainConfig) {
45
+ throw new Error(`Bankr does not support chainId ${config.chainId}. ` +
46
+ `Supported: Ethereum (1), Polygon (137), Base (8453)`);
47
+ }
48
+ // Create public client for read operations
49
+ this.publicClient = createPublicClient({
50
+ chain: chainConfig.chain,
51
+ transport: http(config.rpcUrl),
52
+ });
53
+ console.log(`[BankrWalletProvider] Initialized for ${chainConfig.name} (${config.chainId})`);
54
+ }
55
+ /**
56
+ * Get the Bankr wallet address
57
+ */
58
+ async getWalletAddress() {
59
+ if (this.cachedAddress)
60
+ return this.cachedAddress;
61
+ console.log('[BankrWalletProvider] Fetching wallet address from Bankr...');
62
+ try {
63
+ const response = await this.submitAndWait('What is my EVM wallet address?');
64
+ // Extract address from response
65
+ const addressMatch = response.match(/0x[a-fA-F0-9]{40}/);
66
+ if (!addressMatch) {
67
+ throw new Error('Could not parse wallet address from Bankr response');
68
+ }
69
+ this.cachedAddress = addressMatch[0];
70
+ console.log(`[BankrWalletProvider] Wallet address: ${this.cachedAddress}`);
71
+ return this.cachedAddress;
72
+ }
73
+ catch (error) {
74
+ console.error('[BankrWalletProvider] Failed to get address:', error);
75
+ throw error;
76
+ }
77
+ }
78
+ /**
79
+ * Send a transaction via Bankr
80
+ *
81
+ * This is the key method - it receives raw transaction data from SODAX SDK
82
+ * and submits it to Bankr for signing and broadcasting.
83
+ */
84
+ async sendTransaction(evmRawTx) {
85
+ console.log('[BankrWalletProvider] Sending transaction via Bankr');
86
+ console.log(`[BankrWalletProvider] To: ${evmRawTx.to}`);
87
+ console.log(`[BankrWalletProvider] Value: ${evmRawTx.value}`);
88
+ console.log(`[BankrWalletProvider] Data: ${evmRawTx.data.slice(0, 20)}...`);
89
+ // Format transaction for Bankr's arbitrary transaction endpoint
90
+ const txJson = JSON.stringify({
91
+ to: evmRawTx.to,
92
+ data: evmRawTx.data,
93
+ value: evmRawTx.value.toString(),
94
+ chainId: this.chainId,
95
+ }, null, 2);
96
+ // Use the documented prompt format
97
+ const prompt = `Submit this transaction:
98
+ ${txJson}`;
99
+ console.log('[BankrWalletProvider] Submitting to Bankr API...');
100
+ const result = await this.submitAndWaitForJob(prompt);
101
+ // Extract transaction hash from response
102
+ const txHash = this.extractTransactionHash(result);
103
+ if (!txHash) {
104
+ const errorMsg = result.error || result.response || 'Unknown error';
105
+ throw new Error(`Transaction failed: ${errorMsg}`);
106
+ }
107
+ console.log(`[BankrWalletProvider] Transaction hash: ${txHash}`);
108
+ return txHash;
109
+ }
110
+ /**
111
+ * Wait for transaction receipt
112
+ *
113
+ * Uses the public client to query the blockchain directly.
114
+ */
115
+ async waitForTransactionReceipt(txHash) {
116
+ console.log(`[BankrWalletProvider] Waiting for receipt: ${txHash}`);
117
+ const receipt = await this.publicClient.waitForTransactionReceipt({
118
+ hash: txHash,
119
+ timeout: 120_000, // 2 minutes
120
+ });
121
+ // Convert viem receipt to SODAX format
122
+ return {
123
+ transactionHash: receipt.transactionHash,
124
+ transactionIndex: `0x${receipt.transactionIndex.toString(16)}`,
125
+ blockHash: receipt.blockHash,
126
+ blockNumber: `0x${receipt.blockNumber.toString(16)}`,
127
+ from: receipt.from,
128
+ to: receipt.to,
129
+ cumulativeGasUsed: `0x${receipt.cumulativeGasUsed.toString(16)}`,
130
+ gasUsed: `0x${receipt.gasUsed.toString(16)}`,
131
+ contractAddress: receipt.contractAddress,
132
+ logs: receipt.logs.map(log => ({
133
+ address: log.address,
134
+ topics: log.topics || [],
135
+ data: log.data,
136
+ blockHash: log.blockHash,
137
+ blockNumber: log.blockNumber ? `0x${log.blockNumber.toString(16)}` : null,
138
+ logIndex: log.logIndex !== null ? `0x${log.logIndex.toString(16)}` : null,
139
+ transactionHash: log.transactionHash,
140
+ transactionIndex: log.transactionIndex !== null ? `0x${log.transactionIndex.toString(16)}` : null,
141
+ removed: log.removed,
142
+ })),
143
+ logsBloom: receipt.logsBloom,
144
+ status: receipt.status === 'success' ? '0x1' : '0x0',
145
+ type: receipt.type,
146
+ effectiveGasPrice: receipt.effectiveGasPrice ? `0x${receipt.effectiveGasPrice.toString(16)}` : undefined,
147
+ };
148
+ }
149
+ /**
150
+ * Submit prompt and wait for text response
151
+ */
152
+ async submitAndWait(prompt) {
153
+ const result = await this.submitAndWaitForJob(prompt);
154
+ return result.response || '';
155
+ }
156
+ /**
157
+ * Submit prompt and wait for job completion
158
+ */
159
+ async submitAndWaitForJob(prompt) {
160
+ // Submit job
161
+ const submitResponse = await fetch(`${this.apiUrl}/agent/prompt`, {
162
+ method: 'POST',
163
+ headers: {
164
+ 'X-API-Key': this.apiKey,
165
+ 'Content-Type': 'application/json',
166
+ },
167
+ body: JSON.stringify({ prompt }),
168
+ });
169
+ if (!submitResponse.ok) {
170
+ const error = await submitResponse.text();
171
+ throw new Error(`Failed to submit job: ${submitResponse.status} ${error}`);
172
+ }
173
+ const submitData = await submitResponse.json();
174
+ if (!submitData.success || !submitData.jobId) {
175
+ throw new Error(`Invalid job response: ${JSON.stringify(submitData)}`);
176
+ }
177
+ const jobId = submitData.jobId;
178
+ console.log(`[BankrWalletProvider] Job submitted: ${jobId}`);
179
+ // Poll for completion
180
+ let lastStatus = '';
181
+ for (let attempt = 0; attempt < this.maxPollAttempts; attempt++) {
182
+ await this.sleep(this.pollIntervalMs);
183
+ const statusResponse = await fetch(`${this.apiUrl}/agent/job/${jobId}`, {
184
+ method: 'GET',
185
+ headers: { 'X-API-Key': this.apiKey },
186
+ });
187
+ if (!statusResponse.ok) {
188
+ const error = await statusResponse.text();
189
+ throw new Error(`Failed to get job status: ${statusResponse.status} ${error}`);
190
+ }
191
+ const result = await statusResponse.json();
192
+ // Log status changes
193
+ if (result.status !== lastStatus) {
194
+ console.log(`[BankrWalletProvider] Job ${jobId}: ${result.status}`);
195
+ lastStatus = result.status;
196
+ }
197
+ // Check terminal states
198
+ switch (result.status) {
199
+ case 'completed':
200
+ return result;
201
+ case 'failed':
202
+ throw new Error(`Job failed: ${result.error || 'Unknown error'}`);
203
+ case 'cancelled':
204
+ throw new Error(`Job was cancelled`);
205
+ }
206
+ }
207
+ throw new Error(`Job ${jobId} timed out`);
208
+ }
209
+ /**
210
+ * Extract transaction hash from Bankr response
211
+ */
212
+ extractTransactionHash(result) {
213
+ // Check richData for transaction info
214
+ if (result.richData) {
215
+ for (const item of result.richData) {
216
+ if (item.transactionHash)
217
+ return item.transactionHash;
218
+ if (item.txHash)
219
+ return item.txHash;
220
+ if (item.hash)
221
+ return item.hash;
222
+ }
223
+ }
224
+ // Try to extract from response text
225
+ if (result.response) {
226
+ // Look for 0x + 64 hex chars
227
+ const hashMatch = result.response.match(/0x[a-fA-F0-9]{64}/);
228
+ if (hashMatch)
229
+ return hashMatch[0];
230
+ }
231
+ return null;
232
+ }
233
+ sleep(ms) {
234
+ return new Promise(resolve => setTimeout(resolve, ms));
235
+ }
236
+ }
237
+ /**
238
+ * Create a BankrWalletProvider
239
+ */
240
+ export function createBankrWalletProvider(config) {
241
+ return new BankrWalletProvider(config);
242
+ }
243
+ //# sourceMappingURL=BankrWalletProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BankrWalletProvider.js","sourceRoot":"","sources":["../../../src/wallet/backends/BankrWalletProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Environment Variable Backend
3
+ *
4
+ * Loads wallet from environment variables:
5
+ * - AMPED_OC_WALLETS_JSON: JSON with wallet configs
6
+ * - Or individual env vars for address/privateKey
7
+ */
8
+ import type { Address } from 'viem';
9
+ import type { IWalletBackend } from '../types';
10
+ /**
11
+ * Environment variable backend configuration
12
+ */
13
+ export interface EnvBackendConfig {
14
+ nickname: string;
15
+ address?: Address;
16
+ privateKey?: `0x${string}`;
17
+ envVar?: string;
18
+ chains?: string[];
19
+ }
20
+ /**
21
+ * Environment variable wallet backend
22
+ * Supports all SODAX chains (local key signing)
23
+ */
24
+ export declare class EnvBackend implements IWalletBackend {
25
+ readonly type: "env";
26
+ readonly nickname: string;
27
+ readonly supportedChains: readonly string[];
28
+ private address;
29
+ private privateKey;
30
+ private envVar;
31
+ constructor(config: EnvBackendConfig);
32
+ /**
33
+ * Load wallet from environment variable if needed
34
+ */
35
+ private loadFromEnv;
36
+ getAddress(): Promise<Address>;
37
+ supportsChain(chainId: string): boolean;
38
+ getPrivateKey(): Promise<`0x${string}`>;
39
+ isReady(): Promise<boolean>;
40
+ }
41
+ /**
42
+ * Create env backend from direct config
43
+ */
44
+ export declare function createEnvBackend(config: EnvBackendConfig): EnvBackend;
45
+ /**
46
+ * Load wallets from AMPED_OC_WALLETS_JSON environment variable
47
+ * Returns multiple backends keyed by wallet name
48
+ */
49
+ export declare function loadWalletsFromEnv(): Map<string, EnvBackend>;
50
+ //# sourceMappingURL=EnvBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvBackend.d.ts","sourceRoot":"","sources":["../../../src/wallet/backends/EnvBackend.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAW/C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAE5C,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,EAAE,gBAAgB;IAcpC;;OAEG;IACH,OAAO,CAAC,WAAW;IA0Bb,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAKpC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjC,aAAa,IAAI,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;IAKvC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAQlC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAErE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CA0B5D"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Environment Variable Backend
3
+ *
4
+ * Loads wallet from environment variables:
5
+ * - AMPED_OC_WALLETS_JSON: JSON with wallet configs
6
+ * - Or individual env vars for address/privateKey
7
+ */
8
+ import { SODAX_SUPPORTED_CHAINS } from '../types';
9
+ /**
10
+ * Environment variable wallet backend
11
+ * Supports all SODAX chains (local key signing)
12
+ */
13
+ export class EnvBackend {
14
+ type = 'env';
15
+ nickname;
16
+ supportedChains;
17
+ address = null;
18
+ privateKey = null;
19
+ envVar = null;
20
+ constructor(config) {
21
+ this.nickname = config.nickname;
22
+ this.supportedChains = config.chains || [...SODAX_SUPPORTED_CHAINS];
23
+ if (config.address && config.privateKey) {
24
+ // Direct address/key provided
25
+ this.address = config.address;
26
+ this.privateKey = config.privateKey;
27
+ }
28
+ else if (config.envVar) {
29
+ // Will load from env var
30
+ this.envVar = config.envVar;
31
+ }
32
+ }
33
+ /**
34
+ * Load wallet from environment variable if needed
35
+ */
36
+ loadFromEnv() {
37
+ if (this.address && this.privateKey) {
38
+ return { address: this.address, privateKey: this.privateKey };
39
+ }
40
+ if (this.envVar) {
41
+ const envValue = process.env[this.envVar];
42
+ if (!envValue) {
43
+ throw new Error(`Environment variable ${this.envVar} not set`);
44
+ }
45
+ try {
46
+ const data = JSON.parse(envValue);
47
+ this.address = data.address;
48
+ this.privateKey = (data.privateKey.startsWith('0x')
49
+ ? data.privateKey
50
+ : `0x${data.privateKey}`);
51
+ return { address: this.address, privateKey: this.privateKey };
52
+ }
53
+ catch (error) {
54
+ throw new Error(`Failed to parse ${this.envVar}: ${error}`);
55
+ }
56
+ }
57
+ throw new Error(`No wallet configuration for "${this.nickname}"`);
58
+ }
59
+ async getAddress() {
60
+ const { address } = this.loadFromEnv();
61
+ return address;
62
+ }
63
+ supportsChain(chainId) {
64
+ return this.supportedChains.includes(chainId);
65
+ }
66
+ async getPrivateKey() {
67
+ const { privateKey } = this.loadFromEnv();
68
+ return privateKey;
69
+ }
70
+ async isReady() {
71
+ try {
72
+ this.loadFromEnv();
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ }
80
+ /**
81
+ * Create env backend from direct config
82
+ */
83
+ export function createEnvBackend(config) {
84
+ return new EnvBackend(config);
85
+ }
86
+ /**
87
+ * Load wallets from AMPED_OC_WALLETS_JSON environment variable
88
+ * Returns multiple backends keyed by wallet name
89
+ */
90
+ export function loadWalletsFromEnv() {
91
+ const wallets = new Map();
92
+ const walletsJson = process.env.AMPED_OC_WALLETS_JSON;
93
+ if (!walletsJson)
94
+ return wallets;
95
+ try {
96
+ const parsed = JSON.parse(walletsJson);
97
+ for (const [name, wallet] of Object.entries(parsed)) {
98
+ const backend = new EnvBackend({
99
+ nickname: name,
100
+ address: wallet.address,
101
+ privateKey: (wallet.privateKey.startsWith('0x')
102
+ ? wallet.privateKey
103
+ : `0x${wallet.privateKey}`),
104
+ });
105
+ wallets.set(name.toLowerCase(), backend);
106
+ }
107
+ console.log(`[EnvBackend] Loaded ${wallets.size} wallet(s) from AMPED_OC_WALLETS_JSON`);
108
+ }
109
+ catch (error) {
110
+ console.warn(`[EnvBackend] Failed to parse AMPED_OC_WALLETS_JSON: ${error}`);
111
+ }
112
+ return wallets;
113
+ }
114
+ //# sourceMappingURL=EnvBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvBackend.js","sourceRoot":"","sources":["../../../src/wallet/backends/EnvBackend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * EVM Wallet Skill Backend
3
+ *
4
+ * Loads wallet from ~/.evm-wallet.json (created by evm-wallet-skill)
5
+ */
6
+ import type { Address } from 'viem';
7
+ import type { IWalletBackend } from '../types';
8
+ /**
9
+ * Backend for evm-wallet-skill wallets
10
+ * Supports all SODAX chains (local key signing)
11
+ */
12
+ export declare class EvmWalletSkillBackend implements IWalletBackend {
13
+ readonly type: "evm-wallet-skill";
14
+ readonly nickname: string;
15
+ readonly supportedChains: readonly string[];
16
+ private walletPath;
17
+ private cachedWallet;
18
+ constructor(options: {
19
+ nickname: string;
20
+ path?: string;
21
+ chains?: string[];
22
+ });
23
+ /**
24
+ * Load wallet from file (cached)
25
+ */
26
+ private loadWallet;
27
+ getAddress(): Promise<Address>;
28
+ supportsChain(chainId: string): boolean;
29
+ getPrivateKey(): Promise<`0x${string}`>;
30
+ isReady(): Promise<boolean>;
31
+ }
32
+ /**
33
+ * Create an evm-wallet-skill backend
34
+ */
35
+ export declare function createEvmWalletSkillBackend(options?: {
36
+ nickname?: string;
37
+ path?: string;
38
+ chains?: string[];
39
+ }): EvmWalletSkillBackend;
40
+ //# sourceMappingURL=EvmWalletSkillBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmWalletSkillBackend.d.ts","sourceRoot":"","sources":["../../../src/wallet/backends/EvmWalletSkillBackend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAgB/C;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAU;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAE5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAA8B;gBAEtC,OAAO,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB;IAMD;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBZ,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAKpC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjC,aAAa,IAAI,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;IAMvC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAQlC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,GAAE;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACd,GAAG,qBAAqB,CAM7B"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * EVM Wallet Skill Backend
3
+ *
4
+ * Loads wallet from ~/.evm-wallet.json (created by evm-wallet-skill)
5
+ */
6
+ import { existsSync, readFileSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { homedir } from 'os';
9
+ import { SODAX_SUPPORTED_CHAINS } from '../types';
10
+ /**
11
+ * Default path to evm-wallet-skill wallet file
12
+ */
13
+ const DEFAULT_WALLET_PATH = join(homedir(), '.evm-wallet.json');
14
+ /**
15
+ * Backend for evm-wallet-skill wallets
16
+ * Supports all SODAX chains (local key signing)
17
+ */
18
+ export class EvmWalletSkillBackend {
19
+ type = 'evm-wallet-skill';
20
+ nickname;
21
+ supportedChains;
22
+ walletPath;
23
+ cachedWallet = null;
24
+ constructor(options) {
25
+ this.nickname = options.nickname;
26
+ this.walletPath = options.path || DEFAULT_WALLET_PATH;
27
+ this.supportedChains = options.chains || [...SODAX_SUPPORTED_CHAINS];
28
+ }
29
+ /**
30
+ * Load wallet from file (cached)
31
+ */
32
+ loadWallet() {
33
+ if (this.cachedWallet)
34
+ return this.cachedWallet;
35
+ if (!existsSync(this.walletPath)) {
36
+ throw new Error(`Wallet file not found: ${this.walletPath}\n` +
37
+ `Run: git clone https://github.com/amped-finance/evm-wallet-skill.git ~/.openclaw/skills/evm-wallet-skill\n` +
38
+ ` cd ~/.openclaw/skills/evm-wallet-skill && npm install && node src/setup.js`);
39
+ }
40
+ try {
41
+ const content = readFileSync(this.walletPath, 'utf-8');
42
+ this.cachedWallet = JSON.parse(content);
43
+ return this.cachedWallet;
44
+ }
45
+ catch (error) {
46
+ throw new Error(`Failed to load wallet from ${this.walletPath}: ${error}`);
47
+ }
48
+ }
49
+ async getAddress() {
50
+ const wallet = this.loadWallet();
51
+ return wallet.address;
52
+ }
53
+ supportsChain(chainId) {
54
+ return this.supportedChains.includes(chainId);
55
+ }
56
+ async getPrivateKey() {
57
+ const wallet = this.loadWallet();
58
+ const key = wallet.privateKey;
59
+ return key.startsWith('0x') ? key : `0x${key}`;
60
+ }
61
+ async isReady() {
62
+ try {
63
+ this.loadWallet();
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ }
71
+ /**
72
+ * Create an evm-wallet-skill backend
73
+ */
74
+ export function createEvmWalletSkillBackend(options = {}) {
75
+ return new EvmWalletSkillBackend({
76
+ nickname: options.nickname || 'main',
77
+ path: options.path,
78
+ chains: options.chains,
79
+ });
80
+ }
81
+ //# sourceMappingURL=EvmWalletSkillBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmWalletSkillBackend.js","sourceRoot":"","sources":["../../../src/wallet/backends/EvmWalletSkillBackend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAG7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAElD;;GAEG;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAUhE;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,kBAA2B,CAAC;IACnC,QAAQ,CAAS;IACjB,eAAe,CAAoB;IAEpC,UAAU,CAAS;IACnB,YAAY,GAAyB,IAAI,CAAC;IAElD,YAAY,OAIX;QACC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,mBAAmB,CAAC;QACtD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,sBAAsB,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAEhD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,CAAC,UAAU,IAAI;gBAC7C,4GAA4G;gBAC5G,iFAAiF,CAClF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB,CAAC;YACzD,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,OAAkB,CAAC;IACnC,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;QAC9B,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAoB,CAAC,CAAC,CAAC,KAAK,GAAG,EAAmB,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,UAIxC,EAAE;IACJ,OAAO,IAAI,qBAAqB,CAAC;QAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Wallet Backends
3
+ *
4
+ * Export all wallet backend implementations
5
+ */
6
+ export { EvmWalletSkillBackend, createEvmWalletSkillBackend } from './EvmWalletSkillBackend';
7
+ export { BankrBackend, createBankrBackend, type BankrBackendConfig } from './BankrBackend';
8
+ export { EnvBackend, createEnvBackend, loadWalletsFromEnv, type EnvBackendConfig } from './EnvBackend';
9
+ export { BankrWalletProvider, createBankrWalletProvider, type BankrWalletProviderConfig } from './BankrWalletProvider';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wallet/backends/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Wallet Backends
3
+ *
4
+ * Export all wallet backend implementations
5
+ */
6
+ export { EvmWalletSkillBackend, createEvmWalletSkillBackend } from './EvmWalletSkillBackend';
7
+ export { BankrBackend, createBankrBackend } from './BankrBackend';
8
+ export { EnvBackend, createEnvBackend, loadWalletsFromEnv } from './EnvBackend';
9
+ export { BankrWalletProvider, createBankrWalletProvider } from './BankrWalletProvider';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wallet/backends/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAA2B,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAyB,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAkC,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Wallet Module
3
+ *
4
+ * Multi-source wallet management with nicknames
5
+ */
6
+ export * from './types';
7
+ export * from './backends';
8
+ export { WalletManager, getWalletManager, resetWalletManager } from './walletManager';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Wallet Module
3
+ *
4
+ * Multi-source wallet management with nicknames
5
+ */
6
+ // Types
7
+ export * from './types';
8
+ // Backends
9
+ export * from './backends';
10
+ // Manager
11
+ export { WalletManager, getWalletManager, resetWalletManager } from './walletManager';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,cAAc,SAAS,CAAC;AAExB,WAAW;AACX,cAAc,YAAY,CAAC;AAE3B,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}