@catalyst-team/poly-sdk 0.1.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 (244) hide show
  1. package/.env +0 -0
  2. package/README.md +803 -0
  3. package/dist/__tests__/clob-api.test.d.ts +5 -0
  4. package/dist/__tests__/clob-api.test.d.ts.map +1 -0
  5. package/dist/__tests__/clob-api.test.js +240 -0
  6. package/dist/__tests__/clob-api.test.js.map +1 -0
  7. package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
  8. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
  9. package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
  10. package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
  11. package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
  12. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
  14. package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
  15. package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
  16. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
  17. package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
  18. package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
  19. package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
  20. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
  21. package/dist/__tests__/integration/data-api.integration.test.js +161 -0
  22. package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
  23. package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
  24. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
  25. package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
  26. package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
  27. package/dist/__tests__/test-utils.d.ts +92 -0
  28. package/dist/__tests__/test-utils.d.ts.map +1 -0
  29. package/dist/__tests__/test-utils.js +143 -0
  30. package/dist/__tests__/test-utils.js.map +1 -0
  31. package/dist/clients/bridge-client.d.ts +388 -0
  32. package/dist/clients/bridge-client.d.ts.map +1 -0
  33. package/dist/clients/bridge-client.js +587 -0
  34. package/dist/clients/bridge-client.js.map +1 -0
  35. package/dist/clients/clob-api.d.ts +318 -0
  36. package/dist/clients/clob-api.d.ts.map +1 -0
  37. package/dist/clients/clob-api.js +388 -0
  38. package/dist/clients/clob-api.js.map +1 -0
  39. package/dist/clients/ctf-client.d.ts +473 -0
  40. package/dist/clients/ctf-client.d.ts.map +1 -0
  41. package/dist/clients/ctf-client.js +915 -0
  42. package/dist/clients/ctf-client.js.map +1 -0
  43. package/dist/clients/data-api.d.ts +134 -0
  44. package/dist/clients/data-api.d.ts.map +1 -0
  45. package/dist/clients/data-api.js +265 -0
  46. package/dist/clients/data-api.js.map +1 -0
  47. package/dist/clients/gamma-api.d.ts +401 -0
  48. package/dist/clients/gamma-api.d.ts.map +1 -0
  49. package/dist/clients/gamma-api.js +352 -0
  50. package/dist/clients/gamma-api.js.map +1 -0
  51. package/dist/clients/trading-client.d.ts +252 -0
  52. package/dist/clients/trading-client.d.ts.map +1 -0
  53. package/dist/clients/trading-client.js +543 -0
  54. package/dist/clients/trading-client.js.map +1 -0
  55. package/dist/clients/websocket-manager.d.ts +100 -0
  56. package/dist/clients/websocket-manager.d.ts.map +1 -0
  57. package/dist/clients/websocket-manager.js +193 -0
  58. package/dist/clients/websocket-manager.js.map +1 -0
  59. package/dist/core/cache-adapter-bridge.d.ts +36 -0
  60. package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
  61. package/dist/core/cache-adapter-bridge.js +81 -0
  62. package/dist/core/cache-adapter-bridge.js.map +1 -0
  63. package/dist/core/cache.d.ts +40 -0
  64. package/dist/core/cache.d.ts.map +1 -0
  65. package/dist/core/cache.js +71 -0
  66. package/dist/core/cache.js.map +1 -0
  67. package/dist/core/errors.d.ts +38 -0
  68. package/dist/core/errors.d.ts.map +1 -0
  69. package/dist/core/errors.js +84 -0
  70. package/dist/core/errors.js.map +1 -0
  71. package/dist/core/rate-limiter.d.ts +31 -0
  72. package/dist/core/rate-limiter.d.ts.map +1 -0
  73. package/dist/core/rate-limiter.js +70 -0
  74. package/dist/core/rate-limiter.js.map +1 -0
  75. package/dist/core/types.d.ts +314 -0
  76. package/dist/core/types.d.ts.map +1 -0
  77. package/dist/core/types.js +19 -0
  78. package/dist/core/types.js.map +1 -0
  79. package/dist/core/unified-cache.d.ts +63 -0
  80. package/dist/core/unified-cache.d.ts.map +1 -0
  81. package/dist/core/unified-cache.js +114 -0
  82. package/dist/core/unified-cache.js.map +1 -0
  83. package/dist/index.d.ts +94 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +258 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/mcp/errors.d.ts +33 -0
  88. package/dist/mcp/errors.d.ts.map +1 -0
  89. package/dist/mcp/errors.js +86 -0
  90. package/dist/mcp/errors.js.map +1 -0
  91. package/dist/mcp/index.d.ts +62 -0
  92. package/dist/mcp/index.d.ts.map +1 -0
  93. package/dist/mcp/index.js +173 -0
  94. package/dist/mcp/index.js.map +1 -0
  95. package/dist/mcp/server.d.ts +17 -0
  96. package/dist/mcp/server.d.ts.map +1 -0
  97. package/dist/mcp/server.js +155 -0
  98. package/dist/mcp/server.js.map +1 -0
  99. package/dist/mcp/tools/guide.d.ts +12 -0
  100. package/dist/mcp/tools/guide.d.ts.map +1 -0
  101. package/dist/mcp/tools/guide.js +801 -0
  102. package/dist/mcp/tools/guide.js.map +1 -0
  103. package/dist/mcp/tools/index.d.ts +11 -0
  104. package/dist/mcp/tools/index.d.ts.map +1 -0
  105. package/dist/mcp/tools/index.js +27 -0
  106. package/dist/mcp/tools/index.js.map +1 -0
  107. package/dist/mcp/tools/market.d.ts +11 -0
  108. package/dist/mcp/tools/market.d.ts.map +1 -0
  109. package/dist/mcp/tools/market.js +314 -0
  110. package/dist/mcp/tools/market.js.map +1 -0
  111. package/dist/mcp/tools/order.d.ts +10 -0
  112. package/dist/mcp/tools/order.d.ts.map +1 -0
  113. package/dist/mcp/tools/order.js +258 -0
  114. package/dist/mcp/tools/order.js.map +1 -0
  115. package/dist/mcp/tools/trade.d.ts +38 -0
  116. package/dist/mcp/tools/trade.d.ts.map +1 -0
  117. package/dist/mcp/tools/trade.js +314 -0
  118. package/dist/mcp/tools/trade.js.map +1 -0
  119. package/dist/mcp/tools/trader.d.ts +11 -0
  120. package/dist/mcp/tools/trader.d.ts.map +1 -0
  121. package/dist/mcp/tools/trader.js +277 -0
  122. package/dist/mcp/tools/trader.js.map +1 -0
  123. package/dist/mcp/tools/wallet.d.ts +274 -0
  124. package/dist/mcp/tools/wallet.d.ts.map +1 -0
  125. package/dist/mcp/tools/wallet.js +579 -0
  126. package/dist/mcp/tools/wallet.js.map +1 -0
  127. package/dist/mcp/types.d.ts +413 -0
  128. package/dist/mcp/types.d.ts.map +1 -0
  129. package/dist/mcp/types.js +5 -0
  130. package/dist/mcp/types.js.map +1 -0
  131. package/dist/services/authorization-service.d.ts +97 -0
  132. package/dist/services/authorization-service.d.ts.map +1 -0
  133. package/dist/services/authorization-service.js +279 -0
  134. package/dist/services/authorization-service.js.map +1 -0
  135. package/dist/services/market-service.d.ts +108 -0
  136. package/dist/services/market-service.d.ts.map +1 -0
  137. package/dist/services/market-service.js +458 -0
  138. package/dist/services/market-service.js.map +1 -0
  139. package/dist/services/realtime-service.d.ts +82 -0
  140. package/dist/services/realtime-service.d.ts.map +1 -0
  141. package/dist/services/realtime-service.js +150 -0
  142. package/dist/services/realtime-service.js.map +1 -0
  143. package/dist/services/swap-service.d.ts +217 -0
  144. package/dist/services/swap-service.d.ts.map +1 -0
  145. package/dist/services/swap-service.js +695 -0
  146. package/dist/services/swap-service.js.map +1 -0
  147. package/dist/services/wallet-service.d.ts +94 -0
  148. package/dist/services/wallet-service.d.ts.map +1 -0
  149. package/dist/services/wallet-service.js +173 -0
  150. package/dist/services/wallet-service.js.map +1 -0
  151. package/dist/utils/price-utils.d.ts +153 -0
  152. package/dist/utils/price-utils.d.ts.map +1 -0
  153. package/dist/utils/price-utils.js +236 -0
  154. package/dist/utils/price-utils.js.map +1 -0
  155. package/docs/00-design.md +760 -0
  156. package/docs/01-mcp.md +2041 -0
  157. package/docs/02-API.md +1148 -0
  158. package/docs/e2e/01-trader-tools.md +159 -0
  159. package/docs/e2e/02-market-tools.md +180 -0
  160. package/docs/e2e/03-order-tools.md +166 -0
  161. package/docs/e2e/04-wallet-tools.md +224 -0
  162. package/docs/e2e/05-trading-tools.md +327 -0
  163. package/docs/e2e/06-integration-scenarios.md +481 -0
  164. package/docs/e2e/coordinator.md +376 -0
  165. package/examples/01-basic-usage.ts +68 -0
  166. package/examples/02-smart-money.ts +95 -0
  167. package/examples/03-market-analysis.ts +108 -0
  168. package/examples/04-kline-aggregation.ts +158 -0
  169. package/examples/05-follow-wallet-strategy.ts +156 -0
  170. package/examples/06-services-demo.ts +124 -0
  171. package/examples/07-realtime-websocket.ts +117 -0
  172. package/examples/08-trading-orders.ts +278 -0
  173. package/examples/09-rewards-tracking.ts +187 -0
  174. package/examples/10-ctf-operations.ts +336 -0
  175. package/examples/11-live-arbitrage-scan.ts +221 -0
  176. package/examples/12-trending-arb-monitor.ts +406 -0
  177. package/examples/README.md +179 -0
  178. package/package.json +62 -0
  179. package/scripts/README.md +163 -0
  180. package/scripts/approvals/approve-erc1155.ts +129 -0
  181. package/scripts/approvals/approve-neg-risk-erc1155.ts +149 -0
  182. package/scripts/approvals/approve-neg-risk.ts +102 -0
  183. package/scripts/approvals/check-all-allowances.ts +150 -0
  184. package/scripts/approvals/check-allowance.ts +129 -0
  185. package/scripts/approvals/check-ctf-approval.ts +158 -0
  186. package/scripts/datas/001-report.md +486 -0
  187. package/scripts/datas/clone-modal-screenshot.png +0 -0
  188. package/scripts/deposit/deposit-native-usdc.ts +179 -0
  189. package/scripts/deposit/deposit-usdc.ts +155 -0
  190. package/scripts/deposit/swap-usdc-to-usdce.ts +375 -0
  191. package/scripts/research/research-markets.ts +166 -0
  192. package/scripts/trading/check-orders.ts +50 -0
  193. package/scripts/trading/sell-nvidia-positions.ts +206 -0
  194. package/scripts/trading/test-order.ts +172 -0
  195. package/scripts/truth.md +440 -0
  196. package/scripts/verify/test-approve-trading.ts +98 -0
  197. package/scripts/verify/test-provider-fix.ts +43 -0
  198. package/scripts/verify/test-search-mcp.ts +113 -0
  199. package/scripts/verify/verify-all-apis.ts +160 -0
  200. package/scripts/wallet/check-wallet-balances.ts +75 -0
  201. package/scripts/wallet/test-wallet-operations.ts +191 -0
  202. package/scripts/wallet/verify-wallet-tools.ts +124 -0
  203. package/src/__tests__/clob-api.test.ts +301 -0
  204. package/src/__tests__/integration/bridge-client.integration.test.ts +314 -0
  205. package/src/__tests__/integration/clob-api.integration.test.ts +218 -0
  206. package/src/__tests__/integration/ctf-client.integration.test.ts +331 -0
  207. package/src/__tests__/integration/data-api.integration.test.ts +194 -0
  208. package/src/__tests__/integration/gamma-api.integration.test.ts +206 -0
  209. package/src/__tests__/test-utils.ts +170 -0
  210. package/src/clients/bridge-client.ts +841 -0
  211. package/src/clients/clob-api.ts +629 -0
  212. package/src/clients/ctf-client.ts +1216 -0
  213. package/src/clients/data-api.ts +469 -0
  214. package/src/clients/gamma-api.ts +597 -0
  215. package/src/clients/trading-client.ts +749 -0
  216. package/src/clients/websocket-manager.ts +267 -0
  217. package/src/core/cache-adapter-bridge.ts +94 -0
  218. package/src/core/cache.ts +85 -0
  219. package/src/core/errors.ts +117 -0
  220. package/src/core/rate-limiter.ts +74 -0
  221. package/src/core/types.ts +360 -0
  222. package/src/core/unified-cache.ts +153 -0
  223. package/src/index.ts +455 -0
  224. package/src/mcp/README.md +380 -0
  225. package/src/mcp/errors.ts +124 -0
  226. package/src/mcp/index.ts +309 -0
  227. package/src/mcp/server.ts +183 -0
  228. package/src/mcp/tools/guide.ts +821 -0
  229. package/src/mcp/tools/index.ts +73 -0
  230. package/src/mcp/tools/market.ts +363 -0
  231. package/src/mcp/tools/order.ts +326 -0
  232. package/src/mcp/tools/trade.ts +417 -0
  233. package/src/mcp/tools/trader.ts +322 -0
  234. package/src/mcp/tools/wallet.ts +683 -0
  235. package/src/mcp/types.ts +472 -0
  236. package/src/services/authorization-service.ts +357 -0
  237. package/src/services/market-service.ts +544 -0
  238. package/src/services/realtime-service.ts +196 -0
  239. package/src/services/swap-service.ts +896 -0
  240. package/src/services/wallet-service.ts +259 -0
  241. package/src/utils/price-utils.ts +307 -0
  242. package/tsconfig.json +8 -0
  243. package/vitest.config.ts +19 -0
  244. package/vitest.integration.config.ts +18 -0
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Realtime Service
3
+ *
4
+ * High-level wrapper for WebSocket subscriptions:
5
+ * - Market subscription management
6
+ * - Price caching and access
7
+ * - Event handler registration
8
+ */
9
+ import { WebSocketManager } from '../clients/websocket-manager.js';
10
+ export class RealtimeService {
11
+ wsManager;
12
+ subscriptions = new Map();
13
+ subscriptionIdCounter = 0;
14
+ constructor(wsManager) {
15
+ this.wsManager = wsManager || new WebSocketManager();
16
+ }
17
+ // ===== Market Subscriptions =====
18
+ /**
19
+ * Subscribe to market price updates
20
+ * @param assetIds - Token IDs to subscribe to
21
+ * @param handlers - Event handlers
22
+ * @returns Subscription object with unsubscribe method
23
+ */
24
+ async subscribeMarkets(assetIds, handlers) {
25
+ const subscriptionId = `sub_${++this.subscriptionIdCounter}`;
26
+ // Register event handlers (filtered by assetIds)
27
+ const priceHandler = (update) => {
28
+ if (assetIds.includes(update.assetId)) {
29
+ handlers.onPriceUpdate?.(update);
30
+ }
31
+ };
32
+ const bookHandler = (update) => {
33
+ if (assetIds.includes(update.assetId)) {
34
+ handlers.onBookUpdate?.(update);
35
+ }
36
+ };
37
+ const tradeHandler = (trade) => {
38
+ if (assetIds.includes(trade.assetId)) {
39
+ handlers.onLastTrade?.(trade);
40
+ }
41
+ };
42
+ const errorHandler = (error) => {
43
+ handlers.onError?.(error);
44
+ };
45
+ // Attach listeners
46
+ this.wsManager.on('priceUpdate', priceHandler);
47
+ this.wsManager.on('bookUpdate', bookHandler);
48
+ this.wsManager.on('lastTrade', tradeHandler);
49
+ this.wsManager.on('error', errorHandler);
50
+ // Subscribe to WebSocket
51
+ await this.wsManager.subscribe(assetIds);
52
+ // Create subscription object
53
+ const subscription = {
54
+ id: subscriptionId,
55
+ assetIds,
56
+ unsubscribe: async () => {
57
+ this.wsManager.off('priceUpdate', priceHandler);
58
+ this.wsManager.off('bookUpdate', bookHandler);
59
+ this.wsManager.off('lastTrade', tradeHandler);
60
+ this.wsManager.off('error', errorHandler);
61
+ await this.wsManager.unsubscribe(assetIds);
62
+ this.subscriptions.delete(subscriptionId);
63
+ },
64
+ };
65
+ this.subscriptions.set(subscriptionId, subscription);
66
+ return subscription;
67
+ }
68
+ /**
69
+ * Subscribe to a single market (both YES and NO tokens)
70
+ * @param yesTokenId - YES token ID
71
+ * @param noTokenId - NO token ID
72
+ * @param handlers - Event handlers
73
+ */
74
+ async subscribeMarket(yesTokenId, noTokenId, handlers) {
75
+ let lastYesUpdate;
76
+ let lastNoUpdate;
77
+ const checkPairUpdate = () => {
78
+ if (lastYesUpdate && lastNoUpdate && handlers.onPairUpdate) {
79
+ handlers.onPairUpdate({
80
+ yes: lastYesUpdate,
81
+ no: lastNoUpdate,
82
+ spread: lastYesUpdate.price + lastNoUpdate.price,
83
+ });
84
+ }
85
+ };
86
+ return this.subscribeMarkets([yesTokenId, noTokenId], {
87
+ onPriceUpdate: (update) => {
88
+ if (update.assetId === yesTokenId) {
89
+ lastYesUpdate = update;
90
+ }
91
+ else if (update.assetId === noTokenId) {
92
+ lastNoUpdate = update;
93
+ }
94
+ handlers.onPriceUpdate?.(update);
95
+ checkPairUpdate();
96
+ },
97
+ onBookUpdate: handlers.onBookUpdate,
98
+ onLastTrade: handlers.onLastTrade,
99
+ onError: handlers.onError,
100
+ });
101
+ }
102
+ // ===== Price Access =====
103
+ /**
104
+ * Get cached price for an asset
105
+ */
106
+ getPrice(assetId) {
107
+ return this.wsManager.getPrice(assetId);
108
+ }
109
+ /**
110
+ * Get all cached prices
111
+ */
112
+ getAllPrices() {
113
+ return this.wsManager.getAllPrices();
114
+ }
115
+ /**
116
+ * Get cached order book for an asset
117
+ */
118
+ getBook(assetId) {
119
+ return this.wsManager.getBook(assetId);
120
+ }
121
+ // ===== State Management =====
122
+ /**
123
+ * Get all active subscriptions
124
+ */
125
+ getActiveSubscriptions() {
126
+ return Array.from(this.subscriptions.values());
127
+ }
128
+ /**
129
+ * Get subscription by ID
130
+ */
131
+ getSubscription(id) {
132
+ return this.subscriptions.get(id);
133
+ }
134
+ /**
135
+ * Unsubscribe from all markets
136
+ */
137
+ async unsubscribeAll() {
138
+ for (const sub of this.subscriptions.values()) {
139
+ await sub.unsubscribe();
140
+ }
141
+ this.subscriptions.clear();
142
+ }
143
+ /**
144
+ * Get WebSocket manager for advanced usage
145
+ */
146
+ getWebSocketManager() {
147
+ return this.wsManager;
148
+ }
149
+ }
150
+ //# sourceMappingURL=realtime-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-service.js","sourceRoot":"","sources":["../../src/services/realtime-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Swap Service
3
+ *
4
+ * Provides DEX swap functionality on Polygon using QuickSwap V3.
5
+ * Supports swapping between various tokens including MATIC, WETH, USDC, USDC.e, USDT, DAI.
6
+ */
7
+ import { ethers } from 'ethers';
8
+ export declare const QUICKSWAP_ROUTER = "0xf5b509bB0909a69B1c207E495f687a596C168E12";
9
+ export declare const QUICKSWAP_QUOTER = "0xa15F0D7377B2A0C0c10db057f641beD21028FC89";
10
+ export declare const QUICKSWAP_FACTORY = "0x411b0fAcC3489691f28ad58c47006AF5E3Ab3A28";
11
+ export declare const WMATIC = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
12
+ /**
13
+ * Supported tokens on Polygon
14
+ *
15
+ * ⚠️ IMPORTANT: USDC vs USDC.e for Polymarket CTF
16
+ *
17
+ * | Token | Address | Polymarket CTF |
18
+ * |-------------|--------------------------------------------|-----------------
19
+ * | USDC_E | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 | ✅ Required |
20
+ * | USDC/NATIVE | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | ❌ Not accepted|
21
+ *
22
+ * For Polymarket CTF operations (split/merge/redeem):
23
+ * - Use transferUsdcE() to send USDC.e
24
+ * - Use swap('USDC', 'USDC_E', amount) to convert native USDC to USDC.e
25
+ *
26
+ * For general transfers:
27
+ * - transferUsdc() sends native USDC (most DEXs, CEXs use this)
28
+ * - transferUsdcE() sends bridged USDC.e (Polymarket CTF requires this)
29
+ */
30
+ export declare const POLYGON_TOKENS: {
31
+ readonly MATIC: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
32
+ readonly WMATIC: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
33
+ readonly USDC: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359";
34
+ readonly NATIVE_USDC: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359";
35
+ readonly USDC_E: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174";
36
+ readonly USDT: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F";
37
+ readonly DAI: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063";
38
+ readonly WETH: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
39
+ };
40
+ export declare const TOKEN_DECIMALS: Record<string, number>;
41
+ export type SupportedToken = keyof typeof POLYGON_TOKENS;
42
+ export interface SwapQuote {
43
+ tokenIn: string;
44
+ tokenOut: string;
45
+ amountIn: string;
46
+ estimatedAmountOut: string;
47
+ minAmountOut: string;
48
+ slippage: number;
49
+ priceImpact: string;
50
+ }
51
+ /** Quote result from Quoter contract */
52
+ export interface QuoteResult {
53
+ possible: boolean;
54
+ tokenIn: string;
55
+ tokenOut: string;
56
+ amountIn: string;
57
+ amountOut: string | null;
58
+ route: string[];
59
+ poolExists: boolean;
60
+ reason?: string;
61
+ }
62
+ /** Pool info */
63
+ export interface PoolInfo {
64
+ tokenA: string;
65
+ tokenB: string;
66
+ poolAddress: string | null;
67
+ exists: boolean;
68
+ }
69
+ export interface SwapResult {
70
+ success: boolean;
71
+ transactionHash: string;
72
+ tokenIn: string;
73
+ tokenOut: string;
74
+ amountIn: string;
75
+ amountOut: string;
76
+ gasUsed: string;
77
+ }
78
+ export interface TokenBalance {
79
+ token: string;
80
+ symbol: string;
81
+ balance: string;
82
+ decimals: number;
83
+ }
84
+ export interface TransferResult {
85
+ success: boolean;
86
+ transactionHash: string;
87
+ token: string;
88
+ to: string;
89
+ amount: string;
90
+ gasUsed: string;
91
+ }
92
+ export declare class SwapService {
93
+ private signer;
94
+ private provider;
95
+ private router;
96
+ private quoter;
97
+ private factory;
98
+ constructor(signer: ethers.Wallet);
99
+ /**
100
+ * Get dynamic gas options for Polygon network
101
+ * Uses RPC fee data with minimum priority fee of 30 gwei
102
+ */
103
+ private getGasOptions;
104
+ /**
105
+ * Get the wallet address
106
+ */
107
+ get address(): string;
108
+ /**
109
+ * Get token address from symbol
110
+ */
111
+ getTokenAddress(token: string): string;
112
+ /**
113
+ * Get token decimals
114
+ */
115
+ getTokenDecimals(token: string): number;
116
+ /**
117
+ * Check if a pool exists for a token pair
118
+ */
119
+ checkPool(tokenA: string, tokenB: string): Promise<PoolInfo>;
120
+ /**
121
+ * Get all available pools for supported tokens
122
+ */
123
+ getAvailablePools(): Promise<PoolInfo[]>;
124
+ /**
125
+ * Get a quote for a swap (checks if route is possible)
126
+ */
127
+ getQuote(tokenIn: string, tokenOut: string, amountIn: string): Promise<QuoteResult>;
128
+ /**
129
+ * Execute a multi-hop swap
130
+ */
131
+ swapMultiHop(tokenIn: string, tokenOut: string, amountIn: string, route: string[], options?: {
132
+ slippage?: number;
133
+ deadline?: number;
134
+ }): Promise<SwapResult>;
135
+ /**
136
+ * Get balances for all supported tokens
137
+ */
138
+ getBalances(): Promise<TokenBalance[]>;
139
+ /**
140
+ * Get balance for a specific token
141
+ */
142
+ getBalance(token: string): Promise<string>;
143
+ /**
144
+ * Wrap native MATIC to WMATIC
145
+ */
146
+ wrapMatic(amount: string): Promise<SwapResult>;
147
+ /**
148
+ * Unwrap WMATIC to native MATIC
149
+ */
150
+ unwrapMatic(amount: string): Promise<SwapResult>;
151
+ /**
152
+ * Execute a token swap using QuickSwap V3
153
+ */
154
+ swap(tokenIn: string, tokenOut: string, amountIn: string, options?: {
155
+ slippage?: number;
156
+ deadline?: number;
157
+ }): Promise<SwapResult>;
158
+ /**
159
+ * Swap any supported token to USDC (for deposit)
160
+ */
161
+ swapToUsdc(tokenIn: string, amountIn: string, options?: {
162
+ usdcType?: 'NATIVE_USDC' | 'USDC_E';
163
+ slippage?: number;
164
+ }): Promise<SwapResult>;
165
+ /**
166
+ * Get list of supported tokens
167
+ */
168
+ getSupportedTokens(): string[];
169
+ /**
170
+ * Get balances for any wallet address (static method, no signer required)
171
+ */
172
+ static getWalletBalances(address: string, provider?: ethers.providers.Provider): Promise<TokenBalance[]>;
173
+ /**
174
+ * Get balance for a specific token for any wallet (static)
175
+ */
176
+ static getWalletBalance(address: string, token: string, provider?: ethers.providers.Provider): Promise<string>;
177
+ /**
178
+ * Transfer native MATIC (POL) to another address
179
+ */
180
+ transferMatic(to: string, amount: string): Promise<TransferResult>;
181
+ /**
182
+ * Transfer an ERC20 token to another address
183
+ */
184
+ transfer(token: string, to: string, amount: string): Promise<TransferResult>;
185
+ /**
186
+ * Transfer native USDC to another address
187
+ *
188
+ * ⚠️ WARNING: This transfers NATIVE USDC (0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359)
189
+ *
190
+ * For Polymarket CTF operations, you need USDC.e instead.
191
+ * Use transferUsdcE() for Polymarket CTF compatibility.
192
+ *
193
+ * @see transferUsdcE - For Polymarket CTF operations
194
+ */
195
+ transferUsdc(to: string, amount: string): Promise<TransferResult>;
196
+ /**
197
+ * Transfer USDC.e (bridged USDC) to another address
198
+ *
199
+ * ✅ This is the correct method for Polymarket CTF operations.
200
+ *
201
+ * Polymarket's Conditional Token Framework (CTF) only accepts
202
+ * USDC.e (0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174).
203
+ *
204
+ * If you're funding a wallet for CTF trading, use this method.
205
+ *
206
+ * @example
207
+ * ```typescript
208
+ * // Fund a session wallet for Polymarket trading
209
+ * await swapService.transferUsdcE(sessionWallet, '100');
210
+ *
211
+ * // The session wallet can now perform CTF operations
212
+ * await ctf.split(conditionId, '100');
213
+ * ```
214
+ */
215
+ transferUsdcE(to: string, amount: string): Promise<TransferResult>;
216
+ }
217
+ //# sourceMappingURL=swap-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap-service.d.ts","sourceRoot":"","sources":["../../src/services/swap-service.ts"],"names":[],"mappings":"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"}