@catalyst-team/poly-sdk 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +354 -78
  3. package/docs/00-design.md +1 -1
  4. package/docs/02-API.md +21 -21
  5. package/docs/arbitrage.md +754 -0
  6. package/docs/reports/smart-money-analysis-2025-12-23-cn.md +840 -0
  7. package/examples/13-arbitrage-service.ts +211 -0
  8. package/examples/README.md +1 -1
  9. package/package.json +19 -19
  10. package/scripts/arb/faze-bo3-arb.ts +385 -0
  11. package/scripts/arb/settle-position.ts +190 -0
  12. package/scripts/arb/token-rebalancer.ts +420 -0
  13. package/scripts/verify/verify-all-apis.ts +1 -1
  14. package/src/clients/clob-api.ts +1 -1
  15. package/src/clients/gamma-api.ts +1 -1
  16. package/src/core/cache-adapter-bridge.ts +1 -1
  17. package/src/core/types.ts +3 -3
  18. package/src/core/unified-cache.ts +1 -1
  19. package/src/index.ts +25 -19
  20. package/src/services/arbitrage-service.ts +1807 -0
  21. package/.env +0 -0
  22. package/dist/__tests__/clob-api.test.d.ts +0 -5
  23. package/dist/__tests__/clob-api.test.d.ts.map +0 -1
  24. package/dist/__tests__/clob-api.test.js +0 -240
  25. package/dist/__tests__/clob-api.test.js.map +0 -1
  26. package/dist/__tests__/integration/bridge-client.integration.test.d.ts +0 -11
  27. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +0 -1
  28. package/dist/__tests__/integration/bridge-client.integration.test.js +0 -260
  29. package/dist/__tests__/integration/bridge-client.integration.test.js.map +0 -1
  30. package/dist/__tests__/integration/clob-api.integration.test.d.ts +0 -13
  31. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +0 -1
  32. package/dist/__tests__/integration/clob-api.integration.test.js +0 -170
  33. package/dist/__tests__/integration/clob-api.integration.test.js.map +0 -1
  34. package/dist/__tests__/integration/ctf-client.integration.test.d.ts +0 -17
  35. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +0 -1
  36. package/dist/__tests__/integration/ctf-client.integration.test.js +0 -234
  37. package/dist/__tests__/integration/ctf-client.integration.test.js.map +0 -1
  38. package/dist/__tests__/integration/data-api.integration.test.d.ts +0 -9
  39. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +0 -1
  40. package/dist/__tests__/integration/data-api.integration.test.js +0 -161
  41. package/dist/__tests__/integration/data-api.integration.test.js.map +0 -1
  42. package/dist/__tests__/integration/gamma-api.integration.test.d.ts +0 -9
  43. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +0 -1
  44. package/dist/__tests__/integration/gamma-api.integration.test.js +0 -170
  45. package/dist/__tests__/integration/gamma-api.integration.test.js.map +0 -1
  46. package/dist/__tests__/test-utils.d.ts +0 -92
  47. package/dist/__tests__/test-utils.d.ts.map +0 -1
  48. package/dist/__tests__/test-utils.js +0 -143
  49. package/dist/__tests__/test-utils.js.map +0 -1
  50. package/dist/clients/bridge-client.d.ts +0 -388
  51. package/dist/clients/bridge-client.d.ts.map +0 -1
  52. package/dist/clients/bridge-client.js +0 -587
  53. package/dist/clients/bridge-client.js.map +0 -1
  54. package/dist/clients/clob-api.d.ts +0 -318
  55. package/dist/clients/clob-api.d.ts.map +0 -1
  56. package/dist/clients/clob-api.js +0 -388
  57. package/dist/clients/clob-api.js.map +0 -1
  58. package/dist/clients/ctf-client.d.ts +0 -473
  59. package/dist/clients/ctf-client.d.ts.map +0 -1
  60. package/dist/clients/ctf-client.js +0 -915
  61. package/dist/clients/ctf-client.js.map +0 -1
  62. package/dist/clients/data-api.d.ts +0 -134
  63. package/dist/clients/data-api.d.ts.map +0 -1
  64. package/dist/clients/data-api.js +0 -265
  65. package/dist/clients/data-api.js.map +0 -1
  66. package/dist/clients/gamma-api.d.ts +0 -401
  67. package/dist/clients/gamma-api.d.ts.map +0 -1
  68. package/dist/clients/gamma-api.js +0 -352
  69. package/dist/clients/gamma-api.js.map +0 -1
  70. package/dist/clients/trading-client.d.ts +0 -252
  71. package/dist/clients/trading-client.d.ts.map +0 -1
  72. package/dist/clients/trading-client.js +0 -543
  73. package/dist/clients/trading-client.js.map +0 -1
  74. package/dist/clients/websocket-manager.d.ts +0 -100
  75. package/dist/clients/websocket-manager.d.ts.map +0 -1
  76. package/dist/clients/websocket-manager.js +0 -193
  77. package/dist/clients/websocket-manager.js.map +0 -1
  78. package/dist/core/cache-adapter-bridge.d.ts +0 -36
  79. package/dist/core/cache-adapter-bridge.d.ts.map +0 -1
  80. package/dist/core/cache-adapter-bridge.js +0 -81
  81. package/dist/core/cache-adapter-bridge.js.map +0 -1
  82. package/dist/core/cache.d.ts +0 -40
  83. package/dist/core/cache.d.ts.map +0 -1
  84. package/dist/core/cache.js +0 -71
  85. package/dist/core/cache.js.map +0 -1
  86. package/dist/core/errors.d.ts +0 -38
  87. package/dist/core/errors.d.ts.map +0 -1
  88. package/dist/core/errors.js +0 -84
  89. package/dist/core/errors.js.map +0 -1
  90. package/dist/core/rate-limiter.d.ts +0 -31
  91. package/dist/core/rate-limiter.d.ts.map +0 -1
  92. package/dist/core/rate-limiter.js +0 -70
  93. package/dist/core/rate-limiter.js.map +0 -1
  94. package/dist/core/types.d.ts +0 -314
  95. package/dist/core/types.d.ts.map +0 -1
  96. package/dist/core/types.js +0 -19
  97. package/dist/core/types.js.map +0 -1
  98. package/dist/core/unified-cache.d.ts +0 -63
  99. package/dist/core/unified-cache.d.ts.map +0 -1
  100. package/dist/core/unified-cache.js +0 -114
  101. package/dist/core/unified-cache.js.map +0 -1
  102. package/dist/index.d.ts +0 -94
  103. package/dist/index.d.ts.map +0 -1
  104. package/dist/index.js +0 -258
  105. package/dist/index.js.map +0 -1
  106. package/dist/mcp/errors.d.ts +0 -33
  107. package/dist/mcp/errors.d.ts.map +0 -1
  108. package/dist/mcp/errors.js +0 -86
  109. package/dist/mcp/errors.js.map +0 -1
  110. package/dist/mcp/index.d.ts +0 -62
  111. package/dist/mcp/index.d.ts.map +0 -1
  112. package/dist/mcp/index.js +0 -173
  113. package/dist/mcp/index.js.map +0 -1
  114. package/dist/mcp/server.d.ts +0 -17
  115. package/dist/mcp/server.d.ts.map +0 -1
  116. package/dist/mcp/server.js +0 -155
  117. package/dist/mcp/server.js.map +0 -1
  118. package/dist/mcp/tools/guide.d.ts +0 -12
  119. package/dist/mcp/tools/guide.d.ts.map +0 -1
  120. package/dist/mcp/tools/guide.js +0 -801
  121. package/dist/mcp/tools/guide.js.map +0 -1
  122. package/dist/mcp/tools/index.d.ts +0 -11
  123. package/dist/mcp/tools/index.d.ts.map +0 -1
  124. package/dist/mcp/tools/index.js +0 -27
  125. package/dist/mcp/tools/index.js.map +0 -1
  126. package/dist/mcp/tools/market.d.ts +0 -11
  127. package/dist/mcp/tools/market.d.ts.map +0 -1
  128. package/dist/mcp/tools/market.js +0 -314
  129. package/dist/mcp/tools/market.js.map +0 -1
  130. package/dist/mcp/tools/order.d.ts +0 -10
  131. package/dist/mcp/tools/order.d.ts.map +0 -1
  132. package/dist/mcp/tools/order.js +0 -258
  133. package/dist/mcp/tools/order.js.map +0 -1
  134. package/dist/mcp/tools/trade.d.ts +0 -38
  135. package/dist/mcp/tools/trade.d.ts.map +0 -1
  136. package/dist/mcp/tools/trade.js +0 -314
  137. package/dist/mcp/tools/trade.js.map +0 -1
  138. package/dist/mcp/tools/trader.d.ts +0 -11
  139. package/dist/mcp/tools/trader.d.ts.map +0 -1
  140. package/dist/mcp/tools/trader.js +0 -277
  141. package/dist/mcp/tools/trader.js.map +0 -1
  142. package/dist/mcp/tools/wallet.d.ts +0 -274
  143. package/dist/mcp/tools/wallet.d.ts.map +0 -1
  144. package/dist/mcp/tools/wallet.js +0 -579
  145. package/dist/mcp/tools/wallet.js.map +0 -1
  146. package/dist/mcp/types.d.ts +0 -413
  147. package/dist/mcp/types.d.ts.map +0 -1
  148. package/dist/mcp/types.js +0 -5
  149. package/dist/mcp/types.js.map +0 -1
  150. package/dist/services/authorization-service.d.ts +0 -97
  151. package/dist/services/authorization-service.d.ts.map +0 -1
  152. package/dist/services/authorization-service.js +0 -279
  153. package/dist/services/authorization-service.js.map +0 -1
  154. package/dist/services/market-service.d.ts +0 -108
  155. package/dist/services/market-service.d.ts.map +0 -1
  156. package/dist/services/market-service.js +0 -458
  157. package/dist/services/market-service.js.map +0 -1
  158. package/dist/services/realtime-service.d.ts +0 -82
  159. package/dist/services/realtime-service.d.ts.map +0 -1
  160. package/dist/services/realtime-service.js +0 -150
  161. package/dist/services/realtime-service.js.map +0 -1
  162. package/dist/services/swap-service.d.ts +0 -217
  163. package/dist/services/swap-service.d.ts.map +0 -1
  164. package/dist/services/swap-service.js +0 -695
  165. package/dist/services/swap-service.js.map +0 -1
  166. package/dist/services/wallet-service.d.ts +0 -94
  167. package/dist/services/wallet-service.d.ts.map +0 -1
  168. package/dist/services/wallet-service.js +0 -173
  169. package/dist/services/wallet-service.js.map +0 -1
  170. package/dist/utils/price-utils.d.ts +0 -153
  171. package/dist/utils/price-utils.d.ts.map +0 -1
  172. package/dist/utils/price-utils.js +0 -236
  173. package/dist/utils/price-utils.js.map +0 -1
  174. package/docs/01-mcp.md +0 -2041
  175. package/docs/e2e/01-trader-tools.md +0 -159
  176. package/docs/e2e/02-market-tools.md +0 -180
  177. package/docs/e2e/03-order-tools.md +0 -166
  178. package/docs/e2e/04-wallet-tools.md +0 -224
  179. package/docs/e2e/05-trading-tools.md +0 -327
  180. package/docs/e2e/06-integration-scenarios.md +0 -481
  181. package/docs/e2e/coordinator.md +0 -376
  182. package/scripts/truth.md +0 -440
  183. package/src/mcp/README.md +0 -380
  184. package/src/mcp/errors.ts +0 -124
  185. package/src/mcp/index.ts +0 -309
  186. package/src/mcp/server.ts +0 -183
  187. package/src/mcp/tools/guide.ts +0 -821
  188. package/src/mcp/tools/index.ts +0 -73
  189. package/src/mcp/tools/market.ts +0 -363
  190. package/src/mcp/tools/order.ts +0 -326
  191. package/src/mcp/tools/trade.ts +0 -417
  192. package/src/mcp/tools/trader.ts +0 -322
  193. package/src/mcp/tools/wallet.ts +0 -683
  194. package/src/mcp/types.ts +0 -472
@@ -1,579 +0,0 @@
1
- /**
2
- * Wallet Tools - MCP tools for deposits, swaps, and authorization management
3
- *
4
- * These tools use SDK services:
5
- * - BridgeClient for deposit addresses and supported assets
6
- * - SwapService for DEX swaps on Polygon (QuickSwap V3)
7
- * - AuthorizationService for allowance checks and approvals
8
- * - depositUsdc() for executing USDC deposits
9
- * - swapAndDeposit() for swapping any token to USDC and depositing
10
- */
11
- import { ethers } from 'ethers';
12
- import { BridgeClient, AuthorizationService, depositUsdc, swapAndDeposit, SwapService, getSupportedDepositTokens, } from '../../index.js';
13
- import { wrapError, McpToolError, ErrorCode } from '../errors.js';
14
- // Tool definitions
15
- export const walletToolDefinitions = [
16
- {
17
- name: 'get_supported_deposit_assets',
18
- description: 'Get all supported assets and chains for deposits to Polymarket',
19
- inputSchema: {
20
- type: 'object',
21
- properties: {
22
- chainId: {
23
- type: 'number',
24
- description: 'Filter by chain ID (optional)',
25
- },
26
- },
27
- },
28
- },
29
- {
30
- name: 'get_deposit_addresses',
31
- description: 'Get deposit addresses (EVM, Solana, Bitcoin) for the configured wallet',
32
- inputSchema: {
33
- type: 'object',
34
- properties: {},
35
- },
36
- },
37
- {
38
- name: 'deposit_usdc',
39
- description: 'Deposit USDC to Polymarket. Transfers USDC from your wallet to Polymarket via the Bridge.',
40
- inputSchema: {
41
- type: 'object',
42
- properties: {
43
- amount: {
44
- type: 'number',
45
- description: 'Amount to deposit in USDC (minimum $2)',
46
- },
47
- token: {
48
- type: 'string',
49
- enum: ['NATIVE_USDC', 'USDC_E'],
50
- description: 'Which USDC token to deposit (default: NATIVE_USDC)',
51
- },
52
- },
53
- required: ['amount'],
54
- },
55
- },
56
- {
57
- name: 'check_allowances',
58
- description: 'Check all ERC20 and ERC1155 allowances required for trading',
59
- inputSchema: {
60
- type: 'object',
61
- properties: {},
62
- },
63
- },
64
- {
65
- name: 'approve_trading',
66
- description: 'Set up all required ERC20 and ERC1155 approvals for trading on Polymarket',
67
- inputSchema: {
68
- type: 'object',
69
- properties: {},
70
- },
71
- },
72
- {
73
- name: 'swap',
74
- description: 'Swap between tokens on Polygon using QuickSwap V3. Supports MATIC, WETH, USDC, USDC.e, USDT, DAI.',
75
- inputSchema: {
76
- type: 'object',
77
- properties: {
78
- tokenIn: {
79
- type: 'string',
80
- description: 'Token to swap from (e.g., MATIC, WETH, USDT, DAI, USDC, USDC_E)',
81
- },
82
- tokenOut: {
83
- type: 'string',
84
- description: 'Token to swap to (e.g., USDC, USDC_E, WETH)',
85
- },
86
- amount: {
87
- type: 'string',
88
- description: 'Amount to swap in token units',
89
- },
90
- slippage: {
91
- type: 'number',
92
- description: 'Slippage tolerance in percent (default: 0.5)',
93
- },
94
- },
95
- required: ['tokenIn', 'tokenOut', 'amount'],
96
- },
97
- },
98
- {
99
- name: 'swap_and_deposit',
100
- description: 'Swap any supported Polygon token to USDC and deposit to Polymarket. Supports MATIC, WETH, USDT, DAI, USDC, USDC.e.',
101
- inputSchema: {
102
- type: 'object',
103
- properties: {
104
- token: {
105
- type: 'string',
106
- description: 'Token to deposit (e.g., MATIC, WETH, USDT, DAI, USDC)',
107
- },
108
- amount: {
109
- type: 'string',
110
- description: 'Amount to deposit in token units',
111
- },
112
- slippage: {
113
- type: 'number',
114
- description: 'Slippage tolerance for swap in percent (default: 0.5)',
115
- },
116
- },
117
- required: ['token', 'amount'],
118
- },
119
- },
120
- {
121
- name: 'get_token_balances',
122
- description: 'Get balances for all supported tokens on Polygon for the configured wallet (requires private key)',
123
- inputSchema: {
124
- type: 'object',
125
- properties: {},
126
- },
127
- },
128
- {
129
- name: 'get_wallet_balances',
130
- description: 'Get Polygon token balances for any wallet address (MATIC, USDC, USDC.e, USDT, DAI, WETH). No private key required.',
131
- inputSchema: {
132
- type: 'object',
133
- properties: {
134
- address: {
135
- type: 'string',
136
- description: 'Wallet address to check (0x...)',
137
- },
138
- },
139
- required: ['address'],
140
- },
141
- },
142
- {
143
- name: 'get_swap_quote',
144
- description: 'Get a swap quote to check if a route is available and estimate output amount. No private key required. Uses QuickSwap V3 Quoter contract.',
145
- inputSchema: {
146
- type: 'object',
147
- properties: {
148
- tokenIn: {
149
- type: 'string',
150
- description: 'Token to swap from (e.g., MATIC, WETH, USDT, DAI, USDC, USDC_E)',
151
- },
152
- tokenOut: {
153
- type: 'string',
154
- description: 'Token to swap to (e.g., USDC, USDC_E, WETH)',
155
- },
156
- amount: {
157
- type: 'string',
158
- description: 'Amount to swap in token units',
159
- },
160
- },
161
- required: ['tokenIn', 'tokenOut', 'amount'],
162
- },
163
- },
164
- {
165
- name: 'get_available_pools',
166
- description: 'Get all available liquidity pools on QuickSwap V3. Shows which token pairs can be swapped directly.',
167
- inputSchema: {
168
- type: 'object',
169
- properties: {},
170
- },
171
- },
172
- ];
173
- // Default Polygon RPC for wallet operations
174
- const POLYGON_RPC = 'https://polygon-rpc.com';
175
- /**
176
- * Helper to get signer from SDK
177
- * Ensures the signer is connected to a Polygon provider
178
- */
179
- function getSignerFromSdk(sdk) {
180
- const sdkAny = sdk;
181
- const signer = sdkAny.clobApi?.signer;
182
- if (!signer) {
183
- throw new McpToolError(ErrorCode.AUTH_REQUIRED, 'Wallet not configured. Set POLY_PRIVATE_KEY to use wallet features.');
184
- }
185
- // Ensure signer is connected to a provider
186
- if (!signer.provider) {
187
- const provider = new ethers.providers.JsonRpcProvider(POLYGON_RPC);
188
- return signer.connect(provider);
189
- }
190
- return signer;
191
- }
192
- /**
193
- * Get supported deposit assets
194
- */
195
- export async function handleGetSupportedAssets(_sdk, input) {
196
- try {
197
- const bridge = new BridgeClient();
198
- const assets = await bridge.getSupportedAssets();
199
- // Filter by chainId if provided
200
- const filtered = input.chainId
201
- ? assets.filter((a) => a.chainId === input.chainId)
202
- : assets;
203
- // Get unique chains
204
- const chainSet = new Set();
205
- for (const asset of filtered) {
206
- chainSet.add(asset.chainName);
207
- }
208
- return {
209
- assets: filtered.map((a) => ({
210
- chainId: a.chainId,
211
- chainName: a.chainName,
212
- tokenSymbol: a.tokenSymbol,
213
- tokenName: a.tokenName,
214
- tokenAddress: a.tokenAddress,
215
- decimals: a.decimals,
216
- minDeposit: a.minDeposit,
217
- minDepositUsd: a.minDepositUsd,
218
- })),
219
- summary: {
220
- totalChains: chainSet.size,
221
- totalAssets: filtered.length,
222
- chains: Array.from(chainSet),
223
- },
224
- };
225
- }
226
- catch (err) {
227
- throw wrapError(err);
228
- }
229
- }
230
- /**
231
- * Get deposit addresses for the wallet
232
- */
233
- export async function handleGetDepositAddresses(sdk) {
234
- const signer = getSignerFromSdk(sdk);
235
- const walletAddress = signer.address;
236
- try {
237
- const bridge = new BridgeClient();
238
- const result = await bridge.createDepositAddresses(walletAddress);
239
- const evmChains = ['Ethereum', 'Polygon', 'Arbitrum', 'Base', 'Optimism'];
240
- return {
241
- wallet: walletAddress,
242
- addresses: {
243
- evm: result.address.evm,
244
- solana: result.address.svm,
245
- bitcoin: result.address.btc,
246
- },
247
- evmChains,
248
- instructions: `Send assets to these addresses to deposit to your Polymarket account.
249
-
250
- EVM Chains (Ethereum, Polygon, Arbitrum, Base, Optimism):
251
- ${result.address.evm}
252
-
253
- Solana:
254
- ${result.address.svm}
255
-
256
- Bitcoin:
257
- ${result.address.btc}
258
-
259
- Assets will be automatically converted to USDC.e on Polygon.`,
260
- };
261
- }
262
- catch (err) {
263
- throw wrapError(err);
264
- }
265
- }
266
- /**
267
- * Deposit USDC to Polymarket
268
- */
269
- export async function handleDepositUsdc(sdk, input) {
270
- const signer = getSignerFromSdk(sdk);
271
- try {
272
- const result = await depositUsdc(signer, input.amount, {
273
- token: input.token || 'NATIVE_USDC',
274
- });
275
- if (!result.success) {
276
- return {
277
- success: false,
278
- error: result.error,
279
- wallet: signer.address,
280
- amount: input.amount,
281
- };
282
- }
283
- return {
284
- success: true,
285
- wallet: signer.address,
286
- amount: result.amount,
287
- txHash: result.txHash,
288
- depositAddress: result.depositAddress,
289
- message: `Successfully deposited $${result.amount} USDC. The bridge will automatically convert it to USDC.e on Polygon (typically 1-5 minutes).`,
290
- explorerUrl: `https://polygonscan.com/tx/${result.txHash}`,
291
- };
292
- }
293
- catch (err) {
294
- throw wrapError(err);
295
- }
296
- }
297
- /**
298
- * Check all allowances required for trading
299
- */
300
- export async function handleCheckAllowances(sdk) {
301
- const signer = getSignerFromSdk(sdk);
302
- try {
303
- const authService = new AuthorizationService(signer);
304
- const result = await authService.checkAllowances();
305
- return {
306
- wallet: result.wallet,
307
- erc20: {
308
- usdc: {
309
- balance: result.usdcBalance,
310
- allowances: result.erc20Allowances,
311
- },
312
- },
313
- erc1155: {
314
- conditionalTokens: {
315
- approvals: result.erc1155Approvals,
316
- },
317
- },
318
- tradingReady: result.tradingReady,
319
- issues: result.issues,
320
- };
321
- }
322
- catch (err) {
323
- throw wrapError(err);
324
- }
325
- }
326
- /**
327
- * Set up all required approvals for trading
328
- */
329
- export async function handleApproveTrading(sdk) {
330
- const signer = getSignerFromSdk(sdk);
331
- try {
332
- const authService = new AuthorizationService(signer);
333
- const result = await authService.approveAll();
334
- return {
335
- wallet: result.wallet,
336
- erc20Approvals: result.erc20Approvals,
337
- erc1155Approvals: result.erc1155Approvals,
338
- allApproved: result.allApproved,
339
- summary: result.summary,
340
- };
341
- }
342
- catch (err) {
343
- throw wrapError(err);
344
- }
345
- }
346
- /**
347
- * Swap between tokens on Polygon using QuickSwap V3
348
- */
349
- export async function handleSwap(sdk, input) {
350
- const signer = getSignerFromSdk(sdk);
351
- try {
352
- const swapService = new SwapService(signer);
353
- // Check balance first
354
- const balance = await swapService.getBalance(input.tokenIn);
355
- if (parseFloat(balance) < parseFloat(input.amount)) {
356
- return {
357
- success: false,
358
- error: `Insufficient ${input.tokenIn} balance. Have: ${balance}, Need: ${input.amount}`,
359
- wallet: signer.address,
360
- };
361
- }
362
- // Execute swap
363
- const result = await swapService.swap(input.tokenIn, input.tokenOut, input.amount, {
364
- slippage: input.slippage || 0.5,
365
- });
366
- if (!result.success) {
367
- return {
368
- success: false,
369
- error: 'Swap failed',
370
- wallet: signer.address,
371
- txHash: result.transactionHash,
372
- };
373
- }
374
- return {
375
- success: true,
376
- wallet: signer.address,
377
- tokenIn: result.tokenIn,
378
- tokenOut: result.tokenOut,
379
- amountIn: result.amountIn,
380
- amountOut: result.amountOut,
381
- txHash: result.transactionHash,
382
- gasUsed: result.gasUsed,
383
- explorerUrl: `https://polygonscan.com/tx/${result.transactionHash}`,
384
- };
385
- }
386
- catch (err) {
387
- throw wrapError(err);
388
- }
389
- }
390
- /**
391
- * Swap any token to USDC and deposit to Polymarket
392
- */
393
- export async function handleSwapAndDeposit(sdk, input) {
394
- const signer = getSignerFromSdk(sdk);
395
- try {
396
- const result = await swapAndDeposit(signer, input.token, input.amount, {
397
- slippage: input.slippage || 0.5,
398
- });
399
- if (!result.success) {
400
- return {
401
- success: false,
402
- error: result.error,
403
- wallet: signer.address,
404
- token: input.token,
405
- amount: input.amount,
406
- };
407
- }
408
- return {
409
- success: true,
410
- wallet: signer.address,
411
- tokenIn: result.tokenIn,
412
- amountIn: result.amountIn,
413
- usdcAmount: result.usdcAmount,
414
- swapTxHash: result.swapTxHash || null,
415
- depositTxHash: result.depositTxHash,
416
- depositAddress: result.depositAddress,
417
- message: result.swapTxHash
418
- ? `Swapped ${result.amountIn} ${result.tokenIn} to ${result.usdcAmount} USDC, then deposited to Polymarket.`
419
- : `Deposited ${result.usdcAmount} USDC to Polymarket.`,
420
- explorerUrl: result.depositTxHash
421
- ? `https://polygonscan.com/tx/${result.depositTxHash}`
422
- : undefined,
423
- };
424
- }
425
- catch (err) {
426
- throw wrapError(err);
427
- }
428
- }
429
- /**
430
- * Get balances for all supported tokens (requires configured wallet)
431
- */
432
- export async function handleGetTokenBalances(sdk) {
433
- const signer = getSignerFromSdk(sdk);
434
- try {
435
- const swapService = new SwapService(signer);
436
- const balances = await swapService.getBalances();
437
- // Filter out zero balances
438
- const nonZeroBalances = balances.filter((b) => parseFloat(b.balance) > 0);
439
- return {
440
- wallet: signer.address,
441
- balances: balances.map((b) => ({
442
- token: b.token,
443
- symbol: b.symbol,
444
- balance: b.balance,
445
- decimals: b.decimals,
446
- })),
447
- nonZeroBalances: nonZeroBalances.map((b) => ({
448
- token: b.token,
449
- balance: b.balance,
450
- })),
451
- supportedTokens: getSupportedDepositTokens(),
452
- };
453
- }
454
- catch (err) {
455
- throw wrapError(err);
456
- }
457
- }
458
- /**
459
- * Get balances for any wallet address (no private key required)
460
- */
461
- export async function handleGetWalletBalances(_sdk, input) {
462
- try {
463
- // Validate address
464
- if (!input.address || !input.address.startsWith('0x') || input.address.length !== 42) {
465
- throw new McpToolError(ErrorCode.INVALID_INPUT, 'Invalid wallet address. Must be a valid Ethereum address (0x...)');
466
- }
467
- const balances = await SwapService.getWalletBalances(input.address);
468
- // Filter out zero balances
469
- const nonZeroBalances = balances.filter((b) => parseFloat(b.balance) > 0);
470
- // Calculate total USD value (simplified, assumes stablecoins = $1)
471
- let totalUsdValue = 0;
472
- for (const b of nonZeroBalances) {
473
- const amount = parseFloat(b.balance);
474
- if (['USDC', 'USDC_E', 'USDT', 'DAI'].includes(b.token)) {
475
- totalUsdValue += amount;
476
- }
477
- // For MATIC/WETH, would need price oracle for accurate value
478
- }
479
- return {
480
- address: input.address,
481
- balances: balances.map((b) => ({
482
- token: b.token,
483
- symbol: b.symbol,
484
- balance: b.balance,
485
- decimals: b.decimals,
486
- })),
487
- nonZeroBalances: nonZeroBalances.map((b) => ({
488
- token: b.token,
489
- balance: b.balance,
490
- })),
491
- summary: {
492
- totalTokens: nonZeroBalances.length,
493
- stablecoinValue: totalUsdValue.toFixed(2),
494
- },
495
- supportedTokens: getSupportedDepositTokens(),
496
- };
497
- }
498
- catch (err) {
499
- throw wrapError(err);
500
- }
501
- }
502
- /**
503
- * Get a swap quote (check route availability and estimate output)
504
- * No private key required - uses read-only provider
505
- */
506
- export async function handleGetSwapQuote(_sdk, input) {
507
- try {
508
- // Validate inputs
509
- if (!input.tokenIn || !input.tokenOut || !input.amount) {
510
- throw new McpToolError(ErrorCode.INVALID_INPUT, 'tokenIn, tokenOut, and amount are all required');
511
- }
512
- // Create a read-only SwapService with a dummy wallet
513
- // The getQuote method only uses the provider, not the signer
514
- const provider = new ethers.providers.JsonRpcProvider(POLYGON_RPC);
515
- const dummyWallet = ethers.Wallet.createRandom().connect(provider);
516
- const swapService = new SwapService(dummyWallet);
517
- const quote = await swapService.getQuote(input.tokenIn, input.tokenOut, input.amount);
518
- if (quote.possible) {
519
- return {
520
- possible: true,
521
- tokenIn: quote.tokenIn,
522
- tokenOut: quote.tokenOut,
523
- amountIn: quote.amountIn,
524
- amountOut: quote.amountOut,
525
- route: quote.route,
526
- routeDescription: quote.route.length === 2
527
- ? `Direct swap: ${quote.route.join(' → ')}`
528
- : `Multi-hop: ${quote.route.join(' → ')}`,
529
- message: `Can swap ${quote.amountIn} ${quote.tokenIn} for ~${quote.amountOut} ${quote.tokenOut}`,
530
- };
531
- }
532
- else {
533
- return {
534
- possible: false,
535
- tokenIn: quote.tokenIn,
536
- tokenOut: quote.tokenOut,
537
- amountIn: quote.amountIn,
538
- amountOut: null,
539
- route: quote.route,
540
- poolExists: quote.poolExists,
541
- reason: quote.reason,
542
- suggestion: quote.tokenOut === 'USDC_E'
543
- ? 'For USDC.e, use: MATIC → USDC via swap, then USDC → USDC.e via deposit_usdc (Bridge)'
544
- : 'Try swapping through USDC as an intermediate token',
545
- };
546
- }
547
- }
548
- catch (err) {
549
- throw wrapError(err);
550
- }
551
- }
552
- /**
553
- * Get all available liquidity pools on QuickSwap V3
554
- */
555
- export async function handleGetAvailablePools(_sdk) {
556
- try {
557
- // Create a read-only SwapService
558
- const provider = new ethers.providers.JsonRpcProvider(POLYGON_RPC);
559
- const dummyWallet = ethers.Wallet.createRandom().connect(provider);
560
- const swapService = new SwapService(dummyWallet);
561
- const pools = await swapService.getAvailablePools();
562
- return {
563
- pools: pools.map((p) => ({
564
- pair: `${p.tokenA}/${p.tokenB}`,
565
- tokenA: p.tokenA,
566
- tokenB: p.tokenB,
567
- poolAddress: p.poolAddress,
568
- })),
569
- totalPools: pools.length,
570
- supportedTokens: swapService.getSupportedTokens().filter((t) => t !== 'NATIVE_USDC' && t !== 'WMATIC' // Exclude aliases
571
- ),
572
- note: 'These are direct swap pairs. For pairs not listed, multi-hop routing through USDC or WMATIC may be available. Use get_swap_quote to check.',
573
- };
574
- }
575
- catch (err) {
576
- throw wrapError(err);
577
- }
578
- }
579
- //# sourceMappingURL=wallet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/mcp/tools/wallet.ts"],"names":[],"mappings":"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"}