@catalyst-team/poly-sdk 0.2.0 → 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 (197) hide show
  1. package/LICENSE +1 -1
  2. package/README.en.md +8 -44
  3. package/README.md +5 -3
  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/arb/test-plan.md +0 -387
  121. package/docs/arb/test-results.md +0 -336
  122. package/docs/arbitrage.md +0 -754
  123. package/docs/reports/smart-money-analysis-2025-12-23-cn.md +0 -840
  124. package/examples/01-basic-usage.ts +0 -68
  125. package/examples/02-smart-money.ts +0 -95
  126. package/examples/03-market-analysis.ts +0 -108
  127. package/examples/04-kline-aggregation.ts +0 -158
  128. package/examples/05-follow-wallet-strategy.ts +0 -156
  129. package/examples/06-services-demo.ts +0 -124
  130. package/examples/07-realtime-websocket.ts +0 -117
  131. package/examples/08-trading-orders.ts +0 -278
  132. package/examples/09-rewards-tracking.ts +0 -187
  133. package/examples/10-ctf-operations.ts +0 -336
  134. package/examples/11-live-arbitrage-scan.ts +0 -221
  135. package/examples/12-trending-arb-monitor.ts +0 -406
  136. package/examples/13-arbitrage-service.ts +0 -211
  137. package/examples/README.md +0 -179
  138. package/scripts/README.md +0 -163
  139. package/scripts/approvals/approve-erc1155.ts +0 -129
  140. package/scripts/approvals/approve-neg-risk-erc1155.ts +0 -149
  141. package/scripts/approvals/approve-neg-risk.ts +0 -102
  142. package/scripts/approvals/check-all-allowances.ts +0 -150
  143. package/scripts/approvals/check-allowance.ts +0 -129
  144. package/scripts/approvals/check-ctf-approval.ts +0 -158
  145. package/scripts/arb/faze-bo3-arb.ts +0 -385
  146. package/scripts/arb/settle-position.ts +0 -190
  147. package/scripts/arb/token-rebalancer.ts +0 -420
  148. package/scripts/arb-tests/01-unit-tests.ts +0 -495
  149. package/scripts/arb-tests/02-integration-tests.ts +0 -412
  150. package/scripts/arb-tests/03-e2e-tests.ts +0 -503
  151. package/scripts/arb-tests/README.md +0 -109
  152. package/scripts/datas/001-report.md +0 -486
  153. package/scripts/datas/clone-modal-screenshot.png +0 -0
  154. package/scripts/deposit/deposit-native-usdc.ts +0 -179
  155. package/scripts/deposit/deposit-usdc.ts +0 -155
  156. package/scripts/deposit/swap-usdc-to-usdce.ts +0 -375
  157. package/scripts/research/research-markets.ts +0 -166
  158. package/scripts/trading/check-orders.ts +0 -50
  159. package/scripts/trading/sell-nvidia-positions.ts +0 -206
  160. package/scripts/trading/test-order.ts +0 -172
  161. package/scripts/verify/test-approve-trading.ts +0 -98
  162. package/scripts/verify/test-provider-fix.ts +0 -43
  163. package/scripts/verify/test-search-mcp.ts +0 -113
  164. package/scripts/verify/verify-all-apis.ts +0 -160
  165. package/scripts/wallet/check-wallet-balances.ts +0 -75
  166. package/scripts/wallet/test-wallet-operations.ts +0 -191
  167. package/scripts/wallet/verify-wallet-tools.ts +0 -124
  168. package/src/__tests__/clob-api.test.ts +0 -301
  169. package/src/__tests__/integration/bridge-client.integration.test.ts +0 -314
  170. package/src/__tests__/integration/clob-api.integration.test.ts +0 -218
  171. package/src/__tests__/integration/ctf-client.integration.test.ts +0 -331
  172. package/src/__tests__/integration/data-api.integration.test.ts +0 -194
  173. package/src/__tests__/integration/gamma-api.integration.test.ts +0 -206
  174. package/src/__tests__/test-utils.ts +0 -170
  175. package/src/clients/bridge-client.ts +0 -841
  176. package/src/clients/clob-api.ts +0 -629
  177. package/src/clients/ctf-client.ts +0 -1216
  178. package/src/clients/data-api.ts +0 -469
  179. package/src/clients/gamma-api.ts +0 -597
  180. package/src/clients/trading-client.ts +0 -749
  181. package/src/clients/websocket-manager.ts +0 -267
  182. package/src/core/cache-adapter-bridge.ts +0 -94
  183. package/src/core/cache.ts +0 -85
  184. package/src/core/errors.ts +0 -117
  185. package/src/core/rate-limiter.ts +0 -74
  186. package/src/core/unified-cache.ts +0 -153
  187. package/src/index.ts +0 -461
  188. package/src/services/arbitrage-service.ts +0 -1807
  189. package/src/services/authorization-service.ts +0 -357
  190. package/src/services/market-service.ts +0 -544
  191. package/src/services/realtime-service.ts +0 -196
  192. package/src/services/swap-service.ts +0 -896
  193. package/src/services/wallet-service.ts +0 -259
  194. package/src/utils/price-utils.ts +0 -307
  195. package/tsconfig.json +0 -8
  196. package/vitest.config.ts +0 -19
  197. package/vitest.integration.config.ts +0 -18
@@ -0,0 +1,408 @@
1
+ /**
2
+ * ArbitrageService - Real-time Arbitrage Detection and Execution
3
+ *
4
+ * Uses WebSocket for real-time orderbook monitoring and automatically
5
+ * detects arbitrage opportunities in Polymarket binary markets.
6
+ *
7
+ * Strategy:
8
+ * - Long Arb: Buy YES + NO (effective cost < $1) → Merge → $1 USDC
9
+ * - Short Arb: Sell pre-held YES + NO tokens (effective revenue > $1)
10
+ *
11
+ * Features:
12
+ * - Real-time orderbook monitoring via WebSocket
13
+ * - Automatic arbitrage detection using effective prices
14
+ * - Configurable profit threshold and trade sizes
15
+ * - Auto-execute mode or event-based manual mode
16
+ * - Balance tracking and position management
17
+ *
18
+ * Based on: scripts/arb/faze-bo3-arb.ts
19
+ * Docs: docs/arbitrage.md
20
+ */
21
+ import { EventEmitter } from 'events';
22
+ export interface ArbitrageMarketConfig {
23
+ /** Market name for logging */
24
+ name: string;
25
+ /** Condition ID */
26
+ conditionId: string;
27
+ /** YES token ID from CLOB API */
28
+ yesTokenId: string;
29
+ /** NO token ID from CLOB API */
30
+ noTokenId: string;
31
+ /** Outcome names [YES, NO] */
32
+ outcomes?: [string, string];
33
+ }
34
+ export interface ArbitrageServiceConfig {
35
+ /** Private key for trading (optional for monitor-only mode) */
36
+ privateKey?: string;
37
+ /** RPC URL for CTF operations */
38
+ rpcUrl?: string;
39
+ /** Minimum profit threshold (default: 0.005 = 0.5%) */
40
+ profitThreshold?: number;
41
+ /** Minimum trade size in USDC (default: 5) */
42
+ minTradeSize?: number;
43
+ /** Maximum single trade size in USDC (default: 100) */
44
+ maxTradeSize?: number;
45
+ /** Minimum token reserve for short arb (default: 10) */
46
+ minTokenReserve?: number;
47
+ /** Auto-execute mode (default: false) */
48
+ autoExecute?: boolean;
49
+ /** Enable logging (default: true) */
50
+ enableLogging?: boolean;
51
+ /** Cooldown between executions in ms (default: 5000) */
52
+ executionCooldown?: number;
53
+ /** Enable auto-rebalancing (default: false) */
54
+ enableRebalancer?: boolean;
55
+ /** Minimum USDC ratio 0-1 (default: 0.2 = 20%) - Split if below */
56
+ minUsdcRatio?: number;
57
+ /** Maximum USDC ratio 0-1 (default: 0.8 = 80%) - Merge if above */
58
+ maxUsdcRatio?: number;
59
+ /** Target USDC ratio when rebalancing (default: 0.5 = 50%) */
60
+ targetUsdcRatio?: number;
61
+ /** Max YES/NO imbalance before auto-fix (default: 5 tokens) */
62
+ imbalanceThreshold?: number;
63
+ /** Rebalance check interval in ms (default: 10000) */
64
+ rebalanceInterval?: number;
65
+ /** Minimum cooldown between rebalance actions in ms (default: 30000) */
66
+ rebalanceCooldown?: number;
67
+ /** Size safety factor 0-1 (default: 0.8) - use only 80% of orderbook depth to prevent partial fills */
68
+ sizeSafetyFactor?: number;
69
+ /** Auto-fix imbalance after failed execution (default: true) */
70
+ autoFixImbalance?: boolean;
71
+ }
72
+ export interface RebalanceAction {
73
+ type: 'split' | 'merge' | 'sell_yes' | 'sell_no' | 'none';
74
+ amount: number;
75
+ reason: string;
76
+ priority: number;
77
+ }
78
+ export interface RebalanceResult {
79
+ success: boolean;
80
+ action: RebalanceAction;
81
+ txHash?: string;
82
+ error?: string;
83
+ }
84
+ export interface SettleResult {
85
+ market: ArbitrageMarketConfig;
86
+ yesBalance: number;
87
+ noBalance: number;
88
+ pairedTokens: number;
89
+ unpairedYes: number;
90
+ unpairedNo: number;
91
+ merged: boolean;
92
+ mergeAmount?: number;
93
+ mergeTxHash?: string;
94
+ usdcRecovered?: number;
95
+ error?: string;
96
+ }
97
+ export interface ClearPositionResult {
98
+ market: ArbitrageMarketConfig;
99
+ marketStatus: 'active' | 'resolved' | 'unknown';
100
+ yesBalance: number;
101
+ noBalance: number;
102
+ actions: ClearAction[];
103
+ totalUsdcRecovered: number;
104
+ success: boolean;
105
+ error?: string;
106
+ }
107
+ export interface ClearAction {
108
+ type: 'merge' | 'sell_yes' | 'sell_no' | 'redeem';
109
+ amount: number;
110
+ usdcResult: number;
111
+ txHash?: string;
112
+ success: boolean;
113
+ error?: string;
114
+ }
115
+ export interface ScanCriteria {
116
+ /** Minimum 24h volume in USDC (default: 1000) */
117
+ minVolume24h?: number;
118
+ /** Maximum 24h volume (optional) */
119
+ maxVolume24h?: number;
120
+ /** Keywords to filter markets (optional) */
121
+ keywords?: string[];
122
+ /** Maximum number of markets to scan (default: 100) */
123
+ limit?: number;
124
+ }
125
+ export interface ScanResult {
126
+ /** Market config ready to use with start() */
127
+ market: ArbitrageMarketConfig;
128
+ /** Best arbitrage type */
129
+ arbType: 'long' | 'short' | 'none';
130
+ /** Profit rate (e.g., 0.01 = 1%) */
131
+ profitRate: number;
132
+ /** Profit percentage */
133
+ profitPercent: number;
134
+ /** Effective prices */
135
+ effectivePrices: {
136
+ buyYes: number;
137
+ buyNo: number;
138
+ sellYes: number;
139
+ sellNo: number;
140
+ longCost: number;
141
+ shortRevenue: number;
142
+ };
143
+ /** 24h volume */
144
+ volume24h: number;
145
+ /** Available size on orderbook */
146
+ availableSize: number;
147
+ /** Score 0-100 */
148
+ score: number;
149
+ /** Description */
150
+ description: string;
151
+ }
152
+ export interface OrderbookState {
153
+ yesBids: Array<{
154
+ price: number;
155
+ size: number;
156
+ }>;
157
+ yesAsks: Array<{
158
+ price: number;
159
+ size: number;
160
+ }>;
161
+ noBids: Array<{
162
+ price: number;
163
+ size: number;
164
+ }>;
165
+ noAsks: Array<{
166
+ price: number;
167
+ size: number;
168
+ }>;
169
+ lastUpdate: number;
170
+ }
171
+ export interface BalanceState {
172
+ usdc: number;
173
+ yesTokens: number;
174
+ noTokens: number;
175
+ lastUpdate: number;
176
+ }
177
+ export interface ArbitrageOpportunity {
178
+ type: 'long' | 'short';
179
+ /** Profit rate (0.01 = 1%) */
180
+ profitRate: number;
181
+ /** Profit in percentage */
182
+ profitPercent: number;
183
+ /** Effective buy/sell prices */
184
+ effectivePrices: {
185
+ buyYes: number;
186
+ buyNo: number;
187
+ sellYes: number;
188
+ sellNo: number;
189
+ };
190
+ /** Maximum executable size based on orderbook depth */
191
+ maxOrderbookSize: number;
192
+ /** Maximum executable size based on balance */
193
+ maxBalanceSize: number;
194
+ /** Recommended trade size */
195
+ recommendedSize: number;
196
+ /** Estimated profit in USDC */
197
+ estimatedProfit: number;
198
+ /** Description */
199
+ description: string;
200
+ /** Timestamp */
201
+ timestamp: number;
202
+ }
203
+ export interface ArbitrageExecutionResult {
204
+ success: boolean;
205
+ type: 'long' | 'short';
206
+ size: number;
207
+ profit: number;
208
+ txHashes: string[];
209
+ error?: string;
210
+ executionTimeMs: number;
211
+ }
212
+ export interface ArbitrageServiceEvents {
213
+ opportunity: (opportunity: ArbitrageOpportunity) => void;
214
+ execution: (result: ArbitrageExecutionResult) => void;
215
+ balanceUpdate: (balance: BalanceState) => void;
216
+ orderbookUpdate: (orderbook: OrderbookState) => void;
217
+ rebalance: (result: RebalanceResult) => void;
218
+ settle: (result: SettleResult) => void;
219
+ error: (error: Error) => void;
220
+ started: (market: ArbitrageMarketConfig) => void;
221
+ stopped: () => void;
222
+ }
223
+ export declare class ArbitrageService extends EventEmitter {
224
+ private wsManager;
225
+ private ctf;
226
+ private tradingClient;
227
+ private rateLimiter;
228
+ private market;
229
+ private config;
230
+ private orderbook;
231
+ private balance;
232
+ private isExecuting;
233
+ private lastExecutionTime;
234
+ private lastRebalanceTime;
235
+ private balanceUpdateInterval;
236
+ private rebalanceInterval;
237
+ private isRunning;
238
+ private totalCapital;
239
+ private stats;
240
+ constructor(config?: ArbitrageServiceConfig);
241
+ /**
242
+ * Start monitoring a market for arbitrage opportunities
243
+ */
244
+ start(market: ArbitrageMarketConfig): Promise<void>;
245
+ /**
246
+ * Stop monitoring
247
+ */
248
+ stop(): Promise<void>;
249
+ /**
250
+ * Get current orderbook state
251
+ */
252
+ getOrderbook(): OrderbookState;
253
+ /**
254
+ * Get current balance state
255
+ */
256
+ getBalance(): BalanceState;
257
+ /**
258
+ * Get statistics
259
+ */
260
+ getStats(): {
261
+ runningTimeMs: number;
262
+ opportunitiesDetected: number;
263
+ executionsAttempted: number;
264
+ executionsSucceeded: number;
265
+ totalProfit: number;
266
+ startTime: number;
267
+ };
268
+ /**
269
+ * Check for arbitrage opportunity based on current orderbook
270
+ */
271
+ checkOpportunity(): ArbitrageOpportunity | null;
272
+ /**
273
+ * Manually execute an arbitrage opportunity
274
+ */
275
+ execute(opportunity: ArbitrageOpportunity): Promise<ArbitrageExecutionResult>;
276
+ /**
277
+ * Calculate recommended rebalance action based on current state
278
+ */
279
+ calculateRebalanceAction(): RebalanceAction;
280
+ /**
281
+ * Execute a rebalance action
282
+ */
283
+ rebalance(action?: RebalanceAction): Promise<RebalanceResult>;
284
+ /**
285
+ * Settle a market position - merge paired tokens to recover USDC
286
+ * @param market Market to settle (defaults to current market)
287
+ * @param execute If true, execute the merge. If false, just return info.
288
+ */
289
+ settlePosition(market?: ArbitrageMarketConfig, execute?: boolean): Promise<SettleResult>;
290
+ /**
291
+ * Settle multiple markets at once
292
+ */
293
+ settleMultiple(markets: ArbitrageMarketConfig[], execute?: boolean): Promise<SettleResult[]>;
294
+ /**
295
+ * Clear all positions in a market using the best strategy
296
+ *
297
+ * Strategy:
298
+ * - Active market: Merge paired tokens → Sell remaining unpaired tokens
299
+ * - Resolved market: Redeem winning tokens
300
+ *
301
+ * @param market Market to clear positions from
302
+ * @param execute If true, execute the clearing. If false, just return info.
303
+ * @returns Result with all actions taken
304
+ *
305
+ * @example
306
+ * ```typescript
307
+ * const service = new ArbitrageService({ privateKey: '0x...' });
308
+ *
309
+ * // View clearing plan
310
+ * const plan = await service.clearPositions(market, false);
311
+ * console.log(`Will recover: $${plan.totalUsdcRecovered}`);
312
+ *
313
+ * // Execute clearing
314
+ * const result = await service.clearPositions(market, true);
315
+ * ```
316
+ */
317
+ clearPositions(market: ArbitrageMarketConfig, execute?: boolean): Promise<ClearPositionResult>;
318
+ /**
319
+ * Clear positions from multiple markets
320
+ *
321
+ * @param markets Markets to clear
322
+ * @param execute If true, execute clearing
323
+ * @returns Results for all markets
324
+ */
325
+ clearAllPositions(markets: ArbitrageMarketConfig[], execute?: boolean): Promise<ClearPositionResult[]>;
326
+ private handleBookUpdate;
327
+ private checkAndHandleOpportunity;
328
+ private checkAndRebalance;
329
+ /**
330
+ * Fix YES/NO imbalance immediately after partial execution
331
+ * This is critical when one side of a parallel order fails
332
+ */
333
+ private fixImbalanceIfNeeded;
334
+ private updateBalance;
335
+ private executeLongArb;
336
+ private executeShortArb;
337
+ private log;
338
+ /**
339
+ * Scan markets for arbitrage opportunities
340
+ *
341
+ * @param criteria Filter criteria for markets
342
+ * @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
343
+ * @returns Array of scan results sorted by profit
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * const service = new ArbitrageService({ privateKey: '0x...' });
348
+ *
349
+ * // Scan markets with at least $5000 volume
350
+ * const results = await service.scanMarkets({ minVolume24h: 5000 }, 0.005);
351
+ *
352
+ * // Start arbitraging the best opportunity
353
+ * if (results.length > 0 && results[0].arbType !== 'none') {
354
+ * await service.start(results[0].market);
355
+ * }
356
+ * ```
357
+ */
358
+ scanMarkets(criteria?: ScanCriteria, minProfit?: number): Promise<ScanResult[]>;
359
+ /**
360
+ * Quick scan for best arbitrage opportunities
361
+ *
362
+ * @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
363
+ * @param limit Maximum number of results to return (default: 10)
364
+ * @returns Top arbitrage opportunities
365
+ *
366
+ * @example
367
+ * ```typescript
368
+ * const service = new ArbitrageService({ privateKey: '0x...' });
369
+ *
370
+ * // Find best arbitrage opportunities
371
+ * const top = await service.quickScan(0.005, 5);
372
+ *
373
+ * // Print results
374
+ * for (const r of top) {
375
+ * console.log(`${r.market.name}: ${r.arbType} +${r.profitPercent.toFixed(2)}%`);
376
+ * }
377
+ *
378
+ * // Start the best one
379
+ * if (top.length > 0) {
380
+ * await service.start(top[0].market);
381
+ * }
382
+ * ```
383
+ */
384
+ quickScan(minProfit?: number, limit?: number): Promise<ScanResult[]>;
385
+ /**
386
+ * Find and start arbitraging the best opportunity
387
+ *
388
+ * @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
389
+ * @returns The scan result that was started, or null if none found
390
+ *
391
+ * @example
392
+ * ```typescript
393
+ * const service = new ArbitrageService({
394
+ * privateKey: '0x...',
395
+ * autoExecute: true,
396
+ * profitThreshold: 0.005,
397
+ * });
398
+ *
399
+ * // Find and start the best opportunity
400
+ * const started = await service.findAndStart(0.005);
401
+ * if (started) {
402
+ * console.log(`Started: ${started.market.name} (+${started.profitPercent.toFixed(2)}%)`);
403
+ * }
404
+ * ```
405
+ */
406
+ findAndStart(minProfit?: number): Promise<ScanResult | null>;
407
+ }
408
+ //# sourceMappingURL=arbitrage-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arbitrage-service.d.ts","sourceRoot":"","sources":["../../src/services/arbitrage-service.ts"],"names":[],"mappings":"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"}