@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,506 @@
1
+ /**
2
+ * Common types used across the SDK
3
+ */
4
+ import type { CacheAdapter } from '@catalyst-team/cache';
5
+ /**
6
+ * Order side: BUY or SELL
7
+ */
8
+ export type Side = 'BUY' | 'SELL';
9
+ /**
10
+ * Order type for limit/market orders
11
+ * - GTC: Good Till Cancelled (default for limit orders)
12
+ * - GTD: Good Till Date (limit order with expiration)
13
+ * - FOK: Fill Or Kill (market order, must fill completely or cancel)
14
+ * - FAK: Fill And Kill (market order, fill what you can, cancel rest)
15
+ */
16
+ export type OrderType = 'GTC' | 'FOK' | 'GTD' | 'FAK';
17
+ /**
18
+ * Base trade interface with common fields
19
+ *
20
+ * This is the minimal set of fields that all trade types share.
21
+ * Specific trade types (Trade, TradeInfo, ActivityTrade, ParsedTrade)
22
+ * extend this with source-specific fields.
23
+ */
24
+ export interface BaseTrade {
25
+ /** Trade side: BUY or SELL */
26
+ side: Side;
27
+ /** Trade price */
28
+ price: number;
29
+ /** Trade size (in shares/tokens) */
30
+ size: number;
31
+ /** Timestamp (Unix milliseconds) */
32
+ timestamp: number;
33
+ }
34
+ /**
35
+ * Price level in an orderbook
36
+ */
37
+ export interface OrderbookLevel {
38
+ price: number;
39
+ size: number;
40
+ }
41
+ /**
42
+ * Unified Orderbook type used across the SDK
43
+ *
44
+ * This is the base orderbook structure. Services may extend this
45
+ * with additional fields (e.g., OrderbookSnapshot adds tickSize, minOrderSize).
46
+ */
47
+ export interface Orderbook {
48
+ /** Token ID (ERC-1155 token identifier) */
49
+ tokenId?: string;
50
+ /** @deprecated Use tokenId instead */
51
+ assetId?: string;
52
+ /** Bid levels (highest first) */
53
+ bids: OrderbookLevel[];
54
+ /** Ask levels (lowest first) */
55
+ asks: OrderbookLevel[];
56
+ /** Timestamp in milliseconds */
57
+ timestamp: number;
58
+ /** Market identifier (conditionId) */
59
+ market?: string;
60
+ /** Hash for change detection */
61
+ hash?: string;
62
+ }
63
+ /**
64
+ * SDK Configuration Options
65
+ *
66
+ * Allows dependency injection of cache adapters for API response caching.
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * import { createMemoryCache } from '@catalyst-team/cache';
71
+ * import { PolymarketSDK } from '@catalyst-team/poly-sdk';
72
+ *
73
+ * // Use external cache adapter
74
+ * const cache = createMemoryCache({ defaultTTL: 120 });
75
+ * const sdk = new PolymarketSDK({ cache });
76
+ *
77
+ * // Or use default internal cache
78
+ * const sdk2 = new PolymarketSDK();
79
+ * ```
80
+ */
81
+ export interface PolySDKOptions {
82
+ /**
83
+ * Optional external cache adapter for API response caching.
84
+ * If not provided, the SDK will use its internal memory cache.
85
+ *
86
+ * Benefits of external cache:
87
+ * - Can use Redis for multi-instance cache sharing
88
+ * - Can configure custom TTL settings
89
+ * - Can track cache hit/miss statistics
90
+ */
91
+ cache?: CacheAdapter;
92
+ /**
93
+ * Blockchain chain ID (default: 137 for Polygon mainnet)
94
+ */
95
+ chainId?: number;
96
+ /**
97
+ * Private key for trading operations (hex string starting with 0x)
98
+ */
99
+ privateKey?: string;
100
+ /**
101
+ * API credentials for trading
102
+ */
103
+ creds?: {
104
+ key: string;
105
+ secret: string;
106
+ passphrase: string;
107
+ };
108
+ }
109
+ export type KLineInterval = '1s' | '5s' | '15s' | '30s' | '1m' | '5m' | '15m' | '30m' | '1h' | '4h' | '12h' | '1d';
110
+ export interface KLineCandle {
111
+ timestamp: number;
112
+ open: number;
113
+ high: number;
114
+ low: number;
115
+ close: number;
116
+ volume: number;
117
+ tradeCount: number;
118
+ buyVolume: number;
119
+ sellVolume: number;
120
+ }
121
+ /**
122
+ * ============================================================================
123
+ * Spread Analysis Types - Two Different Approaches
124
+ * ============================================================================
125
+ *
126
+ * Polymarket 双代币模型:YES + NO = 1 USDC
127
+ * 理想状态下,YES_price + NO_price = 1.0
128
+ * 偏离 1.0 时可能存在套利机会
129
+ *
130
+ * 我们提供两种 Spread 分析方式,各有优劣:
131
+ *
132
+ * ┌─────────────────────────────────────────────────────────────────────────┐
133
+ * │ SpreadDataPoint (历史分析) │ RealtimeSpreadAnalysis (实时分析) │
134
+ * ├─────────────────────────────────────────────────────────────────────────┤
135
+ * │ 数据源: 成交记录的收盘价 │ 数据源: 订单簿的最优 bid/ask │
136
+ * │ YES_close + NO_close │ YES_ask + NO_ask (买入成本) │
137
+ * │ │ YES_bid + NO_bid (卖出收入) │
138
+ * ├─────────────────────────────────────────────────────────────────────────┤
139
+ * │ ✅ 可构建历史曲线 │ ❌ 无法构建历史曲线* │
140
+ * │ ✅ Polymarket 保留成交历史 │ ❌ Polymarket 不保留盘口历史 │
141
+ * │ ✅ 适合回测、模式识别 │ ✅ 适合实盘交易、套利执行 │
142
+ * │ ⚠️ 反映已成交价格,非当前可成交价 │ ✅ 反映当前可立即成交的价格 │
143
+ * │ ⚠️ 套利信号仅供参考 │ ✅ 套利利润计算准确 │
144
+ * └─────────────────────────────────────────────────────────────────────────┘
145
+ *
146
+ * * 如需构建实时 Spread 的历史曲线,必须自行存储盘口快照数据
147
+ * 参考: apps/api/src/services/spread-sampler.ts
148
+ *
149
+ * 核心区别说明:
150
+ *
151
+ * 1. 成交价 vs 盘口价
152
+ * - 成交价 (close): 过去某时刻实际成交的价格
153
+ * - 盘口价 (bid/ask): 当前市场上的最优挂单价格
154
+ * - 例: YES 最后成交 0.52,但当前 bid=0.50, ask=0.54
155
+ *
156
+ * 2. 为什么套利计算用盘口价更准确?
157
+ * - 套利需要同时买入 YES 和 NO
158
+ * - 必须用 ask 价(卖方挂单)计算买入成本
159
+ * - 成交价可能是 bid 方成交,不代表你能以该价买入
160
+ *
161
+ * 3. 为什么历史分析只能用成交价?
162
+ * - Polymarket CLOB API 不保存历史盘口数据
163
+ * - 只有成交记录 (trades) 有历史
164
+ * - 除非你自己运行 spread-sampler 持续采样盘口
165
+ */
166
+ /**
167
+ * 历史 Spread 分析(基于成交收盘价)
168
+ *
169
+ * 用途:
170
+ * - 历史趋势分析、回测
171
+ * - 识别价格偏离模式
172
+ * - 当盘口数据不可用时的替代方案
173
+ *
174
+ * 局限:
175
+ * - priceSpread 仅反映成交价偏离,非实际可套利空间
176
+ * - arbOpportunity 仅为参考信号,实际套利需查看盘口
177
+ *
178
+ * 数据来源:Polymarket Data API /trades 历史成交记录
179
+ */
180
+ export interface SpreadDataPoint {
181
+ timestamp: number;
182
+ yesPrice: number;
183
+ noPrice: number;
184
+ priceSum: number;
185
+ priceSpread: number;
186
+ arbOpportunity: 'LONG' | 'SHORT' | '';
187
+ }
188
+ /**
189
+ * 实时 Spread 分析(基于订单簿 bid/ask)
190
+ *
191
+ * 用途:
192
+ * - 实盘套利决策
193
+ * - 精确计算套利利润
194
+ * - 监控当前市场状态
195
+ *
196
+ * 局限:
197
+ * - ❌ 无法构建历史曲线 - Polymarket 不保存盘口历史
198
+ * - 如需历史数据,必须自行运行采样服务持续存储盘口快照
199
+ * 参考实现: apps/api/src/services/spread-sampler.ts
200
+ *
201
+ * 数据来源:Polymarket CLOB API /book 实时订单簿
202
+ *
203
+ * 套利逻辑:
204
+ * - Long Arb (多头套利): askSum < 1 时,买入 YES + NO 成本 < 1 USDC
205
+ * 利润 = 1 - askSum,因为最终一方会 resolve 为 1 USDC
206
+ *
207
+ * - Short Arb (空头套利): bidSum > 1 时,卖出 YES + NO 收入 > 1 USDC
208
+ * 利润 = bidSum - 1,需要先铸造代币对(成本 1 USDC)
209
+ */
210
+ export interface RealtimeSpreadAnalysis {
211
+ timestamp: number;
212
+ yesBid: number;
213
+ yesAsk: number;
214
+ noBid: number;
215
+ noAsk: number;
216
+ askSum: number;
217
+ bidSum: number;
218
+ askSpread: number;
219
+ bidSpread: number;
220
+ longArbProfit: number;
221
+ shortArbProfit: number;
222
+ arbOpportunity: 'LONG' | 'SHORT' | '';
223
+ arbProfitPercent: number;
224
+ }
225
+ /**
226
+ * 双代币 K 线数据(YES + NO)
227
+ *
228
+ * 包含两种 Spread 分析:
229
+ * - spreadAnalysis: 历史曲线(基于成交价),可回溯
230
+ * - realtimeSpread: 实时快照(基于盘口),仅当前时刻
231
+ */
232
+ export interface DualKLineData {
233
+ conditionId: string;
234
+ interval: KLineInterval;
235
+ market?: UnifiedMarket;
236
+ yes: KLineCandle[];
237
+ no: KLineCandle[];
238
+ /**
239
+ * 历史 Spread 分析(SpreadDataPoint[])
240
+ *
241
+ * ✅ 可构建历史曲线 - 每个 K 线周期一个数据点
242
+ * ⚠️ 基于成交价,套利信号仅供参考
243
+ *
244
+ * 用于:图表展示、趋势分析、回测
245
+ */
246
+ spreadAnalysis?: SpreadDataPoint[];
247
+ /**
248
+ * 实时 Spread 分析(RealtimeSpreadAnalysis)
249
+ *
250
+ * ✅ 套利计算准确 - 基于当前盘口 bid/ask
251
+ * ❌ 仅当前时刻快照,无法构建历史曲线
252
+ *
253
+ * 如需实时 Spread 历史曲线,必须:
254
+ * 1. 运行 spread-sampler 服务持续采样盘口
255
+ * 2. 将快照存储到数据库
256
+ * 3. 从数据库读取构建曲线
257
+ *
258
+ * 用于:实盘套利决策、当前市场状态展示
259
+ */
260
+ realtimeSpread?: RealtimeSpreadAnalysis;
261
+ /** 完整订单簿数据(如需更多细节) */
262
+ currentOrderbook?: ProcessedOrderbook;
263
+ }
264
+ /**
265
+ * 有效价格(考虑镜像订单)
266
+ *
267
+ * Polymarket 的关键特性:买 YES @ P = 卖 NO @ (1-P)
268
+ * 因此同一订单会在两个订单簿中出现
269
+ *
270
+ * 有效价格是考虑镜像后的最优价格:
271
+ * - effectiveBuyYes = min(YES.ask, 1 - NO.bid)
272
+ * - effectiveBuyNo = min(NO.ask, 1 - YES.bid)
273
+ * - effectiveSellYes = max(YES.bid, 1 - NO.ask)
274
+ * - effectiveSellNo = max(NO.bid, 1 - YES.ask)
275
+ */
276
+ export interface EffectivePrices {
277
+ effectiveBuyYes: number;
278
+ effectiveBuyNo: number;
279
+ effectiveSellYes: number;
280
+ effectiveSellNo: number;
281
+ }
282
+ export interface ProcessedOrderbook {
283
+ yes: {
284
+ bid: number;
285
+ ask: number;
286
+ bidSize: number;
287
+ askSize: number;
288
+ bidDepth: number;
289
+ askDepth: number;
290
+ spread: number;
291
+ tokenId?: string;
292
+ };
293
+ no: {
294
+ bid: number;
295
+ ask: number;
296
+ bidSize: number;
297
+ askSize: number;
298
+ bidDepth: number;
299
+ askDepth: number;
300
+ spread: number;
301
+ tokenId?: string;
302
+ };
303
+ summary: {
304
+ askSum: number;
305
+ bidSum: number;
306
+ effectivePrices: EffectivePrices;
307
+ effectiveLongCost: number;
308
+ effectiveShortRevenue: number;
309
+ longArbProfit: number;
310
+ shortArbProfit: number;
311
+ totalBidDepth: number;
312
+ totalAskDepth: number;
313
+ imbalanceRatio: number;
314
+ yesSpread: number;
315
+ };
316
+ }
317
+ export interface ArbitrageOpportunity {
318
+ type: 'long' | 'short';
319
+ profit: number;
320
+ action: string;
321
+ expectedProfit: number;
322
+ }
323
+ export interface PriceUpdate {
324
+ assetId: string;
325
+ price: number;
326
+ midpoint: number;
327
+ spread: number;
328
+ timestamp: number;
329
+ }
330
+ export interface BookUpdate {
331
+ assetId: string;
332
+ bids: Array<{
333
+ price: number;
334
+ size: number;
335
+ }>;
336
+ asks: Array<{
337
+ price: number;
338
+ size: number;
339
+ }>;
340
+ timestamp: number;
341
+ }
342
+ /**
343
+ * Token in a market (YES or NO outcome)
344
+ */
345
+ export interface MarketToken {
346
+ /** ERC-1155 token ID */
347
+ tokenId: string;
348
+ /** Outcome name (e.g., "Yes", "No") */
349
+ outcome: string;
350
+ /** Current price (0-1) */
351
+ price: number;
352
+ /** Whether this token won (after resolution) */
353
+ winner?: boolean;
354
+ }
355
+ /**
356
+ * Unified market type (merged from Gamma and CLOB)
357
+ *
358
+ * This is the primary market type used across the SDK.
359
+ * It combines data from both Gamma API (volume, liquidity) and CLOB API (trading data).
360
+ *
361
+ * BREAKING CHANGE (v2.0): tokens is now an array instead of { yes, no } object.
362
+ * Use tokens.find(t => t.outcome === 'Yes') to get specific outcomes.
363
+ */
364
+ export interface UnifiedMarket {
365
+ /** Market condition ID (primary identifier) */
366
+ conditionId: string;
367
+ /** URL-friendly slug */
368
+ slug: string;
369
+ /** Market question */
370
+ question: string;
371
+ /** Market description */
372
+ description?: string;
373
+ /**
374
+ * Market tokens (YES/NO outcomes)
375
+ * @example tokens.find(t => t.outcome === 'Yes')?.price
376
+ */
377
+ tokens: MarketToken[];
378
+ /** Total volume (USDC) */
379
+ volume: number;
380
+ /** 24-hour volume (USDC) */
381
+ volume24hr?: number;
382
+ /** Liquidity depth (USDC) */
383
+ liquidity: number;
384
+ /** Bid-ask spread */
385
+ spread?: number;
386
+ /** 1-day price change (from Gamma API) */
387
+ oneDayPriceChange?: number;
388
+ /** 1-week price change (from Gamma API) */
389
+ oneWeekPriceChange?: number;
390
+ /** Whether market is active */
391
+ active: boolean;
392
+ /** Whether market is closed (resolved) */
393
+ closed: boolean;
394
+ /** Whether market is accepting orders */
395
+ acceptingOrders: boolean;
396
+ /** Market end date */
397
+ endDate: Date;
398
+ /** Data source indicator */
399
+ source: 'gamma' | 'clob' | 'merged';
400
+ }
401
+ /**
402
+ * Binary tokens for a market (primary/secondary instead of Yes/No)
403
+ *
404
+ * Polymarket supports various outcome names:
405
+ * - Yes/No (standard binary markets)
406
+ * - Up/Down (BTC price predictions)
407
+ * - Team1/Team2 (sports matches)
408
+ * - Heads/Tails (coin flips)
409
+ *
410
+ * Using index-based access (tokens[0], tokens[1]) is more reliable
411
+ * than name-based access (outcome === 'Yes').
412
+ */
413
+ export interface BinaryTokens {
414
+ /** First outcome token (Yes/Up/Team1...) - corresponds to tokens[0] */
415
+ primary: MarketToken;
416
+ /** Second outcome token (No/Down/Team2...) - corresponds to tokens[1] */
417
+ secondary: MarketToken;
418
+ /** Outcome names [primary, secondary] for display purposes */
419
+ outcomes: [string, string];
420
+ }
421
+ /**
422
+ * Get binary tokens from a market's token array
423
+ *
424
+ * Uses index-based access which is stable across all outcome names.
425
+ *
426
+ * @param tokens - Market tokens array
427
+ * @returns BinaryTokens or null if not a binary market
428
+ *
429
+ * @example
430
+ * ```typescript
431
+ * const market = await sdk.markets.getMarket('0x...');
432
+ * const binary = getBinaryTokens(market.tokens);
433
+ * if (binary) {
434
+ * console.log(`${binary.outcomes[0]} price: ${binary.primary.price}`);
435
+ * console.log(`${binary.outcomes[1]} price: ${binary.secondary.price}`);
436
+ * }
437
+ * ```
438
+ */
439
+ export declare function getBinaryTokens(tokens: MarketToken[]): BinaryTokens | null;
440
+ export declare function getIntervalMs(interval: KLineInterval): number;
441
+ /**
442
+ * Supported underlying assets for correlation analysis
443
+ */
444
+ export type UnderlyingAsset = 'BTC' | 'ETH' | 'SOL';
445
+ /**
446
+ * Single data point for token vs underlying correlation
447
+ */
448
+ export interface TokenUnderlyingDataPoint {
449
+ /** Timestamp (Unix ms) */
450
+ timestamp: number;
451
+ /** Primary token price (Up/Yes) from Polymarket trades */
452
+ upPrice?: number;
453
+ /** Secondary token price (Down/No) from Polymarket trades */
454
+ downPrice?: number;
455
+ /** Sum of token prices (should be close to 1.0) */
456
+ priceSum?: number;
457
+ /** Underlying asset price from Binance */
458
+ underlyingPrice: number;
459
+ /** Percentage change from first candle */
460
+ underlyingChange: number;
461
+ }
462
+ /**
463
+ * Correlation coefficients between token prices and underlying asset
464
+ */
465
+ export interface TokenUnderlyingCorrelationCoefficients {
466
+ /** Pearson correlation: Up token price vs underlying price */
467
+ upVsUnderlying: number;
468
+ /** Pearson correlation: Down token price vs underlying price */
469
+ downVsUnderlying: number;
470
+ }
471
+ /**
472
+ * Result of token vs underlying correlation analysis
473
+ *
474
+ * Aligns K-line data from Polymarket tokens (Up/Down) with underlying
475
+ * asset prices from Binance (BTC/ETH/SOL) for correlation analysis.
476
+ *
477
+ * Use cases:
478
+ * - Analyze how well prediction market tokens track underlying prices
479
+ * - Identify divergences between token and underlying prices
480
+ * - Backtest trading strategies based on correlation patterns
481
+ *
482
+ * @example
483
+ * ```typescript
484
+ * const correlation = await sdk.markets.getTokenUnderlyingData(
485
+ * '0x123...', // BTC prediction market
486
+ * 'BTC',
487
+ * '1h',
488
+ * { calculateCorrelation: true }
489
+ * );
490
+ *
491
+ * console.log(`Up token vs BTC correlation: ${correlation.correlation?.upVsUnderlying}`);
492
+ * ```
493
+ */
494
+ export interface TokenUnderlyingCorrelation {
495
+ /** Market condition ID */
496
+ conditionId: string;
497
+ /** Underlying asset (BTC, ETH, SOL) */
498
+ underlying: UnderlyingAsset;
499
+ /** K-line interval */
500
+ interval: KLineInterval;
501
+ /** Aligned data points */
502
+ data: TokenUnderlyingDataPoint[];
503
+ /** Correlation coefficients (if calculated) */
504
+ correlation?: TokenUnderlyingCorrelationCoefficients;
505
+ }
506
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Common types used across the SDK
3
+ */
4
+ /**
5
+ * Get binary tokens from a market's token array
6
+ *
7
+ * Uses index-based access which is stable across all outcome names.
8
+ *
9
+ * @param tokens - Market tokens array
10
+ * @returns BinaryTokens or null if not a binary market
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const market = await sdk.markets.getMarket('0x...');
15
+ * const binary = getBinaryTokens(market.tokens);
16
+ * if (binary) {
17
+ * console.log(`${binary.outcomes[0]} price: ${binary.primary.price}`);
18
+ * console.log(`${binary.outcomes[1]} price: ${binary.secondary.price}`);
19
+ * }
20
+ * ```
21
+ */
22
+ export function getBinaryTokens(tokens) {
23
+ if (!tokens || tokens.length < 2)
24
+ return null;
25
+ return {
26
+ primary: tokens[0],
27
+ secondary: tokens[1],
28
+ outcomes: [tokens[0].outcome, tokens[1].outcome],
29
+ };
30
+ }
31
+ // Helper to convert interval to milliseconds
32
+ export function getIntervalMs(interval) {
33
+ const map = {
34
+ '1s': 1 * 1000,
35
+ '5s': 5 * 1000,
36
+ '15s': 15 * 1000,
37
+ '30s': 30 * 1000,
38
+ '1m': 60 * 1000,
39
+ '5m': 5 * 60 * 1000,
40
+ '15m': 15 * 60 * 1000,
41
+ '30m': 30 * 60 * 1000,
42
+ '1h': 60 * 60 * 1000,
43
+ '4h': 4 * 60 * 60 * 1000,
44
+ '12h': 12 * 60 * 60 * 1000,
45
+ '1d': 24 * 60 * 60 * 1000,
46
+ };
47
+ return map[interval];
48
+ }
49
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAydH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QACpB,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,aAAa,CAAC,QAAuB;IACnD,MAAM,GAAG,GAAkC;QACzC,IAAI,EAAE,CAAC,GAAG,IAAI;QACd,IAAI,EAAE,CAAC,GAAG,IAAI;QACd,KAAK,EAAE,EAAE,GAAG,IAAI;QAChB,KAAK,EAAE,EAAE,GAAG,IAAI;QAChB,IAAI,EAAE,EAAE,GAAG,IAAI;QACf,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;QACnB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;QACrB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;QACrB,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;QACpB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QACxB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAC1B,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;KAC1B,CAAC;IACF,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Core Types Unit Tests
3
+ *
4
+ * Tests type definitions and type guards
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../../src/core/types.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}