@catalyst-team/poly-sdk 0.2.1 → 0.4.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 (277) hide show
  1. package/README.md +665 -807
  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/ctf-client.d.ts +6 -4
  26. package/dist/clients/ctf-client.d.ts.map +1 -1
  27. package/dist/clients/ctf-client.js.map +1 -1
  28. package/dist/clients/data-api.d.ts +333 -15
  29. package/dist/clients/data-api.d.ts.map +1 -1
  30. package/dist/clients/data-api.js +398 -26
  31. package/dist/clients/data-api.js.map +1 -1
  32. package/dist/clients/gamma-api.d.ts +5 -0
  33. package/dist/clients/gamma-api.d.ts.map +1 -1
  34. package/dist/clients/gamma-api.js +2 -0
  35. package/dist/clients/gamma-api.js.map +1 -1
  36. package/dist/clients/subgraph.d.ts +196 -0
  37. package/dist/clients/subgraph.d.ts.map +1 -0
  38. package/dist/clients/subgraph.js +332 -0
  39. package/dist/clients/subgraph.js.map +1 -0
  40. package/dist/clients/websocket-manager.d.ts +3 -0
  41. package/dist/clients/websocket-manager.d.ts.map +1 -1
  42. package/dist/clients/websocket-manager.js +10 -3
  43. package/dist/clients/websocket-manager.js.map +1 -1
  44. package/dist/core/cache.d.ts +3 -0
  45. package/dist/core/cache.d.ts.map +1 -1
  46. package/dist/core/cache.js +5 -0
  47. package/dist/core/cache.js.map +1 -1
  48. package/dist/core/errors.d.ts +2 -1
  49. package/dist/core/errors.d.ts.map +1 -1
  50. package/dist/core/errors.js +2 -0
  51. package/dist/core/errors.js.map +1 -1
  52. package/dist/core/rate-limiter.d.ts +3 -1
  53. package/dist/core/rate-limiter.d.ts.map +1 -1
  54. package/dist/core/rate-limiter.js +12 -0
  55. package/dist/core/rate-limiter.js.map +1 -1
  56. package/dist/core/types.d.ts +205 -13
  57. package/dist/core/types.d.ts.map +1 -1
  58. package/dist/core/types.js +30 -0
  59. package/dist/core/types.js.map +1 -1
  60. package/dist/core/types.test.d.ts +7 -0
  61. package/dist/core/types.test.d.ts.map +1 -0
  62. package/dist/core/types.test.js +122 -0
  63. package/dist/core/types.test.js.map +1 -0
  64. package/dist/index.d.ts +84 -18
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +139 -132
  67. package/dist/index.js.map +1 -1
  68. package/dist/scripts/dip-arb/auto-trade.d.ts +20 -0
  69. package/dist/scripts/dip-arb/auto-trade.d.ts.map +1 -0
  70. package/dist/scripts/dip-arb/auto-trade.js +373 -0
  71. package/dist/scripts/dip-arb/auto-trade.js.map +1 -0
  72. package/dist/scripts/dip-arb/example-basic.d.ts +30 -0
  73. package/dist/scripts/dip-arb/example-basic.d.ts.map +1 -0
  74. package/dist/scripts/dip-arb/example-basic.js +222 -0
  75. package/dist/scripts/dip-arb/example-basic.js.map +1 -0
  76. package/dist/scripts/dip-arb/redeem-positions.d.ts +11 -0
  77. package/dist/scripts/dip-arb/redeem-positions.d.ts.map +1 -0
  78. package/dist/scripts/dip-arb/redeem-positions.js +201 -0
  79. package/dist/scripts/dip-arb/redeem-positions.js.map +1 -0
  80. package/dist/scripts/dip-arb/scan-markets.d.ts +6 -0
  81. package/dist/scripts/dip-arb/scan-markets.d.ts.map +1 -0
  82. package/dist/scripts/dip-arb/scan-markets.js +73 -0
  83. package/dist/scripts/dip-arb/scan-markets.js.map +1 -0
  84. package/dist/services/arbitrage-service.d.ts +3 -2
  85. package/dist/services/arbitrage-service.d.ts.map +1 -1
  86. package/dist/services/arbitrage-service.js +71 -43
  87. package/dist/services/arbitrage-service.js.map +1 -1
  88. package/dist/services/binance-service.d.ts +154 -0
  89. package/dist/services/binance-service.d.ts.map +1 -0
  90. package/dist/services/binance-service.js +266 -0
  91. package/dist/services/binance-service.js.map +1 -0
  92. package/dist/services/dip-arb-service.d.ts +209 -0
  93. package/dist/services/dip-arb-service.d.ts.map +1 -0
  94. package/dist/services/dip-arb-service.js +1602 -0
  95. package/dist/services/dip-arb-service.js.map +1 -0
  96. package/dist/services/dip-arb-types.d.ts +553 -0
  97. package/dist/services/dip-arb-types.d.ts.map +1 -0
  98. package/dist/services/dip-arb-types.js +164 -0
  99. package/dist/services/dip-arb-types.js.map +1 -0
  100. package/dist/services/market-service.d.ts +267 -8
  101. package/dist/services/market-service.d.ts.map +1 -1
  102. package/dist/services/market-service.js +771 -42
  103. package/dist/services/market-service.js.map +1 -1
  104. package/dist/services/onchain-service.d.ts +309 -0
  105. package/dist/services/onchain-service.d.ts.map +1 -0
  106. package/dist/services/onchain-service.js +417 -0
  107. package/dist/services/onchain-service.js.map +1 -0
  108. package/dist/services/realtime-service-v2.d.ts +362 -0
  109. package/dist/services/realtime-service-v2.d.ts.map +1 -0
  110. package/dist/services/realtime-service-v2.js +858 -0
  111. package/dist/services/realtime-service-v2.js.map +1 -0
  112. package/dist/services/realtime-service.d.ts +17 -17
  113. package/dist/services/realtime-service.d.ts.map +1 -1
  114. package/dist/services/realtime-service.js +91 -59
  115. package/dist/services/realtime-service.js.map +1 -1
  116. package/dist/services/smart-money-service.d.ts +352 -0
  117. package/dist/services/smart-money-service.d.ts.map +1 -0
  118. package/dist/services/smart-money-service.js +582 -0
  119. package/dist/services/smart-money-service.js.map +1 -0
  120. package/dist/services/trading-service.d.ts +177 -0
  121. package/dist/services/trading-service.d.ts.map +1 -0
  122. package/dist/services/trading-service.js +422 -0
  123. package/dist/services/trading-service.js.map +1 -0
  124. package/dist/services/wallet-service.d.ts +225 -3
  125. package/dist/services/wallet-service.d.ts.map +1 -1
  126. package/dist/services/wallet-service.js +511 -3
  127. package/dist/services/wallet-service.js.map +1 -1
  128. package/dist/src/__tests__/integration/arbitrage-service.integration.test.d.ts +12 -0
  129. package/dist/src/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
  130. package/dist/src/__tests__/integration/arbitrage-service.integration.test.js +267 -0
  131. package/dist/src/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
  132. package/dist/src/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
  133. package/dist/src/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
  134. package/dist/src/__tests__/integration/bridge-client.integration.test.js +260 -0
  135. package/dist/src/__tests__/integration/bridge-client.integration.test.js.map +1 -0
  136. package/dist/src/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
  137. package/dist/src/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
  138. package/dist/src/__tests__/integration/ctf-client.integration.test.js +234 -0
  139. package/dist/src/__tests__/integration/ctf-client.integration.test.js.map +1 -0
  140. package/dist/src/__tests__/integration/data-api.integration.test.d.ts +9 -0
  141. package/dist/src/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
  142. package/dist/src/__tests__/integration/data-api.integration.test.js +164 -0
  143. package/dist/src/__tests__/integration/data-api.integration.test.js.map +1 -0
  144. package/dist/src/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
  145. package/dist/src/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
  146. package/dist/src/__tests__/integration/gamma-api.integration.test.js +170 -0
  147. package/dist/src/__tests__/integration/gamma-api.integration.test.js.map +1 -0
  148. package/dist/src/__tests__/integration/market-service.integration.test.d.ts +10 -0
  149. package/dist/src/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
  150. package/dist/src/__tests__/integration/market-service.integration.test.js +180 -0
  151. package/dist/src/__tests__/integration/market-service.integration.test.js.map +1 -0
  152. package/dist/src/__tests__/integration/realtime-service-v2.integration.test.d.ts +10 -0
  153. package/dist/src/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
  154. package/dist/src/__tests__/integration/realtime-service-v2.integration.test.js +307 -0
  155. package/dist/src/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
  156. package/dist/src/__tests__/integration/trading-service.integration.test.d.ts +10 -0
  157. package/dist/src/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
  158. package/dist/src/__tests__/integration/trading-service.integration.test.js +58 -0
  159. package/dist/src/__tests__/integration/trading-service.integration.test.js.map +1 -0
  160. package/dist/src/__tests__/test-utils.d.ts +92 -0
  161. package/dist/src/__tests__/test-utils.d.ts.map +1 -0
  162. package/dist/src/__tests__/test-utils.js +143 -0
  163. package/dist/src/__tests__/test-utils.js.map +1 -0
  164. package/dist/src/clients/bridge-client.d.ts +388 -0
  165. package/dist/src/clients/bridge-client.d.ts.map +1 -0
  166. package/dist/src/clients/bridge-client.js +587 -0
  167. package/dist/src/clients/bridge-client.js.map +1 -0
  168. package/dist/src/clients/ctf-client.d.ts +475 -0
  169. package/dist/src/clients/ctf-client.d.ts.map +1 -0
  170. package/dist/src/clients/ctf-client.js +915 -0
  171. package/dist/src/clients/ctf-client.js.map +1 -0
  172. package/dist/src/clients/data-api.d.ts +452 -0
  173. package/dist/src/clients/data-api.d.ts.map +1 -0
  174. package/dist/src/clients/data-api.js +637 -0
  175. package/dist/src/clients/data-api.js.map +1 -0
  176. package/dist/src/clients/gamma-api.d.ts +421 -0
  177. package/dist/src/clients/gamma-api.d.ts.map +1 -0
  178. package/dist/src/clients/gamma-api.js +359 -0
  179. package/dist/src/clients/gamma-api.js.map +1 -0
  180. package/dist/src/clients/subgraph.d.ts +196 -0
  181. package/dist/src/clients/subgraph.d.ts.map +1 -0
  182. package/dist/src/clients/subgraph.js +332 -0
  183. package/dist/src/clients/subgraph.js.map +1 -0
  184. package/dist/src/core/cache-adapter-bridge.d.ts +36 -0
  185. package/dist/src/core/cache-adapter-bridge.d.ts.map +1 -0
  186. package/dist/src/core/cache-adapter-bridge.js +81 -0
  187. package/dist/src/core/cache-adapter-bridge.js.map +1 -0
  188. package/dist/src/core/cache.d.ts +43 -0
  189. package/dist/src/core/cache.d.ts.map +1 -0
  190. package/dist/src/core/cache.js +76 -0
  191. package/dist/src/core/cache.js.map +1 -0
  192. package/dist/src/core/errors.d.ts +39 -0
  193. package/dist/src/core/errors.d.ts.map +1 -0
  194. package/dist/src/core/errors.js +86 -0
  195. package/dist/src/core/errors.js.map +1 -0
  196. package/dist/src/core/rate-limiter.d.ts +33 -0
  197. package/dist/src/core/rate-limiter.d.ts.map +1 -0
  198. package/dist/src/core/rate-limiter.js +82 -0
  199. package/dist/src/core/rate-limiter.js.map +1 -0
  200. package/dist/src/core/types.d.ts +506 -0
  201. package/dist/src/core/types.d.ts.map +1 -0
  202. package/dist/src/core/types.js +49 -0
  203. package/dist/src/core/types.js.map +1 -0
  204. package/dist/src/core/types.test.d.ts +7 -0
  205. package/dist/src/core/types.test.d.ts.map +1 -0
  206. package/dist/src/core/types.test.js +122 -0
  207. package/dist/src/core/types.test.js.map +1 -0
  208. package/dist/src/core/unified-cache.d.ts +63 -0
  209. package/dist/src/core/unified-cache.d.ts.map +1 -0
  210. package/dist/src/core/unified-cache.js +114 -0
  211. package/dist/src/core/unified-cache.js.map +1 -0
  212. package/dist/src/index.d.ts +159 -0
  213. package/dist/src/index.d.ts.map +1 -0
  214. package/dist/src/index.js +262 -0
  215. package/dist/src/index.js.map +1 -0
  216. package/dist/src/services/arbitrage-service.d.ts +409 -0
  217. package/dist/src/services/arbitrage-service.d.ts.map +1 -0
  218. package/dist/src/services/arbitrage-service.js +1450 -0
  219. package/dist/src/services/arbitrage-service.js.map +1 -0
  220. package/dist/src/services/authorization-service.d.ts +97 -0
  221. package/dist/src/services/authorization-service.d.ts.map +1 -0
  222. package/dist/src/services/authorization-service.js +279 -0
  223. package/dist/src/services/authorization-service.js.map +1 -0
  224. package/dist/src/services/binance-service.d.ts +154 -0
  225. package/dist/src/services/binance-service.d.ts.map +1 -0
  226. package/dist/src/services/binance-service.js +266 -0
  227. package/dist/src/services/binance-service.js.map +1 -0
  228. package/dist/src/services/dip-arb-service.d.ts +245 -0
  229. package/dist/src/services/dip-arb-service.d.ts.map +1 -0
  230. package/dist/src/services/dip-arb-service.js +1865 -0
  231. package/dist/src/services/dip-arb-service.js.map +1 -0
  232. package/dist/src/services/dip-arb-types.d.ts +553 -0
  233. package/dist/src/services/dip-arb-types.d.ts.map +1 -0
  234. package/dist/src/services/dip-arb-types.js +164 -0
  235. package/dist/src/services/dip-arb-types.js.map +1 -0
  236. package/dist/src/services/market-service.d.ts +370 -0
  237. package/dist/src/services/market-service.d.ts.map +1 -0
  238. package/dist/src/services/market-service.js +1200 -0
  239. package/dist/src/services/market-service.js.map +1 -0
  240. package/dist/src/services/onchain-service.d.ts +309 -0
  241. package/dist/src/services/onchain-service.d.ts.map +1 -0
  242. package/dist/src/services/onchain-service.js +417 -0
  243. package/dist/src/services/onchain-service.js.map +1 -0
  244. package/dist/src/services/realtime-service-v2.d.ts +367 -0
  245. package/dist/src/services/realtime-service-v2.d.ts.map +1 -0
  246. package/dist/src/services/realtime-service-v2.js +876 -0
  247. package/dist/src/services/realtime-service-v2.js.map +1 -0
  248. package/dist/src/services/smart-money-service.d.ts +352 -0
  249. package/dist/src/services/smart-money-service.d.ts.map +1 -0
  250. package/dist/src/services/smart-money-service.js +582 -0
  251. package/dist/src/services/smart-money-service.js.map +1 -0
  252. package/dist/src/services/swap-service.d.ts +217 -0
  253. package/dist/src/services/swap-service.d.ts.map +1 -0
  254. package/dist/src/services/swap-service.js +695 -0
  255. package/dist/src/services/swap-service.js.map +1 -0
  256. package/dist/src/services/trading-service.d.ts +177 -0
  257. package/dist/src/services/trading-service.d.ts.map +1 -0
  258. package/dist/src/services/trading-service.js +422 -0
  259. package/dist/src/services/trading-service.js.map +1 -0
  260. package/dist/src/services/wallet-service.d.ts +316 -0
  261. package/dist/src/services/wallet-service.d.ts.map +1 -0
  262. package/dist/src/services/wallet-service.js +681 -0
  263. package/dist/src/services/wallet-service.js.map +1 -0
  264. package/dist/src/utils/price-utils.d.ts +153 -0
  265. package/dist/src/utils/price-utils.d.ts.map +1 -0
  266. package/dist/src/utils/price-utils.js +236 -0
  267. package/dist/src/utils/price-utils.js.map +1 -0
  268. package/dist/src/utils/price-utils.test.d.ts +5 -0
  269. package/dist/src/utils/price-utils.test.d.ts.map +1 -0
  270. package/dist/src/utils/price-utils.test.js +192 -0
  271. package/dist/src/utils/price-utils.test.js.map +1 -0
  272. package/dist/utils/price-utils.test.d.ts +5 -0
  273. package/dist/utils/price-utils.test.d.ts.map +1 -0
  274. package/dist/utils/price-utils.test.js +192 -0
  275. package/dist/utils/price-utils.test.js.map +1 -0
  276. package/package.json +6 -5
  277. package/README.en.md +0 -502
@@ -0,0 +1,262 @@
1
+ /**
2
+ * @catalyst-team/poly-sdk
3
+ *
4
+ * Unified SDK for Polymarket APIs
5
+ * - Data API (positions, activity, trades, leaderboard)
6
+ * - Gamma API (markets, events, trending)
7
+ * - CLOB API (orderbook, market info, trading)
8
+ * - Services (WalletService, MarketService)
9
+ */
10
+ // Core infrastructure
11
+ export { RateLimiter, ApiType } from './core/rate-limiter.js';
12
+ export { Cache, CACHE_TTL } from './core/cache.js';
13
+ export { PolymarketError, ErrorCode, withRetry } from './core/errors.js';
14
+ export * from './core/types.js';
15
+ export { createUnifiedCache } from './core/unified-cache.js';
16
+ // API Clients
17
+ export { DataApiClient } from './clients/data-api.js';
18
+ export { GammaApiClient } from './clients/gamma-api.js';
19
+ // ClobApiClient has been removed - use TradingService instead
20
+ // TradingService provides getMarket(), getProcessedOrderbook(), etc.
21
+ // Subgraph Client (on-chain data via Goldsky)
22
+ export { SubgraphClient, SUBGRAPH_ENDPOINTS } from './clients/subgraph.js';
23
+ // Services
24
+ export { WalletService } from './services/wallet-service.js';
25
+ export { MarketService, getIntervalMs as getIntervalMsService } from './services/market-service.js';
26
+ // Real-time (V2 - using official @polymarket/real-time-data-client)
27
+ export { RealtimeServiceV2 } from './services/realtime-service-v2.js';
28
+ // RealtimeService (legacy) has been removed - use RealtimeServiceV2 instead
29
+ // ArbitrageService (Real-time arbitrage detection, execution, rebalancing, and settlement)
30
+ export { ArbitrageService } from './services/arbitrage-service.js';
31
+ // SmartMoneyService - Smart Money detection and Copy Trading
32
+ export { SmartMoneyService } from './services/smart-money-service.js';
33
+ // DipArbService - Dip Arbitrage for 15m/5m UP/DOWN markets
34
+ export { DipArbService } from './services/dip-arb-service.js';
35
+ // BinanceService - BTC/ETH/SOL K-line data from Binance
36
+ export { BinanceService } from './services/binance-service.js';
37
+ // TradingService - Unified trading and market data
38
+ export { TradingService, POLYGON_MAINNET, POLYGON_AMOY,
39
+ // Polymarket order minimum requirements
40
+ MIN_ORDER_VALUE_USDC, MIN_ORDER_SIZE_SHARES, } from './services/trading-service.js';
41
+ // TradingClient (legacy) has been removed - use TradingService instead
42
+ // TradingService provides all trading functionality with proper type exports
43
+ // CTF (Conditional Token Framework)
44
+ // NOTE: USDC_CONTRACT is USDC.e (bridged), required for Polymarket CTF
45
+ // NATIVE_USDC_CONTRACT is native USDC, NOT compatible with CTF
46
+ export { CTFClient, CTF_CONTRACT, USDC_CONTRACT, // USDC.e (0x2791...) - Required for CTF
47
+ NATIVE_USDC_CONTRACT, // Native USDC (0x3c49...) - NOT for CTF
48
+ NEG_RISK_CTF_EXCHANGE, NEG_RISK_ADAPTER, USDC_DECIMALS, calculateConditionId, parseUsdc, formatUsdc, } from './clients/ctf-client.js';
49
+ export { RevertReason } from './clients/ctf-client.js';
50
+ // Bridge (Cross-chain Deposits)
51
+ export { BridgeClient, SUPPORTED_CHAINS, BRIDGE_TOKENS, estimateBridgeOutput, getExplorerUrl, depositUsdc, swapAndDeposit, getSupportedDepositTokens, } from './clients/bridge-client.js';
52
+ // Swap Service (DEX swaps on Polygon)
53
+ export { SwapService, QUICKSWAP_ROUTER, POLYGON_TOKENS, TOKEN_DECIMALS, } from './services/swap-service.js';
54
+ // Authorization (ERC20/ERC1155 Approvals)
55
+ export { AuthorizationService } from './services/authorization-service.js';
56
+ // OnchainService (Unified on-chain operations: CTF + Authorization + Swaps)
57
+ export { OnchainService } from './services/onchain-service.js';
58
+ // Price Utilities
59
+ export { roundPrice, roundSize, validatePrice, validateSize, calculateBuyAmount, calculateSellPayout, calculateSharesForAmount, calculateSpread, calculateMidpoint, formatPrice, formatUSDC, calculatePnL, checkArbitrage, getEffectivePrices, ROUNDING_CONFIG, } from './utils/price-utils.js';
60
+ // NOTE: MCP tools have been moved to @catalyst-team/poly-mcp package
61
+ // See packages/poly-mcp/
62
+ // ===== Main SDK Class =====
63
+ import { RateLimiter } from './core/rate-limiter.js';
64
+ import { DataApiClient } from './clients/data-api.js';
65
+ import { GammaApiClient } from './clients/gamma-api.js';
66
+ import { SubgraphClient } from './clients/subgraph.js';
67
+ import { WalletService } from './services/wallet-service.js';
68
+ import { MarketService } from './services/market-service.js';
69
+ import { TradingService } from './services/trading-service.js';
70
+ import { RealtimeServiceV2 } from './services/realtime-service-v2.js';
71
+ import { SmartMoneyService } from './services/smart-money-service.js';
72
+ import { BinanceService } from './services/binance-service.js';
73
+ import { DipArbService } from './services/dip-arb-service.js';
74
+ import { createUnifiedCache } from './core/unified-cache.js';
75
+ export class PolymarketSDK {
76
+ // Infrastructure
77
+ rateLimiter;
78
+ cache;
79
+ // API Clients
80
+ dataApi;
81
+ gammaApi;
82
+ tradingService;
83
+ subgraph;
84
+ // Services
85
+ wallets;
86
+ markets;
87
+ realtime;
88
+ smartMoney;
89
+ binance;
90
+ dipArb;
91
+ // Initialization state
92
+ _initialized = false;
93
+ constructor(config = {}) {
94
+ // Initialize infrastructure
95
+ this.rateLimiter = new RateLimiter();
96
+ // Create unified cache (supports both legacy Cache and CacheAdapter)
97
+ this.cache = createUnifiedCache(config.cache);
98
+ // Initialize API clients
99
+ this.dataApi = new DataApiClient(this.rateLimiter, this.cache);
100
+ this.gammaApi = new GammaApiClient(this.rateLimiter, this.cache);
101
+ // TradingService requires a private key - use provided key or dummy key for read-only
102
+ const privateKey = config.privateKey || '0x' + '1'.repeat(64);
103
+ this.tradingService = new TradingService(this.rateLimiter, this.cache, {
104
+ privateKey,
105
+ chainId: config.chainId,
106
+ credentials: config.creds,
107
+ });
108
+ this.subgraph = new SubgraphClient(this.rateLimiter, this.cache);
109
+ // Initialize services
110
+ this.wallets = new WalletService(this.dataApi, this.subgraph, this.cache);
111
+ this.binance = new BinanceService(this.rateLimiter, this.cache);
112
+ this.markets = new MarketService(this.gammaApi, this.dataApi, this.rateLimiter, this.cache, undefined, this.binance);
113
+ this.realtime = new RealtimeServiceV2();
114
+ this.smartMoney = new SmartMoneyService(this.wallets, this.realtime, this.tradingService);
115
+ // Initialize DipArbService
116
+ this.dipArb = new DipArbService(this.realtime, this.tradingService, this.markets, config.privateKey, config.chainId);
117
+ }
118
+ // ===== Static Factory Methods =====
119
+ /**
120
+ * Create and initialize SDK in one call
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * const sdk = await PolymarketSDK.create({ privateKey: '...' });
125
+ * // Ready to trade and track smart money
126
+ * ```
127
+ */
128
+ static async create(config = {}) {
129
+ const sdk = new PolymarketSDK(config);
130
+ await sdk.start();
131
+ return sdk;
132
+ }
133
+ // ===== Lifecycle Methods =====
134
+ /**
135
+ * Initialize the SDK (required for trading operations)
136
+ */
137
+ async initialize() {
138
+ if (this._initialized)
139
+ return;
140
+ await this.tradingService.initialize();
141
+ this._initialized = true;
142
+ }
143
+ /**
144
+ * Check if SDK is initialized
145
+ */
146
+ isInitialized() {
147
+ return this._initialized;
148
+ }
149
+ /**
150
+ * Start SDK - initialize trading + connect WebSocket
151
+ *
152
+ * One method to do everything:
153
+ * - Initialize trading service (derive API credentials)
154
+ * - Connect WebSocket
155
+ * - Wait for connection
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const sdk = new PolymarketSDK({ privateKey: '...' });
160
+ * await sdk.start();
161
+ * // Ready to use
162
+ * ```
163
+ */
164
+ async start(options = {}) {
165
+ await this.initialize();
166
+ this.connect();
167
+ await this.waitForConnection(options.timeout ?? 10000);
168
+ }
169
+ /**
170
+ * Connect to realtime WebSocket (required for smart money tracking)
171
+ */
172
+ connect() {
173
+ this.realtime.connect();
174
+ }
175
+ /**
176
+ * Wait for WebSocket connection
177
+ */
178
+ async waitForConnection(timeoutMs = 10000) {
179
+ // Already connected
180
+ if (this.realtime.isConnected?.()) {
181
+ return;
182
+ }
183
+ return new Promise((resolve, reject) => {
184
+ const timeout = setTimeout(() => reject(new Error('Connection timeout')), timeoutMs);
185
+ this.realtime.once('connected', () => {
186
+ clearTimeout(timeout);
187
+ resolve();
188
+ });
189
+ });
190
+ }
191
+ /**
192
+ * Stop SDK - disconnect all services and clean up
193
+ */
194
+ stop() {
195
+ this.dipArb.stop();
196
+ this.smartMoney.disconnect();
197
+ this.realtime.disconnect();
198
+ }
199
+ /**
200
+ * Disconnect all services and clean up
201
+ * @deprecated Use stop() instead
202
+ */
203
+ disconnect() {
204
+ this.stop();
205
+ }
206
+ // ===== Unified Market Access =====
207
+ /**
208
+ * Get market by slug or condition ID
209
+ * Delegates to MarketService which handles merging Gamma and CLOB data
210
+ */
211
+ async getMarket(identifier) {
212
+ return this.markets.getMarket(identifier);
213
+ }
214
+ // ===== Orderbook Analysis =====
215
+ /**
216
+ * Get processed orderbook with analytics
217
+ */
218
+ async getOrderbook(conditionId) {
219
+ return this.markets.getProcessedOrderbook(conditionId);
220
+ }
221
+ /**
222
+ * Detect arbitrage opportunity
223
+ *
224
+ * 使用有效价格计算套利机会(正确考虑镜像订单)
225
+ * 详细文档见: docs/01-polymarket-orderbook-arbitrage.md
226
+ */
227
+ async detectArbitrage(conditionId, threshold = 0.005) {
228
+ const orderbook = await this.getOrderbook(conditionId);
229
+ const { effectivePrices, longArbProfit, shortArbProfit } = orderbook.summary;
230
+ if (longArbProfit > threshold) {
231
+ return {
232
+ type: 'long',
233
+ profit: longArbProfit,
234
+ action: `Buy YES @ ${effectivePrices.effectiveBuyYes.toFixed(4)} + Buy NO @ ${effectivePrices.effectiveBuyNo.toFixed(4)}, merge for 1 USDC`,
235
+ expectedProfit: longArbProfit,
236
+ };
237
+ }
238
+ if (shortArbProfit > threshold) {
239
+ return {
240
+ type: 'short',
241
+ profit: shortArbProfit,
242
+ action: `Split 1 USDC, Sell YES @ ${effectivePrices.effectiveSellYes.toFixed(4)} + Sell NO @ ${effectivePrices.effectiveSellNo.toFixed(4)}`,
243
+ expectedProfit: shortArbProfit,
244
+ };
245
+ }
246
+ return null;
247
+ }
248
+ // ===== Cache Management =====
249
+ /**
250
+ * Clear all cached data
251
+ */
252
+ clearCache() {
253
+ this.cache.clear();
254
+ }
255
+ /**
256
+ * Invalidate cache for a specific market
257
+ */
258
+ invalidateMarketCache(conditionId) {
259
+ this.cache.invalidate(conditionId);
260
+ }
261
+ }
262
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,409 @@
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 realtimeService;
225
+ private marketSubscription;
226
+ private ctf;
227
+ private tradingService;
228
+ private rateLimiter;
229
+ private market;
230
+ private config;
231
+ private orderbook;
232
+ private balance;
233
+ private isExecuting;
234
+ private lastExecutionTime;
235
+ private lastRebalanceTime;
236
+ private balanceUpdateInterval;
237
+ private rebalanceInterval;
238
+ private isRunning;
239
+ private totalCapital;
240
+ private stats;
241
+ constructor(config?: ArbitrageServiceConfig);
242
+ /**
243
+ * Start monitoring a market for arbitrage opportunities
244
+ */
245
+ start(market: ArbitrageMarketConfig): Promise<void>;
246
+ /**
247
+ * Stop monitoring
248
+ */
249
+ stop(): Promise<void>;
250
+ /**
251
+ * Get current orderbook state
252
+ */
253
+ getOrderbook(): OrderbookState;
254
+ /**
255
+ * Get current balance state
256
+ */
257
+ getBalance(): BalanceState;
258
+ /**
259
+ * Get statistics
260
+ */
261
+ getStats(): {
262
+ runningTimeMs: number;
263
+ opportunitiesDetected: number;
264
+ executionsAttempted: number;
265
+ executionsSucceeded: number;
266
+ totalProfit: number;
267
+ startTime: number;
268
+ };
269
+ /**
270
+ * Check for arbitrage opportunity based on current orderbook
271
+ */
272
+ checkOpportunity(): ArbitrageOpportunity | null;
273
+ /**
274
+ * Manually execute an arbitrage opportunity
275
+ */
276
+ execute(opportunity: ArbitrageOpportunity): Promise<ArbitrageExecutionResult>;
277
+ /**
278
+ * Calculate recommended rebalance action based on current state
279
+ */
280
+ calculateRebalanceAction(): RebalanceAction;
281
+ /**
282
+ * Execute a rebalance action
283
+ */
284
+ rebalance(action?: RebalanceAction): Promise<RebalanceResult>;
285
+ /**
286
+ * Settle a market position - merge paired tokens to recover USDC
287
+ * @param market Market to settle (defaults to current market)
288
+ * @param execute If true, execute the merge. If false, just return info.
289
+ */
290
+ settlePosition(market?: ArbitrageMarketConfig, execute?: boolean): Promise<SettleResult>;
291
+ /**
292
+ * Settle multiple markets at once
293
+ */
294
+ settleMultiple(markets: ArbitrageMarketConfig[], execute?: boolean): Promise<SettleResult[]>;
295
+ /**
296
+ * Clear all positions in a market using the best strategy
297
+ *
298
+ * Strategy:
299
+ * - Active market: Merge paired tokens → Sell remaining unpaired tokens
300
+ * - Resolved market: Redeem winning tokens
301
+ *
302
+ * @param market Market to clear positions from
303
+ * @param execute If true, execute the clearing. If false, just return info.
304
+ * @returns Result with all actions taken
305
+ *
306
+ * @example
307
+ * ```typescript
308
+ * const service = new ArbitrageService({ privateKey: '0x...' });
309
+ *
310
+ * // View clearing plan
311
+ * const plan = await service.clearPositions(market, false);
312
+ * console.log(`Will recover: $${plan.totalUsdcRecovered}`);
313
+ *
314
+ * // Execute clearing
315
+ * const result = await service.clearPositions(market, true);
316
+ * ```
317
+ */
318
+ clearPositions(market: ArbitrageMarketConfig, execute?: boolean): Promise<ClearPositionResult>;
319
+ /**
320
+ * Clear positions from multiple markets
321
+ *
322
+ * @param markets Markets to clear
323
+ * @param execute If true, execute clearing
324
+ * @returns Results for all markets
325
+ */
326
+ clearAllPositions(markets: ArbitrageMarketConfig[], execute?: boolean): Promise<ClearPositionResult[]>;
327
+ private handleBookUpdate;
328
+ private checkAndHandleOpportunity;
329
+ private checkAndRebalance;
330
+ /**
331
+ * Fix YES/NO imbalance immediately after partial execution
332
+ * This is critical when one side of a parallel order fails
333
+ */
334
+ private fixImbalanceIfNeeded;
335
+ private updateBalance;
336
+ private executeLongArb;
337
+ private executeShortArb;
338
+ private log;
339
+ /**
340
+ * Scan markets for arbitrage opportunities
341
+ *
342
+ * @param criteria Filter criteria for markets
343
+ * @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
344
+ * @returns Array of scan results sorted by profit
345
+ *
346
+ * @example
347
+ * ```typescript
348
+ * const service = new ArbitrageService({ privateKey: '0x...' });
349
+ *
350
+ * // Scan markets with at least $5000 volume
351
+ * const results = await service.scanMarkets({ minVolume24h: 5000 }, 0.005);
352
+ *
353
+ * // Start arbitraging the best opportunity
354
+ * if (results.length > 0 && results[0].arbType !== 'none') {
355
+ * await service.start(results[0].market);
356
+ * }
357
+ * ```
358
+ */
359
+ scanMarkets(criteria?: ScanCriteria, minProfit?: number): Promise<ScanResult[]>;
360
+ /**
361
+ * Quick scan for best arbitrage opportunities
362
+ *
363
+ * @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
364
+ * @param limit Maximum number of results to return (default: 10)
365
+ * @returns Top arbitrage opportunities
366
+ *
367
+ * @example
368
+ * ```typescript
369
+ * const service = new ArbitrageService({ privateKey: '0x...' });
370
+ *
371
+ * // Find best arbitrage opportunities
372
+ * const top = await service.quickScan(0.005, 5);
373
+ *
374
+ * // Print results
375
+ * for (const r of top) {
376
+ * console.log(`${r.market.name}: ${r.arbType} +${r.profitPercent.toFixed(2)}%`);
377
+ * }
378
+ *
379
+ * // Start the best one
380
+ * if (top.length > 0) {
381
+ * await service.start(top[0].market);
382
+ * }
383
+ * ```
384
+ */
385
+ quickScan(minProfit?: number, limit?: number): Promise<ScanResult[]>;
386
+ /**
387
+ * Find and start arbitraging the best opportunity
388
+ *
389
+ * @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
390
+ * @returns The scan result that was started, or null if none found
391
+ *
392
+ * @example
393
+ * ```typescript
394
+ * const service = new ArbitrageService({
395
+ * privateKey: '0x...',
396
+ * autoExecute: true,
397
+ * profitThreshold: 0.005,
398
+ * });
399
+ *
400
+ * // Find and start the best opportunity
401
+ * const started = await service.findAndStart(0.005);
402
+ * if (started) {
403
+ * console.log(`Started: ${started.market.name} (+${started.profitPercent.toFixed(2)}%)`);
404
+ * }
405
+ * ```
406
+ */
407
+ findAndStart(minProfit?: number): Promise<ScanResult | null>;
408
+ }
409
+ //# sourceMappingURL=arbitrage-service.d.ts.map