@catalyst-team/poly-sdk 0.4.0 → 0.4.5

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 (288) hide show
  1. package/README.md +8 -1
  2. package/README.zh-CN.md +2 -0
  3. package/dist/src/__tests__/integration/data-api.integration.test.js +21 -18
  4. package/dist/src/__tests__/integration/data-api.integration.test.js.map +1 -1
  5. package/dist/src/catalyst/catalyst-query-service.d.ts +109 -0
  6. package/dist/src/catalyst/catalyst-query-service.d.ts.map +1 -0
  7. package/dist/src/catalyst/catalyst-query-service.js +141 -0
  8. package/dist/src/catalyst/catalyst-query-service.js.map +1 -0
  9. package/dist/src/catalyst/catalyst-realtime-service.d.ts +40 -0
  10. package/dist/src/catalyst/catalyst-realtime-service.d.ts.map +1 -0
  11. package/dist/src/catalyst/catalyst-realtime-service.js +125 -0
  12. package/dist/src/catalyst/catalyst-realtime-service.js.map +1 -0
  13. package/dist/src/catalyst/index.d.ts +4 -0
  14. package/dist/src/catalyst/index.d.ts.map +1 -0
  15. package/dist/src/catalyst/index.js +4 -0
  16. package/dist/src/catalyst/index.js.map +1 -0
  17. package/dist/src/catalyst/types.d.ts +178 -0
  18. package/dist/src/catalyst/types.d.ts.map +1 -0
  19. package/dist/src/catalyst/types.js +2 -0
  20. package/dist/src/catalyst/types.js.map +1 -0
  21. package/dist/src/clients/data-api.d.ts +75 -14
  22. package/dist/src/clients/data-api.d.ts.map +1 -1
  23. package/dist/src/clients/data-api.js +40 -18
  24. package/dist/src/clients/data-api.js.map +1 -1
  25. package/dist/src/clients/gamma-api.d.ts +54 -0
  26. package/dist/src/clients/gamma-api.d.ts.map +1 -1
  27. package/dist/src/clients/gamma-api.js.map +1 -1
  28. package/dist/src/core/order-status.d.ts +159 -0
  29. package/dist/src/core/order-status.d.ts.map +1 -0
  30. package/dist/src/core/order-status.js +254 -0
  31. package/dist/src/core/order-status.js.map +1 -0
  32. package/dist/src/core/types.d.ts +124 -0
  33. package/dist/src/core/types.d.ts.map +1 -1
  34. package/dist/src/core/types.js +120 -0
  35. package/dist/src/core/types.js.map +1 -1
  36. package/dist/src/index.d.ts +20 -4
  37. package/dist/src/index.d.ts.map +1 -1
  38. package/dist/src/index.js +28 -2
  39. package/dist/src/index.js.map +1 -1
  40. package/dist/src/insider-scan/index.d.ts +3 -0
  41. package/dist/src/insider-scan/index.d.ts.map +1 -0
  42. package/dist/src/insider-scan/index.js +3 -0
  43. package/dist/src/insider-scan/index.js.map +1 -0
  44. package/dist/src/insider-scan/insider-scan-service.d.ts +63 -0
  45. package/dist/src/insider-scan/insider-scan-service.d.ts.map +1 -0
  46. package/dist/src/insider-scan/insider-scan-service.js +153 -0
  47. package/dist/src/insider-scan/insider-scan-service.js.map +1 -0
  48. package/dist/src/insider-scan/types.d.ts +205 -0
  49. package/dist/src/insider-scan/types.d.ts.map +1 -0
  50. package/dist/src/insider-scan/types.js +7 -0
  51. package/dist/src/insider-scan/types.js.map +1 -0
  52. package/dist/src/services/ctf-detector.d.ts +215 -0
  53. package/dist/src/services/ctf-detector.d.ts.map +1 -0
  54. package/dist/src/services/ctf-detector.js +420 -0
  55. package/dist/src/services/ctf-detector.js.map +1 -0
  56. package/dist/src/services/ctf-manager.d.ts +202 -0
  57. package/dist/src/services/ctf-manager.d.ts.map +1 -0
  58. package/dist/src/services/ctf-manager.js +542 -0
  59. package/dist/src/services/ctf-manager.js.map +1 -0
  60. package/dist/src/services/market-service.d.ts +61 -0
  61. package/dist/src/services/market-service.d.ts.map +1 -1
  62. package/dist/src/services/market-service.js +58 -0
  63. package/dist/src/services/market-service.js.map +1 -1
  64. package/dist/src/services/onchain-service.d.ts +10 -2
  65. package/dist/src/services/onchain-service.d.ts.map +1 -1
  66. package/dist/src/services/onchain-service.js +8 -0
  67. package/dist/src/services/onchain-service.js.map +1 -1
  68. package/dist/src/services/order-manager.d.ts +281 -0
  69. package/dist/src/services/order-manager.d.ts.map +1 -0
  70. package/dist/src/services/order-manager.js +641 -0
  71. package/dist/src/services/order-manager.js.map +1 -0
  72. package/dist/src/services/order-manager.test.d.ts +8 -0
  73. package/dist/src/services/order-manager.test.d.ts.map +1 -0
  74. package/dist/src/services/order-manager.test.js +477 -0
  75. package/dist/src/services/order-manager.test.js.map +1 -0
  76. package/dist/src/services/smart-money-service.d.ts +420 -3
  77. package/dist/src/services/smart-money-service.d.ts.map +1 -1
  78. package/dist/src/services/smart-money-service.js +869 -3
  79. package/dist/src/services/smart-money-service.js.map +1 -1
  80. package/dist/src/services/trading-service.d.ts +94 -1
  81. package/dist/src/services/trading-service.d.ts.map +1 -1
  82. package/dist/src/services/trading-service.js +232 -1
  83. package/dist/src/services/trading-service.js.map +1 -1
  84. package/dist/src/services/wallet-service.d.ts +38 -2
  85. package/dist/src/services/wallet-service.d.ts.map +1 -1
  86. package/dist/src/services/wallet-service.js +72 -5
  87. package/dist/src/services/wallet-service.js.map +1 -1
  88. package/dist/src/signal/index.d.ts +8 -0
  89. package/dist/src/signal/index.d.ts.map +1 -0
  90. package/dist/src/signal/index.js +7 -0
  91. package/dist/src/signal/index.js.map +1 -0
  92. package/dist/src/signal/signal-service.d.ts +89 -0
  93. package/dist/src/signal/signal-service.d.ts.map +1 -0
  94. package/dist/src/signal/signal-service.js +226 -0
  95. package/dist/src/signal/signal-service.js.map +1 -0
  96. package/dist/src/signal/types.d.ts +280 -0
  97. package/dist/src/signal/types.d.ts.map +1 -0
  98. package/dist/src/signal/types.js +7 -0
  99. package/dist/src/signal/types.js.map +1 -0
  100. package/dist/src/wallet-report/index.d.ts +3 -0
  101. package/dist/src/wallet-report/index.d.ts.map +1 -0
  102. package/dist/src/wallet-report/index.js +3 -0
  103. package/dist/src/wallet-report/index.js.map +1 -0
  104. package/dist/src/wallet-report/types.d.ts +187 -0
  105. package/dist/src/wallet-report/types.d.ts.map +1 -0
  106. package/dist/src/wallet-report/types.js +7 -0
  107. package/dist/src/wallet-report/types.js.map +1 -0
  108. package/dist/src/wallet-report/wallet-report-service.d.ts +91 -0
  109. package/dist/src/wallet-report/wallet-report-service.d.ts.map +1 -0
  110. package/dist/src/wallet-report/wallet-report-service.js +208 -0
  111. package/dist/src/wallet-report/wallet-report-service.js.map +1 -0
  112. package/dist/src/wallets/hot-wallet-service.d.ts +162 -0
  113. package/dist/src/wallets/hot-wallet-service.d.ts.map +1 -0
  114. package/dist/src/wallets/hot-wallet-service.js +251 -0
  115. package/dist/src/wallets/hot-wallet-service.js.map +1 -0
  116. package/dist/src/wallets/index.d.ts +15 -0
  117. package/dist/src/wallets/index.d.ts.map +1 -0
  118. package/dist/src/wallets/index.js +26 -0
  119. package/dist/src/wallets/index.js.map +1 -0
  120. package/package.json +5 -5
  121. package/dist/__tests__/clob-api.test.d.ts +0 -5
  122. package/dist/__tests__/clob-api.test.d.ts.map +0 -1
  123. package/dist/__tests__/clob-api.test.js +0 -240
  124. package/dist/__tests__/clob-api.test.js.map +0 -1
  125. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts +0 -12
  126. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +0 -1
  127. package/dist/__tests__/integration/arbitrage-service.integration.test.js +0 -267
  128. package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +0 -1
  129. package/dist/__tests__/integration/bridge-client.integration.test.d.ts +0 -11
  130. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +0 -1
  131. package/dist/__tests__/integration/bridge-client.integration.test.js +0 -260
  132. package/dist/__tests__/integration/bridge-client.integration.test.js.map +0 -1
  133. package/dist/__tests__/integration/clob-api.integration.test.d.ts +0 -13
  134. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +0 -1
  135. package/dist/__tests__/integration/clob-api.integration.test.js +0 -170
  136. package/dist/__tests__/integration/clob-api.integration.test.js.map +0 -1
  137. package/dist/__tests__/integration/ctf-client.integration.test.d.ts +0 -17
  138. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +0 -1
  139. package/dist/__tests__/integration/ctf-client.integration.test.js +0 -234
  140. package/dist/__tests__/integration/ctf-client.integration.test.js.map +0 -1
  141. package/dist/__tests__/integration/data-api.integration.test.d.ts +0 -9
  142. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +0 -1
  143. package/dist/__tests__/integration/data-api.integration.test.js +0 -164
  144. package/dist/__tests__/integration/data-api.integration.test.js.map +0 -1
  145. package/dist/__tests__/integration/gamma-api.integration.test.d.ts +0 -9
  146. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +0 -1
  147. package/dist/__tests__/integration/gamma-api.integration.test.js +0 -170
  148. package/dist/__tests__/integration/gamma-api.integration.test.js.map +0 -1
  149. package/dist/__tests__/integration/market-service.integration.test.d.ts +0 -10
  150. package/dist/__tests__/integration/market-service.integration.test.d.ts.map +0 -1
  151. package/dist/__tests__/integration/market-service.integration.test.js +0 -173
  152. package/dist/__tests__/integration/market-service.integration.test.js.map +0 -1
  153. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts +0 -10
  154. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +0 -1
  155. package/dist/__tests__/integration/realtime-service-v2.integration.test.js +0 -307
  156. package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +0 -1
  157. package/dist/__tests__/integration/trading-service.integration.test.d.ts +0 -10
  158. package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +0 -1
  159. package/dist/__tests__/integration/trading-service.integration.test.js +0 -58
  160. package/dist/__tests__/integration/trading-service.integration.test.js.map +0 -1
  161. package/dist/__tests__/test-utils.d.ts +0 -92
  162. package/dist/__tests__/test-utils.d.ts.map +0 -1
  163. package/dist/__tests__/test-utils.js +0 -143
  164. package/dist/__tests__/test-utils.js.map +0 -1
  165. package/dist/clients/bridge-client.d.ts +0 -388
  166. package/dist/clients/bridge-client.d.ts.map +0 -1
  167. package/dist/clients/bridge-client.js +0 -587
  168. package/dist/clients/bridge-client.js.map +0 -1
  169. package/dist/clients/clob-api.d.ts +0 -391
  170. package/dist/clients/clob-api.d.ts.map +0 -1
  171. package/dist/clients/clob-api.js +0 -448
  172. package/dist/clients/clob-api.js.map +0 -1
  173. package/dist/clients/ctf-client.d.ts +0 -475
  174. package/dist/clients/ctf-client.d.ts.map +0 -1
  175. package/dist/clients/ctf-client.js +0 -915
  176. package/dist/clients/ctf-client.js.map +0 -1
  177. package/dist/clients/data-api.d.ts +0 -452
  178. package/dist/clients/data-api.d.ts.map +0 -1
  179. package/dist/clients/data-api.js +0 -637
  180. package/dist/clients/data-api.js.map +0 -1
  181. package/dist/clients/gamma-api.d.ts +0 -406
  182. package/dist/clients/gamma-api.d.ts.map +0 -1
  183. package/dist/clients/gamma-api.js +0 -354
  184. package/dist/clients/gamma-api.js.map +0 -1
  185. package/dist/clients/subgraph.d.ts +0 -196
  186. package/dist/clients/subgraph.d.ts.map +0 -1
  187. package/dist/clients/subgraph.js +0 -332
  188. package/dist/clients/subgraph.js.map +0 -1
  189. package/dist/clients/trading-client.d.ts +0 -252
  190. package/dist/clients/trading-client.d.ts.map +0 -1
  191. package/dist/clients/trading-client.js +0 -543
  192. package/dist/clients/trading-client.js.map +0 -1
  193. package/dist/clients/websocket-manager.d.ts +0 -103
  194. package/dist/clients/websocket-manager.d.ts.map +0 -1
  195. package/dist/clients/websocket-manager.js +0 -200
  196. package/dist/clients/websocket-manager.js.map +0 -1
  197. package/dist/core/cache-adapter-bridge.d.ts +0 -36
  198. package/dist/core/cache-adapter-bridge.d.ts.map +0 -1
  199. package/dist/core/cache-adapter-bridge.js +0 -81
  200. package/dist/core/cache-adapter-bridge.js.map +0 -1
  201. package/dist/core/cache.d.ts +0 -43
  202. package/dist/core/cache.d.ts.map +0 -1
  203. package/dist/core/cache.js +0 -76
  204. package/dist/core/cache.js.map +0 -1
  205. package/dist/core/errors.d.ts +0 -39
  206. package/dist/core/errors.d.ts.map +0 -1
  207. package/dist/core/errors.js +0 -86
  208. package/dist/core/errors.js.map +0 -1
  209. package/dist/core/rate-limiter.d.ts +0 -33
  210. package/dist/core/rate-limiter.d.ts.map +0 -1
  211. package/dist/core/rate-limiter.js +0 -82
  212. package/dist/core/rate-limiter.js.map +0 -1
  213. package/dist/core/types.d.ts +0 -506
  214. package/dist/core/types.d.ts.map +0 -1
  215. package/dist/core/types.js +0 -49
  216. package/dist/core/types.js.map +0 -1
  217. package/dist/core/types.test.d.ts +0 -7
  218. package/dist/core/types.test.d.ts.map +0 -1
  219. package/dist/core/types.test.js +0 -122
  220. package/dist/core/types.test.js.map +0 -1
  221. package/dist/core/unified-cache.d.ts +0 -63
  222. package/dist/core/unified-cache.d.ts.map +0 -1
  223. package/dist/core/unified-cache.js +0 -114
  224. package/dist/core/unified-cache.js.map +0 -1
  225. package/dist/index.d.ts +0 -159
  226. package/dist/index.d.ts.map +0 -1
  227. package/dist/index.js +0 -262
  228. package/dist/index.js.map +0 -1
  229. package/dist/services/arbitrage-service.d.ts +0 -409
  230. package/dist/services/arbitrage-service.d.ts.map +0 -1
  231. package/dist/services/arbitrage-service.js +0 -1450
  232. package/dist/services/arbitrage-service.js.map +0 -1
  233. package/dist/services/authorization-service.d.ts +0 -97
  234. package/dist/services/authorization-service.d.ts.map +0 -1
  235. package/dist/services/authorization-service.js +0 -279
  236. package/dist/services/authorization-service.js.map +0 -1
  237. package/dist/services/binance-service.d.ts +0 -154
  238. package/dist/services/binance-service.d.ts.map +0 -1
  239. package/dist/services/binance-service.js +0 -266
  240. package/dist/services/binance-service.js.map +0 -1
  241. package/dist/services/dip-arb-service.d.ts +0 -209
  242. package/dist/services/dip-arb-service.d.ts.map +0 -1
  243. package/dist/services/dip-arb-service.js +0 -1602
  244. package/dist/services/dip-arb-service.js.map +0 -1
  245. package/dist/services/dip-arb-types.d.ts +0 -553
  246. package/dist/services/dip-arb-types.d.ts.map +0 -1
  247. package/dist/services/dip-arb-types.js +0 -164
  248. package/dist/services/dip-arb-types.js.map +0 -1
  249. package/dist/services/market-service.d.ts +0 -367
  250. package/dist/services/market-service.d.ts.map +0 -1
  251. package/dist/services/market-service.js +0 -1187
  252. package/dist/services/market-service.js.map +0 -1
  253. package/dist/services/onchain-service.d.ts +0 -309
  254. package/dist/services/onchain-service.d.ts.map +0 -1
  255. package/dist/services/onchain-service.js +0 -417
  256. package/dist/services/onchain-service.js.map +0 -1
  257. package/dist/services/realtime-service-v2.d.ts +0 -362
  258. package/dist/services/realtime-service-v2.d.ts.map +0 -1
  259. package/dist/services/realtime-service-v2.js +0 -858
  260. package/dist/services/realtime-service-v2.js.map +0 -1
  261. package/dist/services/realtime-service.d.ts +0 -82
  262. package/dist/services/realtime-service.d.ts.map +0 -1
  263. package/dist/services/realtime-service.js +0 -182
  264. package/dist/services/realtime-service.js.map +0 -1
  265. package/dist/services/smart-money-service.d.ts +0 -352
  266. package/dist/services/smart-money-service.d.ts.map +0 -1
  267. package/dist/services/smart-money-service.js +0 -582
  268. package/dist/services/smart-money-service.js.map +0 -1
  269. package/dist/services/swap-service.d.ts +0 -217
  270. package/dist/services/swap-service.d.ts.map +0 -1
  271. package/dist/services/swap-service.js +0 -695
  272. package/dist/services/swap-service.js.map +0 -1
  273. package/dist/services/trading-service.d.ts +0 -177
  274. package/dist/services/trading-service.d.ts.map +0 -1
  275. package/dist/services/trading-service.js +0 -422
  276. package/dist/services/trading-service.js.map +0 -1
  277. package/dist/services/wallet-service.d.ts +0 -316
  278. package/dist/services/wallet-service.d.ts.map +0 -1
  279. package/dist/services/wallet-service.js +0 -681
  280. package/dist/services/wallet-service.js.map +0 -1
  281. package/dist/utils/price-utils.d.ts +0 -153
  282. package/dist/utils/price-utils.d.ts.map +0 -1
  283. package/dist/utils/price-utils.js +0 -236
  284. package/dist/utils/price-utils.js.map +0 -1
  285. package/dist/utils/price-utils.test.d.ts +0 -5
  286. package/dist/utils/price-utils.test.d.ts.map +0 -1
  287. package/dist/utils/price-utils.test.js +0 -192
  288. package/dist/utils/price-utils.test.js.map +0 -1
@@ -1,448 +0,0 @@
1
- /**
2
- * CLOB API Client for Polymarket
3
- *
4
- * The Central Limit Order Book (CLOB) API provides access to Polymarket's
5
- * trading infrastructure. This client handles market information retrieval
6
- * and orderbook data.
7
- *
8
- * @remarks
9
- * - Base URL: https://clob.polymarket.com
10
- * - Rate limits are automatically handled by the RateLimiter
11
- * - Market data is cached to reduce API calls
12
- *
13
- * @example
14
- * ```typescript
15
- * import { ClobApiClient, RateLimiter, Cache } from '@catalyst-team/poly-sdk';
16
- *
17
- * const client = new ClobApiClient(new RateLimiter(), new Cache());
18
- *
19
- * // Get market info
20
- * const market = await client.getMarket('0x123...');
21
- * console.log(market.question);
22
- *
23
- * // Get orderbook
24
- * const orderbook = await client.getOrderbook(market.tokens[0].tokenId);
25
- * console.log('Best bid:', orderbook.bids[0]);
26
- * ```
27
- *
28
- * @see {@link https://docs.polymarket.com/#clob-api CLOB API Documentation}
29
- *
30
- * @module clients/clob-api
31
- */
32
- import { ApiType } from '../core/rate-limiter.js';
33
- import { CACHE_TTL } from '../core/unified-cache.js';
34
- import { PolymarketError, ErrorCode } from '../core/errors.js';
35
- /** CLOB API base URL */
36
- const CLOB_API_BASE = 'https://clob.polymarket.com';
37
- // ===== Client =====
38
- /**
39
- * CLOB API client for interacting with Polymarket's orderbook
40
- *
41
- * @remarks
42
- * This client provides read-only access to market data and orderbooks.
43
- * For trading operations, use {@link TradingClient} instead.
44
- *
45
- * @example
46
- * ```typescript
47
- * const client = new ClobApiClient(rateLimiter, cache);
48
- *
49
- * // Get market details
50
- * const market = await client.getMarket('0x123...');
51
- *
52
- * // Get processed orderbook with analytics
53
- * const processed = await client.getProcessedOrderbook('0x123...');
54
- * console.log('Long arb profit:', processed.summary.longArbProfit);
55
- * ```
56
- */
57
- export class ClobApiClient {
58
- rateLimiter;
59
- cache;
60
- config;
61
- /**
62
- * Creates a new CLOB API client
63
- *
64
- * @param rateLimiter - Rate limiter instance for API throttling
65
- * @param cache - Cache instance for storing market data (supports both legacy Cache and CacheAdapter)
66
- * @param config - Optional configuration for trading capabilities
67
- * @param config.chainId - Polygon chain ID (137 for mainnet, 80002 for Amoy testnet)
68
- * @param config.signer - Ethers signer for authenticated requests
69
- * @param config.creds - API credentials for L2 authentication
70
- */
71
- constructor(rateLimiter, cache, config) {
72
- this.rateLimiter = rateLimiter;
73
- this.cache = cache;
74
- this.config = config;
75
- }
76
- /**
77
- * Get the signer if configured
78
- * @returns The signer or undefined if not configured
79
- */
80
- get signer() {
81
- return this.config?.signer;
82
- }
83
- // ===== Market Info =====
84
- /**
85
- * Get market information by condition ID
86
- *
87
- * @param conditionId - The unique condition identifier for the market
88
- * @returns Market information including tokens and status
89
- *
90
- * @throws {@link PolymarketError} If the market is not found or API fails
91
- *
92
- * @example
93
- * ```typescript
94
- * const market = await client.getMarket('0x82ace55...');
95
- * console.log(market.question); // "Will BTC reach $100k?"
96
- * console.log(market.tokens[0].tokenId); // YES token ID
97
- * console.log(market.tokens[1].tokenId); // NO token ID
98
- * ```
99
- */
100
- async getMarket(conditionId) {
101
- const cacheKey = `clob:market:${conditionId}`;
102
- return this.cache.getOrSet(cacheKey, CACHE_TTL.MARKET_INFO, async () => {
103
- return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
104
- const response = await fetch(`${CLOB_API_BASE}/markets/${conditionId}`);
105
- if (!response.ok)
106
- throw PolymarketError.fromHttpError(response.status, await response.json().catch(() => null));
107
- const data = (await response.json());
108
- return this.normalizeMarket(data);
109
- });
110
- });
111
- }
112
- // ===== Orderbook =====
113
- /**
114
- * Get raw orderbook for a specific token
115
- *
116
- * @param tokenId - The ERC-1155 token ID (either YES or NO token)
117
- * @returns Orderbook with sorted bids and asks
118
- *
119
- * @remarks
120
- * - Bids are sorted descending (highest bid first)
121
- * - Asks are sorted ascending (lowest ask first)
122
- * - This returns the raw orderbook for ONE outcome token
123
- * - For complete market analysis, use {@link getProcessedOrderbook}
124
- *
125
- * @throws {@link PolymarketError} If the token is not found or API fails
126
- *
127
- * @example
128
- * ```typescript
129
- * const orderbook = await client.getOrderbook('21742633...');
130
- *
131
- * console.log('Best bid:', orderbook.bids[0]?.price); // e.g., 0.55
132
- * console.log('Best ask:', orderbook.asks[0]?.price); // e.g., 0.57
133
- * console.log('Spread:', orderbook.asks[0]?.price - orderbook.bids[0]?.price);
134
- * ```
135
- */
136
- async getOrderbook(tokenId) {
137
- return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
138
- const response = await fetch(`${CLOB_API_BASE}/book?token_id=${tokenId}`);
139
- if (!response.ok)
140
- throw PolymarketError.fromHttpError(response.status, await response.json().catch(() => null));
141
- const data = (await response.json());
142
- // Sort bids descending (highest bid first)
143
- // Sort asks ascending (lowest ask first)
144
- const bids = (data.bids || [])
145
- .map((l) => ({
146
- price: Number(l.price),
147
- size: Number(l.size),
148
- }))
149
- .sort((a, b) => b.price - a.price);
150
- const asks = (data.asks || [])
151
- .map((l) => ({
152
- price: Number(l.price),
153
- size: Number(l.size),
154
- }))
155
- .sort((a, b) => a.price - b.price);
156
- return {
157
- bids,
158
- asks,
159
- timestamp: data.timestamp ? Number(data.timestamp) : Date.now(),
160
- market: data.market,
161
- assetId: data.asset_id,
162
- hash: data.hash,
163
- minOrderSize: data.min_order_size,
164
- tickSize: data.tick_size,
165
- negRisk: data.neg_risk,
166
- };
167
- });
168
- }
169
- /**
170
- * Get historical prices for a token
171
- *
172
- * @param tokenId - The token ID (from market.tokens[].tokenId)
173
- * @param interval - Time interval: '1d', '1w', '1m', 'max'
174
- * @param fidelity - Data point frequency in minutes (default: 60)
175
- * @returns Array of price points with timestamp and price
176
- *
177
- * @example
178
- * ```typescript
179
- * // Get daily prices for last week
180
- * const prices = await client.getPricesHistory(tokenId, '1w', 60);
181
- * console.log(prices); // [{ t: 1766649620, p: 0.55 }, ...]
182
- * ```
183
- */
184
- async getPricesHistory(tokenId, interval = '1w', fidelity = 60) {
185
- return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
186
- const response = await fetch(`${CLOB_API_BASE}/prices-history?market=${tokenId}&interval=${interval}&fidelity=${fidelity}`);
187
- if (!response.ok) {
188
- throw PolymarketError.fromHttpError(response.status, await response.json().catch(() => null));
189
- }
190
- const data = (await response.json());
191
- return (data.history || []).map((pt) => ({
192
- timestamp: pt.t,
193
- price: pt.p,
194
- }));
195
- });
196
- }
197
- /**
198
- * Get dual price history for both YES and NO tokens
199
- *
200
- * @param conditionId - The market condition ID
201
- * @param interval - Time interval
202
- * @param fidelity - Data point frequency in minutes
203
- * @returns Price histories for both outcomes
204
- */
205
- async getDualPricesHistory(conditionId, interval = '1w', fidelity = 60) {
206
- const market = await this.getMarket(conditionId);
207
- const yesToken = market.tokens.find((t) => t.outcome === 'Yes');
208
- const noToken = market.tokens.find((t) => t.outcome === 'No');
209
- if (!yesToken || !noToken) {
210
- throw new PolymarketError(ErrorCode.MARKET_NOT_FOUND, 'Market tokens not found');
211
- }
212
- const [yesHistory, noHistory] = await Promise.all([
213
- this.getPricesHistory(yesToken.tokenId, interval, fidelity),
214
- this.getPricesHistory(noToken.tokenId, interval, fidelity),
215
- ]);
216
- return {
217
- conditionId,
218
- question: market.question,
219
- yes: {
220
- tokenId: yesToken.tokenId,
221
- history: yesHistory,
222
- },
223
- no: {
224
- tokenId: noToken.tokenId,
225
- history: noHistory,
226
- },
227
- };
228
- }
229
- /**
230
- * Get processed orderbook with complete market analysis
231
- *
232
- * @param conditionId - The unique condition identifier for the market
233
- * @returns Processed orderbook with both YES/NO books and arbitrage analysis
234
- *
235
- * @remarks
236
- * This method fetches both YES and NO orderbooks and calculates:
237
- * - Effective prices (accounting for order book mirroring)
238
- * - Arbitrage opportunities (long and short)
239
- * - Depth and liquidity metrics
240
- *
241
- * **Important**: Polymarket orderbooks have a mirroring property:
242
- * - Buying YES @ P = Selling NO @ (1-P)
243
- * - The same order appears in both books
244
- *
245
- * Therefore, correct arbitrage calculation must use "effective prices":
246
- * - effectiveBuyYes = min(YES.ask, 1 - NO.bid)
247
- * - effectiveBuyNo = min(NO.ask, 1 - YES.bid)
248
- *
249
- * @throws {@link PolymarketError} If market not found or missing tokens
250
- *
251
- * @example
252
- * ```typescript
253
- * const processed = await client.getProcessedOrderbook('0x82ace55...');
254
- *
255
- * // Check for arbitrage
256
- * if (processed.summary.longArbProfit > 0.003) {
257
- * console.log('Long arb opportunity!');
258
- * console.log('Buy YES @', processed.summary.effectivePrices.effectiveBuyYes);
259
- * console.log('Buy NO @', processed.summary.effectivePrices.effectiveBuyNo);
260
- * console.log('Profit:', processed.summary.longArbProfit * 100, '%');
261
- * }
262
- * ```
263
- */
264
- async getProcessedOrderbook(conditionId) {
265
- const market = await this.getMarket(conditionId);
266
- const yesToken = market.tokens.find((t) => t.outcome === 'Yes');
267
- const noToken = market.tokens.find((t) => t.outcome === 'No');
268
- if (!yesToken || !noToken) {
269
- throw new PolymarketError(ErrorCode.INVALID_RESPONSE, 'Missing tokens in market');
270
- }
271
- const [yesBook, noBook] = await Promise.all([
272
- this.getOrderbook(yesToken.tokenId),
273
- this.getOrderbook(noToken.tokenId),
274
- ]);
275
- return this.processOrderbooks(yesBook, noBook, yesToken.tokenId, noToken.tokenId);
276
- }
277
- /**
278
- * Process orderbooks and calculate analytics
279
- *
280
- * 关键概念:Polymarket 订单簿的镜像特性
281
- *
282
- * 买 YES @ P = 卖 NO @ (1-P)
283
- * 因此同一订单会在 YES 和 NO 订单簿中同时出现
284
- *
285
- * 正确的套利计算必须使用"有效价格":
286
- * - effectiveBuyYes = min(YES.ask, 1 - NO.bid)
287
- * - effectiveBuyNo = min(NO.ask, 1 - YES.bid)
288
- * - effectiveSellYes = max(YES.bid, 1 - NO.ask)
289
- * - effectiveSellNo = max(NO.bid, 1 - YES.ask)
290
- *
291
- * 详细文档见: docs/01-polymarket-orderbook-arbitrage.md
292
- */
293
- processOrderbooks(yesBook, noBook, yesTokenId, noTokenId) {
294
- const yesBestBid = yesBook.bids[0]?.price || 0;
295
- const yesBestAsk = yesBook.asks[0]?.price || 1;
296
- const noBestBid = noBook.bids[0]?.price || 0;
297
- const noBestAsk = noBook.asks[0]?.price || 1;
298
- const yesBidDepth = yesBook.bids.reduce((sum, l) => sum + l.price * l.size, 0);
299
- const yesAskDepth = yesBook.asks.reduce((sum, l) => sum + l.price * l.size, 0);
300
- const noBidDepth = noBook.bids.reduce((sum, l) => sum + l.price * l.size, 0);
301
- const noAskDepth = noBook.asks.reduce((sum, l) => sum + l.price * l.size, 0);
302
- // 原始价格和(仅供参考,可能包含重复计算)
303
- const askSum = yesBestAsk + noBestAsk;
304
- const bidSum = yesBestBid + noBestBid;
305
- // ===== 计算有效价格(考虑镜像订单)=====
306
- // 这是正确的套利计算方式
307
- const effectivePrices = {
308
- // 买 YES: 直接买 YES.ask 或 通过卖 NO (成本 = 1 - NO.bid)
309
- effectiveBuyYes: Math.min(yesBestAsk, 1 - noBestBid),
310
- // 买 NO: 直接买 NO.ask 或 通过卖 YES (成本 = 1 - YES.bid)
311
- effectiveBuyNo: Math.min(noBestAsk, 1 - yesBestBid),
312
- // 卖 YES: 直接卖 YES.bid 或 通过买 NO (收入 = 1 - NO.ask)
313
- effectiveSellYes: Math.max(yesBestBid, 1 - noBestAsk),
314
- // 卖 NO: 直接卖 NO.bid 或 通过买 YES (收入 = 1 - YES.ask)
315
- effectiveSellNo: Math.max(noBestBid, 1 - yesBestAsk),
316
- };
317
- // 有效套利成本/收入
318
- const effectiveLongCost = effectivePrices.effectiveBuyYes + effectivePrices.effectiveBuyNo;
319
- const effectiveShortRevenue = effectivePrices.effectiveSellYes + effectivePrices.effectiveSellNo;
320
- // 套利利润(基于有效价格)
321
- const longArbProfit = 1 - effectiveLongCost;
322
- const shortArbProfit = effectiveShortRevenue - 1;
323
- // YES spread(由于镜像,这也能反映整体市场效率)
324
- const yesSpread = yesBestAsk - yesBestBid;
325
- return {
326
- yes: {
327
- bid: yesBestBid,
328
- ask: yesBestAsk,
329
- bidSize: yesBook.bids[0]?.size || 0,
330
- askSize: yesBook.asks[0]?.size || 0,
331
- bidDepth: yesBidDepth,
332
- askDepth: yesAskDepth,
333
- spread: yesSpread,
334
- tokenId: yesTokenId,
335
- },
336
- no: {
337
- bid: noBestBid,
338
- ask: noBestAsk,
339
- bidSize: noBook.bids[0]?.size || 0,
340
- askSize: noBook.asks[0]?.size || 0,
341
- bidDepth: noBidDepth,
342
- askDepth: noAskDepth,
343
- spread: noBestAsk - noBestBid,
344
- tokenId: noTokenId,
345
- },
346
- summary: {
347
- // 原始价格和(仅供参考)
348
- askSum,
349
- bidSum,
350
- // 有效价格
351
- effectivePrices,
352
- // 有效成本/收入
353
- effectiveLongCost,
354
- effectiveShortRevenue,
355
- // 套利利润(基于有效价格,这才是正确的计算)
356
- longArbProfit, // > 0 means long arbitrage opportunity
357
- shortArbProfit, // > 0 means short arbitrage opportunity
358
- // 其他指标
359
- totalBidDepth: yesBidDepth + noBidDepth,
360
- totalAskDepth: yesAskDepth + noAskDepth,
361
- imbalanceRatio: (yesBidDepth + noBidDepth) / (yesAskDepth + noAskDepth + 0.001),
362
- yesSpread,
363
- },
364
- };
365
- }
366
- // ===== Trading (requires authentication) =====
367
- /**
368
- * Check if this client has trading capabilities
369
- *
370
- * @returns True if a signer or API credentials are configured
371
- *
372
- * @remarks
373
- * Trading requires either:
374
- * - A signer (for L1 authentication)
375
- * - API credentials (for L2 authentication)
376
- *
377
- * For actual trading, use the {@link TradingClient} instead.
378
- *
379
- * @example
380
- * ```typescript
381
- * if (client.hasTradingCapabilities()) {
382
- * console.log('Client can execute trades');
383
- * } else {
384
- * console.log('Read-only mode - use TradingClient for trading');
385
- * }
386
- * ```
387
- */
388
- hasTradingCapabilities() {
389
- return !!(this.config?.signer || this.config?.creds);
390
- }
391
- // ===== Data Normalization =====
392
- normalizeMarket(m) {
393
- const tokens = m.tokens;
394
- const rewards = m.rewards;
395
- return {
396
- // Core identifiers
397
- conditionId: String(m.condition_id || ''),
398
- questionId: m.question_id ? String(m.question_id) : undefined,
399
- marketSlug: String(m.market_slug || ''),
400
- // Market content
401
- question: String(m.question || ''),
402
- description: m.description ? String(m.description) : undefined,
403
- image: m.image ? String(m.image) : undefined,
404
- icon: m.icon ? String(m.icon) : undefined,
405
- // Tokens
406
- tokens: Array.isArray(tokens)
407
- ? tokens.map((t) => ({
408
- tokenId: String(t.token_id || ''),
409
- outcome: String(t.outcome || ''),
410
- price: Number(t.price),
411
- winner: t.winner !== undefined ? Boolean(t.winner) : undefined,
412
- }))
413
- : [],
414
- tags: Array.isArray(m.tags) ? m.tags : undefined,
415
- // Status flags
416
- active: Boolean(m.active),
417
- closed: Boolean(m.closed),
418
- archived: m.archived !== undefined ? Boolean(m.archived) : undefined,
419
- acceptingOrders: Boolean(m.accepting_orders),
420
- acceptingOrderTimestamp: m.accepting_order_timestamp ? String(m.accepting_order_timestamp) : undefined,
421
- enableOrderBook: m.enable_order_book !== undefined ? Boolean(m.enable_order_book) : undefined,
422
- // Trading parameters
423
- minimumOrderSize: m.minimum_order_size !== undefined ? Number(m.minimum_order_size) : undefined,
424
- minimumTickSize: m.minimum_tick_size !== undefined ? Number(m.minimum_tick_size) : undefined,
425
- makerBaseFee: m.maker_base_fee !== undefined ? Number(m.maker_base_fee) : undefined,
426
- takerBaseFee: m.taker_base_fee !== undefined ? Number(m.taker_base_fee) : undefined,
427
- // Timing
428
- endDateIso: m.end_date_iso !== undefined ? (m.end_date_iso === null ? null : String(m.end_date_iso)) : undefined,
429
- gameStartTime: m.game_start_time !== undefined ? (m.game_start_time === null ? null : String(m.game_start_time)) : undefined,
430
- secondsDelay: m.seconds_delay !== undefined ? Number(m.seconds_delay) : undefined,
431
- // Neg risk
432
- negRisk: m.neg_risk !== undefined ? Boolean(m.neg_risk) : undefined,
433
- negRiskMarketId: m.neg_risk_market_id ? String(m.neg_risk_market_id) : undefined,
434
- negRiskRequestId: m.neg_risk_request_id ? String(m.neg_risk_request_id) : undefined,
435
- // Rewards
436
- rewards: rewards ? {
437
- rates: rewards.rates,
438
- minSize: rewards.min_size !== undefined ? Number(rewards.min_size) : undefined,
439
- maxSpread: rewards.max_spread !== undefined ? Number(rewards.max_spread) : undefined,
440
- } : undefined,
441
- // Other
442
- fpmm: m.fpmm ? String(m.fpmm) : undefined,
443
- notificationsEnabled: m.notifications_enabled !== undefined ? Boolean(m.notifications_enabled) : undefined,
444
- is5050Outcome: m.is_50_50_outcome !== undefined ? Boolean(m.is_50_50_outcome) : undefined,
445
- };
446
- }
447
- }
448
- //# sourceMappingURL=clob-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clob-api.js","sourceRoot":"","sources":["../../src/clients/clob-api.ts"],"names":[],"mappings":"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"}