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,359 @@
1
+ /**
2
+ * Wallet Management Tools
3
+ *
4
+ * Agent-driven wallet configuration:
5
+ * - Add wallets with nicknames
6
+ * - Rename existing wallets
7
+ * - Remove wallets
8
+ * - Set default wallet
9
+ *
10
+ * Changes persist to: ~/.openclaw/extensions/amped-defi/wallets.json
11
+ */
12
+
13
+ import { Type, Static } from '@sinclair/typebox';
14
+ import { getWalletManager } from '../wallet';
15
+ import type { WalletConfig, WalletBackendType } from '../wallet/types';
16
+
17
+ // ============================================================================
18
+ // TypeBox Schemas
19
+ // ============================================================================
20
+
21
+ /**
22
+ * Schema for amped_add_wallet
23
+ */
24
+ const AddWalletSchema = Type.Object({
25
+ nickname: Type.String({
26
+ description: 'Nickname for the wallet (e.g., "trading", "savings", "degen")',
27
+ }),
28
+ source: Type.Union([
29
+ Type.Literal('evm-wallet-skill'),
30
+ Type.Literal('bankr'),
31
+ Type.Literal('env'),
32
+ ], {
33
+ description: 'Wallet source type',
34
+ }),
35
+ // For evm-wallet-skill
36
+ path: Type.Optional(Type.String({
37
+ description: 'Path to wallet JSON file (for evm-wallet-skill). Defaults to ~/.evm-wallet.json',
38
+ })),
39
+ // For bankr
40
+ apiKey: Type.Optional(Type.String({
41
+ description: 'Bankr API key (for bankr source)',
42
+ })),
43
+ apiUrl: Type.Optional(Type.String({
44
+ description: 'Bankr API URL (optional, defaults to https://api.bankr.bot)',
45
+ })),
46
+ // For env
47
+ address: Type.Optional(Type.String({
48
+ description: 'Wallet address (for env source)',
49
+ })),
50
+ privateKey: Type.Optional(Type.String({
51
+ description: 'Private key (for env source). WARNING: Will be stored in config file.',
52
+ })),
53
+ // Chain restrictions
54
+ chains: Type.Optional(Type.Array(Type.String(), {
55
+ description: 'Optional list of chains this wallet can use',
56
+ })),
57
+ });
58
+
59
+ /**
60
+ * Schema for amped_rename_wallet
61
+ */
62
+ const RenameWalletSchema = Type.Object({
63
+ currentNickname: Type.String({
64
+ description: 'Current wallet nickname',
65
+ }),
66
+ newNickname: Type.String({
67
+ description: 'New wallet nickname',
68
+ }),
69
+ });
70
+
71
+ /**
72
+ * Schema for amped_remove_wallet
73
+ */
74
+ const RemoveWalletSchema = Type.Object({
75
+ nickname: Type.String({
76
+ description: 'Wallet nickname to remove',
77
+ }),
78
+ confirm: Type.Optional(Type.Boolean({
79
+ description: 'Set to true to confirm removal',
80
+ default: false,
81
+ })),
82
+ });
83
+
84
+ /**
85
+ * Schema for amped_set_default_wallet
86
+ */
87
+ const SetDefaultWalletSchema = Type.Object({
88
+ nickname: Type.String({
89
+ description: 'Wallet nickname to set as default',
90
+ }),
91
+ });
92
+
93
+ // ============================================================================
94
+ // Type Definitions
95
+ // ============================================================================
96
+
97
+ type AddWalletParams = Static<typeof AddWalletSchema>;
98
+ type RenameWalletParams = Static<typeof RenameWalletSchema>;
99
+ type RemoveWalletParams = Static<typeof RemoveWalletSchema>;
100
+ type SetDefaultWalletParams = Static<typeof SetDefaultWalletSchema>;
101
+
102
+ interface AgentTools {
103
+ register(tool: {
104
+ name: string;
105
+ summary: string;
106
+ description?: string;
107
+ schema: unknown;
108
+ handler: (params: unknown) => Promise<unknown>;
109
+ }): void;
110
+ }
111
+
112
+ // ============================================================================
113
+ // Handlers
114
+ // ============================================================================
115
+
116
+ /**
117
+ * Add a new wallet with a nickname
118
+ */
119
+ async function handleAddWallet(params: AddWalletParams): Promise<unknown> {
120
+ const { nickname, source, path, apiKey, apiUrl, address, privateKey, chains } = params;
121
+
122
+ console.log('[walletManagement:addWallet] Adding wallet', { nickname, source });
123
+
124
+ // Validate required fields based on source
125
+ if (source === 'bankr' && !apiKey) {
126
+ throw new Error('Bankr wallet requires apiKey');
127
+ }
128
+ if (source === 'env' && (!address || !privateKey)) {
129
+ throw new Error('Env wallet requires both address and privateKey');
130
+ }
131
+
132
+ // Build config
133
+ const config: WalletConfig = {
134
+ source: source as WalletBackendType,
135
+ chains,
136
+ };
137
+
138
+ if (source === 'evm-wallet-skill') {
139
+ if (path) config.path = path;
140
+ } else if (source === 'bankr') {
141
+ config.apiKey = apiKey;
142
+ if (apiUrl) config.apiUrl = apiUrl;
143
+ } else if (source === 'env') {
144
+ config.address = address as `0x${string}`;
145
+ config.privateKey = privateKey as `0x${string}`;
146
+ }
147
+
148
+ // Add wallet
149
+ const walletManager = getWalletManager();
150
+ await walletManager.addWallet(nickname, config);
151
+
152
+ // Get the new wallet info
153
+ const wallet = await walletManager.resolve(nickname);
154
+ const walletAddress = await wallet.getAddress();
155
+
156
+ return {
157
+ success: true,
158
+ message: `Wallet "${nickname}" added successfully`,
159
+ wallet: {
160
+ nickname: nickname.toLowerCase(),
161
+ type: source,
162
+ address: walletAddress,
163
+ chains: wallet.supportedChains,
164
+ },
165
+ hint: `You can now use: "swap 100 USDC to ETH using ${nickname}"`,
166
+ };
167
+ }
168
+
169
+ /**
170
+ * Rename a wallet
171
+ */
172
+ async function handleRenameWallet(params: RenameWalletParams): Promise<unknown> {
173
+ const { currentNickname, newNickname } = params;
174
+
175
+ console.log('[walletManagement:renameWallet] Renaming wallet', {
176
+ from: currentNickname,
177
+ to: newNickname
178
+ });
179
+
180
+ const walletManager = getWalletManager();
181
+
182
+ // Get current info before rename
183
+ const wallet = await walletManager.resolve(currentNickname);
184
+ const address = await wallet.getAddress();
185
+
186
+ // Rename
187
+ await walletManager.renameWallet(currentNickname, newNickname);
188
+
189
+ return {
190
+ success: true,
191
+ message: `Wallet renamed from "${currentNickname}" to "${newNickname}"`,
192
+ wallet: {
193
+ nickname: newNickname.toLowerCase(),
194
+ type: wallet.type,
195
+ address,
196
+ },
197
+ hint: `Now use: "swap 100 USDC using ${newNickname}"`,
198
+ };
199
+ }
200
+
201
+ /**
202
+ * Remove a wallet
203
+ */
204
+ async function handleRemoveWallet(params: RemoveWalletParams): Promise<unknown> {
205
+ const { nickname, confirm } = params;
206
+
207
+ console.log('[walletManagement:removeWallet] Removing wallet', { nickname, confirm });
208
+
209
+ const walletManager = getWalletManager();
210
+
211
+ // Get wallet info before removal
212
+ const wallet = await walletManager.resolve(nickname);
213
+ const address = await wallet.getAddress();
214
+
215
+ if (!confirm) {
216
+ return {
217
+ success: false,
218
+ requiresConfirmation: true,
219
+ message: `Are you sure you want to remove wallet "${nickname}" (${address})?`,
220
+ wallet: {
221
+ nickname: nickname.toLowerCase(),
222
+ type: wallet.type,
223
+ address,
224
+ },
225
+ hint: 'Call again with confirm: true to proceed',
226
+ };
227
+ }
228
+
229
+ // Remove
230
+ await walletManager.removeWallet(nickname);
231
+
232
+ // List remaining wallets
233
+ const remainingWallets = await walletManager.listWallets();
234
+
235
+ return {
236
+ success: true,
237
+ message: `Wallet "${nickname}" removed`,
238
+ remainingWallets: remainingWallets.map(w => ({
239
+ nickname: w.nickname,
240
+ type: w.type,
241
+ isDefault: w.isDefault,
242
+ })),
243
+ };
244
+ }
245
+
246
+ /**
247
+ * Set default wallet
248
+ */
249
+ async function handleSetDefaultWallet(params: SetDefaultWalletParams): Promise<unknown> {
250
+ const { nickname } = params;
251
+
252
+ console.log('[walletManagement:setDefaultWallet] Setting default', { nickname });
253
+
254
+ const walletManager = getWalletManager();
255
+
256
+ // Validate wallet exists
257
+ const wallet = await walletManager.resolve(nickname);
258
+ const address = await wallet.getAddress();
259
+
260
+ // Set default
261
+ await walletManager.setDefaultWallet(nickname);
262
+
263
+ return {
264
+ success: true,
265
+ message: `Default wallet set to "${nickname}"`,
266
+ wallet: {
267
+ nickname: nickname.toLowerCase(),
268
+ type: wallet.type,
269
+ address,
270
+ chains: [...wallet.supportedChains],
271
+ },
272
+ hint: 'Operations without a wallet specified will now use this wallet',
273
+ };
274
+ }
275
+
276
+ // ============================================================================
277
+ // Error Wrapper
278
+ // ============================================================================
279
+
280
+ function wrapHandler<T>(handler: (params: T) => Promise<unknown>) {
281
+ return async (params: unknown): Promise<unknown> => {
282
+ try {
283
+ return await handler(params as T);
284
+ } catch (error) {
285
+ const message = error instanceof Error ? error.message : String(error);
286
+ console.error('[walletManagement] Error:', message);
287
+ return {
288
+ success: false,
289
+ error: message,
290
+ };
291
+ }
292
+ };
293
+ }
294
+
295
+ // ============================================================================
296
+ // Tool Registration
297
+ // ============================================================================
298
+
299
+ /**
300
+ * Register wallet management tools
301
+ */
302
+ export function registerWalletManagementTools(agentTools: AgentTools): void {
303
+ // 1. Add wallet
304
+ agentTools.register({
305
+ name: 'amped_add_wallet',
306
+ summary: 'Add a new wallet with a nickname for easy reference',
307
+ description:
308
+ 'Add a wallet from evm-wallet-skill, Bankr, or environment variables. ' +
309
+ 'Give it a memorable nickname like "trading", "savings", or "degen". ' +
310
+ 'The wallet will be saved to config and available across sessions.',
311
+ schema: AddWalletSchema,
312
+ handler: wrapHandler(handleAddWallet),
313
+ });
314
+
315
+ // 2. Rename wallet
316
+ agentTools.register({
317
+ name: 'amped_rename_wallet',
318
+ summary: 'Rename a wallet to a new nickname',
319
+ description:
320
+ 'Change the nickname of an existing wallet. ' +
321
+ 'The wallet address and configuration remain the same, only the nickname changes.',
322
+ schema: RenameWalletSchema,
323
+ handler: wrapHandler(handleRenameWallet),
324
+ });
325
+
326
+ // 3. Remove wallet
327
+ agentTools.register({
328
+ name: 'amped_remove_wallet',
329
+ summary: 'Remove a wallet from configuration',
330
+ description:
331
+ 'Remove a wallet by nickname. This only removes it from the config file, ' +
332
+ 'it does NOT delete the actual wallet or funds. Requires confirmation.',
333
+ schema: RemoveWalletSchema,
334
+ handler: wrapHandler(handleRemoveWallet),
335
+ });
336
+
337
+ // 4. Set default wallet
338
+ agentTools.register({
339
+ name: 'amped_set_default_wallet',
340
+ summary: 'Set which wallet to use by default',
341
+ description:
342
+ 'Set the default wallet for operations. When you don\'t specify a wallet, ' +
343
+ 'this one will be used automatically.',
344
+ schema: SetDefaultWalletSchema,
345
+ handler: wrapHandler(handleSetDefaultWallet),
346
+ });
347
+ }
348
+
349
+ // Export schemas and handlers for testing
350
+ export {
351
+ AddWalletSchema,
352
+ RenameWalletSchema,
353
+ RemoveWalletSchema,
354
+ SetDefaultWalletSchema,
355
+ handleAddWallet,
356
+ handleRenameWallet,
357
+ handleRemoveWallet,
358
+ handleSetDefaultWallet,
359
+ };
package/src/types.ts ADDED
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Common types for Amped DeFi plugin
3
+ */
4
+
5
+ import { Static, TSchema } from '@sinclair/typebox';
6
+
7
+ /**
8
+ * Tool handler function type
9
+ */
10
+ export type ToolHandler<T extends TSchema> = (params: Static<T>) => Promise<unknown>;
11
+
12
+ /**
13
+ * Agent tools registry interface
14
+ */
15
+ export interface AgentTools {
16
+ register: <T extends TSchema>(tool: {
17
+ name: string;
18
+ summary: string;
19
+ description?: string;
20
+ schema: T;
21
+ handler: ToolHandler<T>;
22
+ }) => void;
23
+ }
24
+
25
+ /**
26
+ * Alternative registration interface with input/output schemas
27
+ */
28
+ export interface AgentToolsTyped {
29
+ register<T extends TSchema, R extends TSchema>(config: {
30
+ name: string;
31
+ summary: string;
32
+ description?: string;
33
+ schema: {
34
+ input: T;
35
+ output?: R;
36
+ };
37
+ handler: (input: Static<T>) => Promise<Static<R>>;
38
+ }): void;
39
+ }
40
+
41
+ /**
42
+ * Standard tool result wrapper
43
+ */
44
+ export interface ToolResult<T = unknown> {
45
+ success: boolean;
46
+ data?: T;
47
+ error?: string;
48
+ message?: string;
49
+ }
50
+
51
+ /**
52
+ * Transaction status
53
+ */
54
+ export type TransactionStatus =
55
+ | 'pending'
56
+ | 'submitted'
57
+ | 'confirmed'
58
+ | 'failed'
59
+ | 'cancelled'
60
+ | 'unknown';
61
+
62
+ /**
63
+ * Intent status from SODAX
64
+ */
65
+ export interface IntentStatus {
66
+ intentHash: string;
67
+ status: 'pending' | 'filled' | 'cancelled' | 'expired' | 'failed';
68
+ spokeTxHash?: string;
69
+ hubTxHash?: string;
70
+ filledAmount?: string;
71
+ error?: string;
72
+ createdAt?: number;
73
+ updatedAt?: number;
74
+ }
75
+
76
+ /**
77
+ * Quote result
78
+ */
79
+ export interface QuoteResult {
80
+ quoteId: string;
81
+ srcChainId: string;
82
+ dstChainId: string;
83
+ srcToken: string;
84
+ dstToken: string;
85
+ srcAmount: string;
86
+ dstAmount: string;
87
+ minDstAmount?: string;
88
+ slippageBps: number;
89
+ deadline: number;
90
+ fees: {
91
+ solverFee?: string;
92
+ partnerFee?: string;
93
+ gasFee?: string;
94
+ };
95
+ route?: unknown;
96
+ }
97
+
98
+ /**
99
+ * Bridge result
100
+ */
101
+ export interface BridgeResult {
102
+ spokeTxHash: string;
103
+ hubTxHash?: string;
104
+ status: TransactionStatus;
105
+ }
106
+
107
+ /**
108
+ * Money market position
109
+ */
110
+ export interface MoneyMarketPosition {
111
+ token: string;
112
+ supplied: string;
113
+ borrowed: string;
114
+ supplyApy: number;
115
+ borrowApy: number;
116
+ collateralFactor: number;
117
+ }
118
+
119
+ /**
120
+ * Money market reserve
121
+ */
122
+ export interface MoneyMarketReserve {
123
+ token: string;
124
+ totalSupplied: string;
125
+ totalBorrowed: string;
126
+ supplyApy: number;
127
+ borrowApy: number;
128
+ utilizationRate: number;
129
+ collateralFactor: number;
130
+ liquidationThreshold: number;
131
+ }
132
+
133
+ /**
134
+ * Chain configuration
135
+ */
136
+ export interface ChainConfig {
137
+ chainId: string;
138
+ name: string;
139
+ isHub: boolean;
140
+ nativeCurrency: {
141
+ symbol: string;
142
+ decimals: number;
143
+ };
144
+ rpcUrl?: string;
145
+ }
146
+
147
+ /**
148
+ * Token configuration
149
+ */
150
+ export interface TokenConfig {
151
+ address: string;
152
+ symbol: string;
153
+ name: string;
154
+ decimals: number;
155
+ chainId: string;
156
+ }
157
+
158
+ /**
159
+ * Wallet information (safe to log)
160
+ */
161
+ export interface WalletInfo {
162
+ walletId: string;
163
+ address: string;
164
+ mode: 'execute' | 'prepare';
165
+ chains: string[];
166
+ }
167
+
168
+ /**
169
+ * Operation context for logging
170
+ */
171
+ export interface OperationContext {
172
+ requestId: string;
173
+ agentId?: string;
174
+ walletId: string;
175
+ operation: string;
176
+ chainIds: string[];
177
+ tokenAddresses?: string[];
178
+ timestamp: number;
179
+ }
180
+
181
+ /**
182
+ * Bridge operation parameters
183
+ */
184
+ export interface BridgeOperation {
185
+ walletId: string;
186
+ srcChainId: string;
187
+ dstChainId: string;
188
+ srcToken: string;
189
+ dstToken: string;
190
+ amount: string;
191
+ recipient?: string;
192
+ timeoutMs?: number;
193
+ policyId?: string;
194
+ }
195
+
196
+ /**
197
+ * Wallet configuration
198
+ */
199
+ export interface WalletConfig {
200
+ address: string;
201
+ privateKey?: string;
202
+ }
203
+
204
+ /**
205
+ * Policy configuration
206
+ */
207
+ export interface PolicyConfig {
208
+ /** Maximum USD value for swap inputs */
209
+ maxSwapInputUsd?: number;
210
+ /** Maximum per-token amount for swap inputs */
211
+ maxSwapInputToken?: Record<string, number>;
212
+ /** Maximum per-token amount for bridge operations */
213
+ maxBridgeAmountToken?: Record<string, number>;
214
+ /** Maximum USD value for borrows */
215
+ maxBorrowUsd?: number;
216
+ /** Maximum per-token amount for borrows */
217
+ maxBorrowToken?: Record<string, number>;
218
+ /** Allowed chain IDs for operations */
219
+ allowedChains?: string[];
220
+ /** Allowed tokens per chain */
221
+ allowedTokensByChain?: Record<string, string[]>;
222
+ /** Blocked recipient addresses */
223
+ blockedRecipients?: string[];
224
+ /** Maximum slippage in basis points (100 = 1%) */
225
+ maxSlippageBps?: number;
226
+ /** Whether to require transaction simulation */
227
+ requireSimulation?: boolean;
228
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Serialize SDK error objects for readable error messages
3
+ */
4
+ function bigintReplacer(key: string, value: any): any {
5
+ return typeof value === 'bigint' ? value.toString() : value;
6
+ }
7
+
8
+ export function serializeError(error: unknown): string {
9
+ if (error instanceof Error) return error.message;
10
+ if (typeof error === 'string') return error;
11
+ try {
12
+ return JSON.stringify(error, bigintReplacer, 2);
13
+ } catch {
14
+ return String(error);
15
+ }
16
+ }