@catalyst-team/poly-sdk 0.1.1 → 0.2.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 (191) hide show
  1. package/LICENSE +1 -1
  2. package/README.en.md +502 -0
  3. package/README.md +6 -1
  4. package/README.zh-CN.md +502 -0
  5. package/dist/__tests__/clob-api.test.d.ts +5 -0
  6. package/dist/__tests__/clob-api.test.d.ts.map +1 -0
  7. package/dist/__tests__/clob-api.test.js +240 -0
  8. package/dist/__tests__/clob-api.test.js.map +1 -0
  9. package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
  10. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
  11. package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
  12. package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
  13. package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
  14. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
  15. package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
  16. package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
  17. package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
  18. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
  19. package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
  20. package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
  21. package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
  22. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
  23. package/dist/__tests__/integration/data-api.integration.test.js +161 -0
  24. package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
  25. package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
  26. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
  27. package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
  28. package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
  29. package/dist/__tests__/test-utils.d.ts +92 -0
  30. package/dist/__tests__/test-utils.d.ts.map +1 -0
  31. package/dist/__tests__/test-utils.js +143 -0
  32. package/dist/__tests__/test-utils.js.map +1 -0
  33. package/dist/clients/bridge-client.d.ts +388 -0
  34. package/dist/clients/bridge-client.d.ts.map +1 -0
  35. package/dist/clients/bridge-client.js +587 -0
  36. package/dist/clients/bridge-client.js.map +1 -0
  37. package/dist/clients/clob-api.d.ts +318 -0
  38. package/dist/clients/clob-api.d.ts.map +1 -0
  39. package/dist/clients/clob-api.js +388 -0
  40. package/dist/clients/clob-api.js.map +1 -0
  41. package/dist/clients/ctf-client.d.ts +473 -0
  42. package/dist/clients/ctf-client.d.ts.map +1 -0
  43. package/dist/clients/ctf-client.js +915 -0
  44. package/dist/clients/ctf-client.js.map +1 -0
  45. package/dist/clients/data-api.d.ts +134 -0
  46. package/dist/clients/data-api.d.ts.map +1 -0
  47. package/dist/clients/data-api.js +265 -0
  48. package/dist/clients/data-api.js.map +1 -0
  49. package/dist/clients/gamma-api.d.ts +401 -0
  50. package/dist/clients/gamma-api.d.ts.map +1 -0
  51. package/dist/clients/gamma-api.js +352 -0
  52. package/dist/clients/gamma-api.js.map +1 -0
  53. package/dist/clients/trading-client.d.ts +252 -0
  54. package/dist/clients/trading-client.d.ts.map +1 -0
  55. package/dist/clients/trading-client.js +543 -0
  56. package/dist/clients/trading-client.js.map +1 -0
  57. package/dist/clients/websocket-manager.d.ts +100 -0
  58. package/dist/clients/websocket-manager.d.ts.map +1 -0
  59. package/dist/clients/websocket-manager.js +193 -0
  60. package/dist/clients/websocket-manager.js.map +1 -0
  61. package/dist/core/cache-adapter-bridge.d.ts +36 -0
  62. package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
  63. package/dist/core/cache-adapter-bridge.js +81 -0
  64. package/dist/core/cache-adapter-bridge.js.map +1 -0
  65. package/dist/core/cache.d.ts +40 -0
  66. package/dist/core/cache.d.ts.map +1 -0
  67. package/dist/core/cache.js +71 -0
  68. package/dist/core/cache.js.map +1 -0
  69. package/dist/core/errors.d.ts +38 -0
  70. package/dist/core/errors.d.ts.map +1 -0
  71. package/dist/core/errors.js +84 -0
  72. package/dist/core/errors.js.map +1 -0
  73. package/dist/core/rate-limiter.d.ts +31 -0
  74. package/dist/core/rate-limiter.d.ts.map +1 -0
  75. package/dist/core/rate-limiter.js +70 -0
  76. package/dist/core/rate-limiter.js.map +1 -0
  77. package/{src/core/types.ts → dist/core/types.d.ts} +169 -215
  78. package/dist/core/types.d.ts.map +1 -0
  79. package/dist/core/types.js +19 -0
  80. package/dist/core/types.js.map +1 -0
  81. package/dist/core/unified-cache.d.ts +63 -0
  82. package/dist/core/unified-cache.d.ts.map +1 -0
  83. package/dist/core/unified-cache.js +114 -0
  84. package/dist/core/unified-cache.js.map +1 -0
  85. package/dist/index.d.ts +93 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +255 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/services/arbitrage-service.d.ts +408 -0
  90. package/dist/services/arbitrage-service.d.ts.map +1 -0
  91. package/dist/services/arbitrage-service.js +1422 -0
  92. package/dist/services/arbitrage-service.js.map +1 -0
  93. package/dist/services/authorization-service.d.ts +97 -0
  94. package/dist/services/authorization-service.d.ts.map +1 -0
  95. package/dist/services/authorization-service.js +279 -0
  96. package/dist/services/authorization-service.js.map +1 -0
  97. package/dist/services/market-service.d.ts +108 -0
  98. package/dist/services/market-service.d.ts.map +1 -0
  99. package/dist/services/market-service.js +458 -0
  100. package/dist/services/market-service.js.map +1 -0
  101. package/dist/services/realtime-service.d.ts +82 -0
  102. package/dist/services/realtime-service.d.ts.map +1 -0
  103. package/dist/services/realtime-service.js +150 -0
  104. package/dist/services/realtime-service.js.map +1 -0
  105. package/dist/services/swap-service.d.ts +217 -0
  106. package/dist/services/swap-service.d.ts.map +1 -0
  107. package/dist/services/swap-service.js +695 -0
  108. package/dist/services/swap-service.js.map +1 -0
  109. package/dist/services/wallet-service.d.ts +94 -0
  110. package/dist/services/wallet-service.d.ts.map +1 -0
  111. package/dist/services/wallet-service.js +173 -0
  112. package/dist/services/wallet-service.js.map +1 -0
  113. package/dist/utils/price-utils.d.ts +153 -0
  114. package/dist/utils/price-utils.d.ts.map +1 -0
  115. package/dist/utils/price-utils.js +236 -0
  116. package/dist/utils/price-utils.js.map +1 -0
  117. package/package.json +7 -2
  118. package/docs/00-design.md +0 -760
  119. package/docs/02-API.md +0 -1148
  120. package/docs/arbitrage.md +0 -754
  121. package/docs/reports/smart-money-analysis-2025-12-23-cn.md +0 -840
  122. package/examples/01-basic-usage.ts +0 -68
  123. package/examples/02-smart-money.ts +0 -95
  124. package/examples/03-market-analysis.ts +0 -108
  125. package/examples/04-kline-aggregation.ts +0 -158
  126. package/examples/05-follow-wallet-strategy.ts +0 -156
  127. package/examples/06-services-demo.ts +0 -124
  128. package/examples/07-realtime-websocket.ts +0 -117
  129. package/examples/08-trading-orders.ts +0 -278
  130. package/examples/09-rewards-tracking.ts +0 -187
  131. package/examples/10-ctf-operations.ts +0 -336
  132. package/examples/11-live-arbitrage-scan.ts +0 -221
  133. package/examples/12-trending-arb-monitor.ts +0 -406
  134. package/examples/13-arbitrage-service.ts +0 -211
  135. package/examples/README.md +0 -179
  136. package/scripts/README.md +0 -163
  137. package/scripts/approvals/approve-erc1155.ts +0 -129
  138. package/scripts/approvals/approve-neg-risk-erc1155.ts +0 -149
  139. package/scripts/approvals/approve-neg-risk.ts +0 -102
  140. package/scripts/approvals/check-all-allowances.ts +0 -150
  141. package/scripts/approvals/check-allowance.ts +0 -129
  142. package/scripts/approvals/check-ctf-approval.ts +0 -158
  143. package/scripts/arb/faze-bo3-arb.ts +0 -385
  144. package/scripts/arb/settle-position.ts +0 -190
  145. package/scripts/arb/token-rebalancer.ts +0 -420
  146. package/scripts/datas/001-report.md +0 -486
  147. package/scripts/datas/clone-modal-screenshot.png +0 -0
  148. package/scripts/deposit/deposit-native-usdc.ts +0 -179
  149. package/scripts/deposit/deposit-usdc.ts +0 -155
  150. package/scripts/deposit/swap-usdc-to-usdce.ts +0 -375
  151. package/scripts/research/research-markets.ts +0 -166
  152. package/scripts/trading/check-orders.ts +0 -50
  153. package/scripts/trading/sell-nvidia-positions.ts +0 -206
  154. package/scripts/trading/test-order.ts +0 -172
  155. package/scripts/verify/test-approve-trading.ts +0 -98
  156. package/scripts/verify/test-provider-fix.ts +0 -43
  157. package/scripts/verify/test-search-mcp.ts +0 -113
  158. package/scripts/verify/verify-all-apis.ts +0 -160
  159. package/scripts/wallet/check-wallet-balances.ts +0 -75
  160. package/scripts/wallet/test-wallet-operations.ts +0 -191
  161. package/scripts/wallet/verify-wallet-tools.ts +0 -124
  162. package/src/__tests__/clob-api.test.ts +0 -301
  163. package/src/__tests__/integration/bridge-client.integration.test.ts +0 -314
  164. package/src/__tests__/integration/clob-api.integration.test.ts +0 -218
  165. package/src/__tests__/integration/ctf-client.integration.test.ts +0 -331
  166. package/src/__tests__/integration/data-api.integration.test.ts +0 -194
  167. package/src/__tests__/integration/gamma-api.integration.test.ts +0 -206
  168. package/src/__tests__/test-utils.ts +0 -170
  169. package/src/clients/bridge-client.ts +0 -841
  170. package/src/clients/clob-api.ts +0 -629
  171. package/src/clients/ctf-client.ts +0 -1216
  172. package/src/clients/data-api.ts +0 -469
  173. package/src/clients/gamma-api.ts +0 -597
  174. package/src/clients/trading-client.ts +0 -749
  175. package/src/clients/websocket-manager.ts +0 -267
  176. package/src/core/cache-adapter-bridge.ts +0 -94
  177. package/src/core/cache.ts +0 -85
  178. package/src/core/errors.ts +0 -117
  179. package/src/core/rate-limiter.ts +0 -74
  180. package/src/core/unified-cache.ts +0 -153
  181. package/src/index.ts +0 -461
  182. package/src/services/arbitrage-service.ts +0 -1807
  183. package/src/services/authorization-service.ts +0 -357
  184. package/src/services/market-service.ts +0 -544
  185. package/src/services/realtime-service.ts +0 -196
  186. package/src/services/swap-service.ts +0 -896
  187. package/src/services/wallet-service.ts +0 -259
  188. package/src/utils/price-utils.ts +0 -307
  189. package/tsconfig.json +0 -8
  190. package/vitest.config.ts +0 -19
  191. package/vitest.integration.config.ts +0 -18
@@ -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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"}