@catalyst-team/poly-sdk 0.2.1 → 0.3.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 (97) hide show
  1. package/README.md +545 -812
  2. package/README.zh-CN.md +645 -342
  3. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts +12 -0
  4. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
  5. package/dist/__tests__/integration/arbitrage-service.integration.test.js +267 -0
  6. package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
  7. package/dist/__tests__/integration/data-api.integration.test.js +6 -3
  8. package/dist/__tests__/integration/data-api.integration.test.js.map +1 -1
  9. package/dist/__tests__/integration/market-service.integration.test.d.ts +10 -0
  10. package/dist/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
  11. package/dist/__tests__/integration/market-service.integration.test.js +173 -0
  12. package/dist/__tests__/integration/market-service.integration.test.js.map +1 -0
  13. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts +10 -0
  14. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
  15. package/dist/__tests__/integration/realtime-service-v2.integration.test.js +307 -0
  16. package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
  17. package/dist/__tests__/integration/trading-service.integration.test.d.ts +10 -0
  18. package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
  19. package/dist/__tests__/integration/trading-service.integration.test.js +58 -0
  20. package/dist/__tests__/integration/trading-service.integration.test.js.map +1 -0
  21. package/dist/clients/clob-api.d.ts +73 -0
  22. package/dist/clients/clob-api.d.ts.map +1 -1
  23. package/dist/clients/clob-api.js +60 -0
  24. package/dist/clients/clob-api.js.map +1 -1
  25. package/dist/clients/data-api.d.ts +319 -14
  26. package/dist/clients/data-api.d.ts.map +1 -1
  27. package/dist/clients/data-api.js +342 -15
  28. package/dist/clients/data-api.js.map +1 -1
  29. package/dist/clients/subgraph.d.ts +196 -0
  30. package/dist/clients/subgraph.d.ts.map +1 -0
  31. package/dist/clients/subgraph.js +332 -0
  32. package/dist/clients/subgraph.js.map +1 -0
  33. package/dist/clients/websocket-manager.d.ts +3 -0
  34. package/dist/clients/websocket-manager.d.ts.map +1 -1
  35. package/dist/clients/websocket-manager.js +10 -3
  36. package/dist/clients/websocket-manager.js.map +1 -1
  37. package/dist/core/cache.d.ts +1 -0
  38. package/dist/core/cache.d.ts.map +1 -1
  39. package/dist/core/cache.js +1 -0
  40. package/dist/core/cache.js.map +1 -1
  41. package/dist/core/errors.d.ts +2 -1
  42. package/dist/core/errors.d.ts.map +1 -1
  43. package/dist/core/errors.js +2 -0
  44. package/dist/core/errors.js.map +1 -1
  45. package/dist/core/rate-limiter.d.ts +2 -1
  46. package/dist/core/rate-limiter.d.ts.map +1 -1
  47. package/dist/core/rate-limiter.js +5 -0
  48. package/dist/core/rate-limiter.js.map +1 -1
  49. package/dist/core/types.d.ts +100 -12
  50. package/dist/core/types.d.ts.map +1 -1
  51. package/dist/core/types.js.map +1 -1
  52. package/dist/core/types.test.d.ts +7 -0
  53. package/dist/core/types.test.d.ts.map +1 -0
  54. package/dist/core/types.test.js +122 -0
  55. package/dist/core/types.test.js.map +1 -0
  56. package/dist/index.d.ts +76 -18
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +125 -132
  59. package/dist/index.js.map +1 -1
  60. package/dist/services/arbitrage-service.d.ts +3 -2
  61. package/dist/services/arbitrage-service.d.ts.map +1 -1
  62. package/dist/services/arbitrage-service.js +58 -40
  63. package/dist/services/arbitrage-service.js.map +1 -1
  64. package/dist/services/market-service.d.ts +108 -8
  65. package/dist/services/market-service.d.ts.map +1 -1
  66. package/dist/services/market-service.js +352 -36
  67. package/dist/services/market-service.js.map +1 -1
  68. package/dist/services/onchain-service.d.ts +309 -0
  69. package/dist/services/onchain-service.d.ts.map +1 -0
  70. package/dist/services/onchain-service.js +417 -0
  71. package/dist/services/onchain-service.js.map +1 -0
  72. package/dist/services/realtime-service-v2.d.ts +361 -0
  73. package/dist/services/realtime-service-v2.d.ts.map +1 -0
  74. package/dist/services/realtime-service-v2.js +840 -0
  75. package/dist/services/realtime-service-v2.js.map +1 -0
  76. package/dist/services/realtime-service.d.ts +17 -17
  77. package/dist/services/realtime-service.d.ts.map +1 -1
  78. package/dist/services/realtime-service.js +91 -59
  79. package/dist/services/realtime-service.js.map +1 -1
  80. package/dist/services/smart-money-service.d.ts +196 -0
  81. package/dist/services/smart-money-service.d.ts.map +1 -0
  82. package/dist/services/smart-money-service.js +358 -0
  83. package/dist/services/smart-money-service.js.map +1 -0
  84. package/dist/services/trading-service.d.ts +156 -0
  85. package/dist/services/trading-service.d.ts.map +1 -0
  86. package/dist/services/trading-service.js +356 -0
  87. package/dist/services/trading-service.js.map +1 -0
  88. package/dist/services/wallet-service.d.ts +183 -2
  89. package/dist/services/wallet-service.d.ts.map +1 -1
  90. package/dist/services/wallet-service.js +458 -1
  91. package/dist/services/wallet-service.js.map +1 -1
  92. package/dist/utils/price-utils.test.d.ts +5 -0
  93. package/dist/utils/price-utils.test.d.ts.map +1 -0
  94. package/dist/utils/price-utils.test.js +192 -0
  95. package/dist/utils/price-utils.test.js.map +1 -0
  96. package/package.json +4 -3
  97. package/README.en.md +0 -502
@@ -0,0 +1,417 @@
1
+ /**
2
+ * OnchainService - Unified interface for all on-chain operations
3
+ *
4
+ * Consolidates:
5
+ * - CTF operations (split, merge, redeem)
6
+ * - Authorization (ERC20/ERC1155 approvals)
7
+ * - Swaps (QuickSwap V3)
8
+ *
9
+ * This service provides a single entry point for all blockchain interactions
10
+ * required for Polymarket trading. It shares wallet/provider configuration
11
+ * across all underlying services.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const onchain = new OnchainService({
16
+ * privateKey: '0x...',
17
+ * rpcUrl: 'https://polygon-rpc.com', // optional
18
+ * });
19
+ *
20
+ * // Check if ready for trading
21
+ * const status = await onchain.checkReadyForCTF('100');
22
+ * if (!status.ready) {
23
+ * // Set up approvals
24
+ * await onchain.approveAll();
25
+ * }
26
+ *
27
+ * // Execute CTF operations
28
+ * await onchain.split(conditionId, '100');
29
+ * await onchain.merge(conditionId, '100');
30
+ *
31
+ * // Swap tokens
32
+ * await onchain.swap('MATIC', 'USDC_E', '10');
33
+ * ```
34
+ */
35
+ import { ethers } from 'ethers';
36
+ // Import underlying services
37
+ import { CTFClient, } from '../clients/ctf-client.js';
38
+ import { AuthorizationService, } from './authorization-service.js';
39
+ import { SwapService, } from './swap-service.js';
40
+ // ===== OnchainService =====
41
+ /**
42
+ * Unified service for all on-chain operations on Polymarket
43
+ *
44
+ * This service wraps:
45
+ * - CTFClient: Conditional Token Framework operations (split, merge, redeem)
46
+ * - AuthorizationService: ERC20 and ERC1155 approvals
47
+ * - SwapService: DEX swaps on Polygon via QuickSwap V3
48
+ *
49
+ * All services share the same wallet and provider configuration.
50
+ */
51
+ export class OnchainService {
52
+ wallet;
53
+ provider;
54
+ ctfClient;
55
+ authService;
56
+ swapService;
57
+ constructor(config) {
58
+ const rpcUrl = config.rpcUrl || 'https://polygon-rpc.com';
59
+ // Create shared provider and wallet
60
+ this.provider = new ethers.providers.JsonRpcProvider(rpcUrl);
61
+ this.wallet = new ethers.Wallet(config.privateKey, this.provider);
62
+ // Initialize CTFClient with config
63
+ const ctfConfig = {
64
+ privateKey: config.privateKey,
65
+ rpcUrl,
66
+ chainId: config.chainId,
67
+ gasPriceMultiplier: config.gasPriceMultiplier,
68
+ confirmations: config.confirmations,
69
+ txTimeout: config.txTimeout,
70
+ };
71
+ this.ctfClient = new CTFClient(ctfConfig);
72
+ // Initialize AuthorizationService with shared wallet
73
+ this.authService = new AuthorizationService(this.wallet, {
74
+ provider: this.provider,
75
+ });
76
+ // Initialize SwapService with shared wallet
77
+ this.swapService = new SwapService(this.wallet);
78
+ }
79
+ // ===== Utilities =====
80
+ /**
81
+ * Get the wallet address
82
+ */
83
+ getAddress() {
84
+ return this.wallet.address;
85
+ }
86
+ /**
87
+ * Get native MATIC balance
88
+ */
89
+ async getMaticBalance() {
90
+ const balance = await this.provider.getBalance(this.wallet.address);
91
+ return ethers.utils.formatEther(balance);
92
+ }
93
+ /**
94
+ * Get all token balances
95
+ */
96
+ async getTokenBalances() {
97
+ const balances = await this.swapService.getBalances();
98
+ const findBalance = (token) => {
99
+ const entry = balances.find(b => b.token === token);
100
+ return entry?.balance || '0';
101
+ };
102
+ return {
103
+ matic: findBalance('MATIC'),
104
+ usdc: findBalance('USDC'),
105
+ usdcE: findBalance('USDC_E'),
106
+ usdt: findBalance('USDT'),
107
+ dai: findBalance('DAI'),
108
+ weth: findBalance('WETH'),
109
+ wmatic: findBalance('WMATIC'),
110
+ };
111
+ }
112
+ // ===== Authorization =====
113
+ /**
114
+ * Check all ERC20 and ERC1155 allowances required for trading
115
+ *
116
+ * @returns Status of all allowances and whether trading is ready
117
+ */
118
+ async checkAllowances() {
119
+ return this.authService.checkAllowances();
120
+ }
121
+ /**
122
+ * Set up all required approvals for trading
123
+ *
124
+ * @returns Results of all approval transactions
125
+ */
126
+ async approveAll() {
127
+ return this.authService.approveAll();
128
+ }
129
+ /**
130
+ * Approve USDC spending for a specific contract
131
+ */
132
+ async approveUsdc(spenderAddress, amount = ethers.constants.MaxUint256) {
133
+ return this.authService.approveUsdc(spenderAddress, amount);
134
+ }
135
+ /**
136
+ * Set approval for an ERC1155 operator
137
+ */
138
+ async setErc1155Approval(operatorAddress, approved = true) {
139
+ return this.authService.setErc1155Approval(operatorAddress, approved);
140
+ }
141
+ // ===== CTF Operations =====
142
+ /**
143
+ * Split USDC into YES + NO tokens
144
+ *
145
+ * @param conditionId - Market condition ID
146
+ * @param amount - USDC amount (e.g., "100" for 100 USDC)
147
+ * @returns SplitResult with transaction details
148
+ */
149
+ async split(conditionId, amount) {
150
+ return this.ctfClient.split(conditionId, amount);
151
+ }
152
+ /**
153
+ * Merge YES + NO tokens back to USDC
154
+ *
155
+ * @param conditionId - Market condition ID
156
+ * @param amount - Number of token pairs to merge
157
+ * @returns MergeResult with transaction details
158
+ */
159
+ async merge(conditionId, amount) {
160
+ return this.ctfClient.merge(conditionId, amount);
161
+ }
162
+ /**
163
+ * Merge YES and NO tokens using explicit token IDs
164
+ *
165
+ * Use this for Polymarket CLOB markets where token IDs
166
+ * don't match the calculated position IDs.
167
+ */
168
+ async mergeByTokenIds(conditionId, tokenIds, amount) {
169
+ return this.ctfClient.mergeByTokenIds(conditionId, tokenIds, amount);
170
+ }
171
+ /**
172
+ * Redeem winning tokens after market resolution (Standard CTF)
173
+ *
174
+ * WARNING: Use redeemByTokenIds for Polymarket CLOB markets.
175
+ */
176
+ async redeem(conditionId, outcome) {
177
+ return this.ctfClient.redeem(conditionId, outcome);
178
+ }
179
+ /**
180
+ * Redeem winning tokens using Polymarket token IDs (Polymarket CLOB)
181
+ *
182
+ * This is the correct method for Polymarket CLOB markets.
183
+ */
184
+ async redeemByTokenIds(conditionId, tokenIds, outcome) {
185
+ return this.ctfClient.redeemByTokenIds(conditionId, tokenIds, outcome);
186
+ }
187
+ // ===== Balances =====
188
+ /**
189
+ * Get USDC.e (bridged USDC) balance - the token used by Polymarket CTF
190
+ */
191
+ async getUsdcBalance() {
192
+ return this.ctfClient.getUsdcBalance();
193
+ }
194
+ /**
195
+ * Get native USDC balance (not compatible with CTF)
196
+ */
197
+ async getNativeUsdcBalance() {
198
+ return this.ctfClient.getNativeUsdcBalance();
199
+ }
200
+ /**
201
+ * Get token balances for a market using calculated position IDs
202
+ *
203
+ * @deprecated Use getPositionBalanceByTokenIds for CLOB markets
204
+ */
205
+ async getPositionBalance(conditionId) {
206
+ return this.ctfClient.getPositionBalance(conditionId);
207
+ }
208
+ /**
209
+ * Get token balances using CLOB API token IDs
210
+ *
211
+ * This is the recommended method for checking balances when working with
212
+ * Polymarket CLOB markets.
213
+ */
214
+ async getPositionBalanceByTokenIds(conditionId, tokenIds) {
215
+ return this.ctfClient.getPositionBalanceByTokenIds(conditionId, tokenIds);
216
+ }
217
+ /**
218
+ * Check if wallet is ready for CTF trading operations
219
+ *
220
+ * Combines CTF readiness check with authorization status.
221
+ */
222
+ async checkReadyForCTF(amount) {
223
+ // Check CTF readiness (balances)
224
+ const ctfStatus = await this.ctfClient.checkReadyForCTF(amount);
225
+ // Check authorization status
226
+ const authStatus = await this.authService.checkAllowances();
227
+ // Combine issues
228
+ const issues = [];
229
+ if (ctfStatus.suggestion) {
230
+ issues.push(ctfStatus.suggestion);
231
+ }
232
+ issues.push(...authStatus.issues);
233
+ return {
234
+ ready: ctfStatus.ready && authStatus.tradingReady,
235
+ usdcEBalance: ctfStatus.usdcEBalance,
236
+ nativeUsdcBalance: ctfStatus.nativeUsdcBalance,
237
+ maticBalance: ctfStatus.maticBalance,
238
+ tradingReady: authStatus.tradingReady,
239
+ issues,
240
+ suggestion: ctfStatus.suggestion,
241
+ };
242
+ }
243
+ /**
244
+ * Check if wallet has sufficient tokens for merge
245
+ */
246
+ async canMerge(conditionId, amount) {
247
+ return this.ctfClient.canMerge(conditionId, amount);
248
+ }
249
+ /**
250
+ * Check if wallet has sufficient tokens for merge using CLOB token IDs
251
+ */
252
+ async canMergeWithTokenIds(conditionId, tokenIds, amount) {
253
+ return this.ctfClient.canMergeWithTokenIds(conditionId, tokenIds, amount);
254
+ }
255
+ /**
256
+ * Check if wallet has sufficient USDC for split
257
+ */
258
+ async canSplit(amount) {
259
+ return this.ctfClient.canSplit(amount);
260
+ }
261
+ // ===== Market Resolution =====
262
+ /**
263
+ * Check if a market is resolved and get payout info
264
+ */
265
+ async getMarketResolution(conditionId) {
266
+ return this.ctfClient.getMarketResolution(conditionId);
267
+ }
268
+ // ===== Gas Estimation =====
269
+ /**
270
+ * Get detailed gas estimate for a split operation
271
+ */
272
+ async estimateSplitGas(conditionId, amount) {
273
+ return this.ctfClient.getDetailedSplitGasEstimate(conditionId, amount);
274
+ }
275
+ /**
276
+ * Get detailed gas estimate for a merge operation
277
+ */
278
+ async estimateMergeGas(conditionId, amount) {
279
+ return this.ctfClient.getDetailedMergeGasEstimate(conditionId, amount);
280
+ }
281
+ /**
282
+ * Get current gas price info
283
+ */
284
+ async getGasPrice() {
285
+ return this.ctfClient.getGasPrice();
286
+ }
287
+ // ===== Transaction Monitoring =====
288
+ /**
289
+ * Get transaction status with detailed info
290
+ */
291
+ async getTransactionStatus(txHash) {
292
+ return this.ctfClient.getTransactionStatus(txHash);
293
+ }
294
+ /**
295
+ * Wait for transaction confirmation with timeout
296
+ */
297
+ async waitForTransaction(txHash, confirmations) {
298
+ return this.ctfClient.waitForTransaction(txHash, confirmations);
299
+ }
300
+ // ===== Swaps =====
301
+ /**
302
+ * Get a quote for a swap (checks if route is possible)
303
+ */
304
+ async getSwapQuote(tokenIn, tokenOut, amount) {
305
+ return this.swapService.getQuote(tokenIn, tokenOut, amount);
306
+ }
307
+ /**
308
+ * Execute a token swap using QuickSwap V3
309
+ *
310
+ * @param tokenIn - Token to swap from (e.g., 'MATIC', 'USDC', 'USDT')
311
+ * @param tokenOut - Token to swap to (e.g., 'USDC_E', 'WETH')
312
+ * @param amount - Amount to swap in token units
313
+ * @param slippage - Slippage tolerance in percent (default: 0.5)
314
+ */
315
+ async swap(tokenIn, tokenOut, amount, slippage) {
316
+ return this.swapService.swap(tokenIn, tokenOut, amount, { slippage });
317
+ }
318
+ /**
319
+ * Swap any supported token to USDC.e and deposit to Polymarket
320
+ *
321
+ * This is a convenience method for converting tokens to the USDC.e
322
+ * format required by Polymarket CTF operations.
323
+ */
324
+ async swapAndDeposit(token, amount, slippage) {
325
+ return this.swapService.swapToUsdc(token, amount, {
326
+ usdcType: 'USDC_E',
327
+ slippage,
328
+ });
329
+ }
330
+ /**
331
+ * Get all available liquidity pools on QuickSwap V3
332
+ */
333
+ async getAvailablePools() {
334
+ return this.swapService.getAvailablePools();
335
+ }
336
+ /**
337
+ * Check if a pool exists for a token pair
338
+ */
339
+ async checkPool(tokenA, tokenB) {
340
+ return this.swapService.checkPool(tokenA, tokenB);
341
+ }
342
+ // ===== Token Transfers =====
343
+ /**
344
+ * Transfer an ERC20 token to another address
345
+ */
346
+ async transfer(token, to, amount) {
347
+ return this.swapService.transfer(token, to, amount);
348
+ }
349
+ /**
350
+ * Transfer native MATIC to another address
351
+ */
352
+ async transferMatic(to, amount) {
353
+ return this.swapService.transferMatic(to, amount);
354
+ }
355
+ /**
356
+ * Transfer native USDC to another address
357
+ *
358
+ * WARNING: This transfers NATIVE USDC, not USDC.e.
359
+ * For Polymarket CTF operations, use transferUsdcE() instead.
360
+ */
361
+ async transferUsdc(to, amount) {
362
+ return this.swapService.transferUsdc(to, amount);
363
+ }
364
+ /**
365
+ * Transfer USDC.e (bridged USDC) to another address
366
+ *
367
+ * This is the correct method for Polymarket CTF operations.
368
+ */
369
+ async transferUsdcE(to, amount) {
370
+ return this.swapService.transferUsdcE(to, amount);
371
+ }
372
+ // ===== MATIC Wrapping =====
373
+ /**
374
+ * Wrap native MATIC to WMATIC
375
+ */
376
+ async wrapMatic(amount) {
377
+ return this.swapService.wrapMatic(amount);
378
+ }
379
+ /**
380
+ * Unwrap WMATIC to native MATIC
381
+ */
382
+ async unwrapMatic(amount) {
383
+ return this.swapService.unwrapMatic(amount);
384
+ }
385
+ // ===== Advanced Access =====
386
+ /**
387
+ * Get the underlying CTFClient for advanced operations
388
+ */
389
+ getCTFClient() {
390
+ return this.ctfClient;
391
+ }
392
+ /**
393
+ * Get the underlying AuthorizationService for advanced operations
394
+ */
395
+ getAuthorizationService() {
396
+ return this.authService;
397
+ }
398
+ /**
399
+ * Get the underlying SwapService for advanced operations
400
+ */
401
+ getSwapService() {
402
+ return this.swapService;
403
+ }
404
+ /**
405
+ * Get the shared wallet instance
406
+ */
407
+ getWallet() {
408
+ return this.wallet;
409
+ }
410
+ /**
411
+ * Get the shared provider instance
412
+ */
413
+ getProvider() {
414
+ return this.provider;
415
+ }
416
+ }
417
+ //# sourceMappingURL=onchain-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onchain-service.js","sourceRoot":"","sources":["../../src/services/onchain-service.ts"],"names":[],"mappings":"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"}