@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,164 @@
1
+ /**
2
+ * Dip Arbitrage Service Types
3
+ *
4
+ * 暴跌套利服务类型定义
5
+ *
6
+ * 策略原理:
7
+ * 在 Polymarket 的 BTC/ETH/SOL/XRP UP/DOWN 短期市场中:
8
+ *
9
+ * 1. 每个市场有一个 "price to beat"(开盘时的 Chainlink 价格)
10
+ * 2. 结算规则:
11
+ * - UP 赢:结束时价格 >= price to beat
12
+ * - DOWN 赢:结束时价格 < price to beat
13
+ *
14
+ * 3. 套利流程:
15
+ * - Leg1:检测暴跌 → 买入暴跌侧
16
+ * - Leg2:等待对冲条件 → 买入另一侧
17
+ * - 利润:总成本 < $1 时获得无风险利润
18
+ */
19
+ /**
20
+ * 默认配置
21
+ */
22
+ export const DEFAULT_DIP_ARB_CONFIG = {
23
+ shares: 20,
24
+ sumTarget: 0.92, // ✅ 放宽到 0.92 提高 Leg2 成交率 (8%+ 利润)
25
+ dipThreshold: 0.15,
26
+ windowMinutes: 2,
27
+ slidingWindowMs: 3000, // 3秒滑动窗口 - 核心参数!
28
+ maxSlippage: 0.02,
29
+ minProfitRate: 0.03,
30
+ leg2TimeoutSeconds: 180, // ✅ 缩短到 3 分钟,更快退出未对冲仓位
31
+ enableSurge: true,
32
+ surgeThreshold: 0.15,
33
+ autoMerge: true,
34
+ autoExecute: false,
35
+ executionCooldown: 3000,
36
+ splitOrders: 1, // ✅ 默认不拆分,避免份额误差
37
+ orderIntervalMs: 500, // 拆分订单间隔 500ms
38
+ debug: false,
39
+ };
40
+ /**
41
+ * 默认自动轮换配置
42
+ */
43
+ export const DEFAULT_AUTO_ROTATE_CONFIG = {
44
+ enabled: false,
45
+ underlyings: ['BTC'],
46
+ duration: '15m',
47
+ preloadMinutes: 2,
48
+ autoSettle: true,
49
+ settleStrategy: 'redeem',
50
+ redeemWaitMinutes: 5,
51
+ redeemRetryIntervalSeconds: 30,
52
+ };
53
+ // ============= Helper Functions =============
54
+ /**
55
+ * 创建初始统计
56
+ */
57
+ export function createDipArbInitialStats() {
58
+ return {
59
+ startTime: Date.now(),
60
+ runningTimeMs: 0,
61
+ roundsMonitored: 0,
62
+ roundsCompleted: 0,
63
+ roundsSuccessful: 0,
64
+ roundsExpired: 0,
65
+ signalsDetected: 0,
66
+ leg1Filled: 0,
67
+ leg2Filled: 0,
68
+ totalSpent: 0,
69
+ totalProfit: 0,
70
+ avgProfitRate: 0,
71
+ };
72
+ }
73
+ /**
74
+ * 创建新轮次状态
75
+ */
76
+ export function createDipArbRoundState(roundId, priceToBeat, upPrice, downPrice, durationMinutes = 15) {
77
+ const now = Date.now();
78
+ return {
79
+ roundId,
80
+ startTime: now,
81
+ endTime: now + durationMinutes * 60 * 1000,
82
+ priceToBeat,
83
+ openPrices: {
84
+ up: upPrice,
85
+ down: downPrice,
86
+ },
87
+ phase: 'waiting',
88
+ };
89
+ }
90
+ /**
91
+ * 计算利润率
92
+ */
93
+ export function calculateDipArbProfitRate(totalCost) {
94
+ if (totalCost >= 1 || totalCost <= 0)
95
+ return 0;
96
+ return (1 - totalCost) / totalCost;
97
+ }
98
+ /**
99
+ * 计算基于底层资产价格变化的"真实"胜率
100
+ *
101
+ * @param currentPrice - 当前价格
102
+ * @param priceToBeat - 开盘价格
103
+ * @returns UP 的真实胜率估计 (0-1)
104
+ */
105
+ export function estimateUpWinRate(currentPrice, priceToBeat) {
106
+ if (priceToBeat <= 0)
107
+ return 0.5;
108
+ const priceChange = (currentPrice - priceToBeat) / priceToBeat;
109
+ // 简单模型:价格变化 1% 对应胜率变化约 10%
110
+ const sensitivity = 10;
111
+ const winRateShift = priceChange * sensitivity;
112
+ // 限制在 [0.05, 0.95] 范围内
113
+ return Math.max(0.05, Math.min(0.95, 0.5 + winRateShift));
114
+ }
115
+ /**
116
+ * 检测定价偏差
117
+ *
118
+ * @param tokenPrice - token 当前价格(隐含胜率)
119
+ * @param estimatedWinRate - 基于价格估计的真实胜率
120
+ * @returns 偏差程度(正数 = 被低估,负数 = 被高估)
121
+ */
122
+ export function detectMispricing(tokenPrice, estimatedWinRate) {
123
+ return estimatedWinRate - tokenPrice;
124
+ }
125
+ /**
126
+ * 从 slug 解析底层资产
127
+ * e.g., 'btc-updown-15m-1767165300' → 'BTC'
128
+ */
129
+ export function parseUnderlyingFromSlug(slug) {
130
+ const lower = slug.toLowerCase();
131
+ if (lower.startsWith('btc'))
132
+ return 'BTC';
133
+ if (lower.startsWith('eth'))
134
+ return 'ETH';
135
+ if (lower.startsWith('sol'))
136
+ return 'SOL';
137
+ if (lower.startsWith('xrp'))
138
+ return 'XRP';
139
+ return 'BTC'; // default
140
+ }
141
+ /**
142
+ * 从 slug 解析时长
143
+ * e.g., 'btc-updown-15m-1767165300' → 15
144
+ */
145
+ export function parseDurationFromSlug(slug) {
146
+ if (slug.includes('-5m-'))
147
+ return 5;
148
+ if (slug.includes('-15m-'))
149
+ return 15;
150
+ return 15; // default
151
+ }
152
+ /**
153
+ * 类型守卫:检查是否为 Leg1 信号
154
+ */
155
+ export function isDipArbLeg1Signal(signal) {
156
+ return signal.type === 'leg1';
157
+ }
158
+ /**
159
+ * 类型守卫:检查是否为 Leg2 信号
160
+ */
161
+ export function isDipArbLeg2Signal(signal) {
162
+ return signal.type === 'leg2';
163
+ }
164
+ //# sourceMappingURL=dip-arb-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dip-arb-types.js","sourceRoot":"","sources":["../../../src/services/dip-arb-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,370 @@
1
+ /**
2
+ * Market Service
3
+ *
4
+ * Provides market data and analysis:
5
+ * - Market info and discovery
6
+ * - Orderbook data and analysis
7
+ * - K-Line aggregation from trade data
8
+ * - Spread analysis
9
+ * - Arbitrage detection
10
+ */
11
+ import { DataApiClient } from '../clients/data-api.js';
12
+ import { GammaApiClient, GammaMarket } from '../clients/gamma-api.js';
13
+ import type { UnifiedCache } from '../core/unified-cache.js';
14
+ import { RateLimiter } from '../core/rate-limiter.js';
15
+ import type { UnifiedMarket, ProcessedOrderbook, ArbitrageOpportunity, KLineInterval, KLineCandle, DualKLineData, RealtimeSpreadAnalysis, Side, Orderbook, UnderlyingAsset, TokenUnderlyingCorrelation } from '../core/types.js';
16
+ import type { BinanceService } from './binance-service.js';
17
+ export declare const POLYGON_MAINNET = 137;
18
+ export type { Side, Orderbook } from '../core/types.js';
19
+ export type PriceHistoryIntervalString = '1h' | '6h' | '1d' | '1w' | 'max';
20
+ export interface PriceHistoryParams {
21
+ tokenId: string;
22
+ interval?: PriceHistoryIntervalString;
23
+ startTs?: number;
24
+ endTs?: number;
25
+ fidelity?: number;
26
+ }
27
+ export interface PricePoint {
28
+ timestamp: number;
29
+ price: number;
30
+ }
31
+ export interface MarketServiceConfig {
32
+ /** Private key for CLOB client auth (optional, for authenticated endpoints) */
33
+ privateKey?: string;
34
+ /** Chain ID (default: Polygon mainnet 137) */
35
+ chainId?: number;
36
+ }
37
+ /**
38
+ * CLOB Market type (from CLOB API)
39
+ *
40
+ * This represents the raw market data from the CLOB API.
41
+ * For merged market data with volume/liquidity, use UnifiedMarket from core/types.ts.
42
+ */
43
+ export interface Market {
44
+ conditionId: string;
45
+ questionId?: string;
46
+ marketSlug: string;
47
+ question: string;
48
+ description?: string;
49
+ tokens: MarketToken[];
50
+ active: boolean;
51
+ closed: boolean;
52
+ acceptingOrders: boolean;
53
+ endDateIso?: string | null;
54
+ negRisk?: boolean;
55
+ minimumOrderSize?: number;
56
+ minimumTickSize?: number;
57
+ }
58
+ /**
59
+ * Token in a CLOB market
60
+ * Same structure as MarketToken in core/types.ts
61
+ */
62
+ export interface MarketToken {
63
+ tokenId: string;
64
+ outcome: string;
65
+ price: number;
66
+ winner?: boolean;
67
+ }
68
+ export declare class MarketService {
69
+ private gammaApi;
70
+ private dataApi;
71
+ private rateLimiter;
72
+ private cache;
73
+ private config?;
74
+ private binanceService?;
75
+ private clobClient;
76
+ private initialized;
77
+ constructor(gammaApi: GammaApiClient | undefined, dataApi: DataApiClient | undefined, rateLimiter: RateLimiter, cache: UnifiedCache, config?: MarketServiceConfig | undefined, binanceService?: BinanceService | undefined);
78
+ private ensureInitialized;
79
+ /**
80
+ * Get market from CLOB by condition ID
81
+ */
82
+ getClobMarket(conditionId: string): Promise<Market | null>;
83
+ /**
84
+ * Get multiple markets from CLOB
85
+ */
86
+ getClobMarkets(nextCursor?: string): Promise<{
87
+ markets: Market[];
88
+ nextCursor: string;
89
+ }>;
90
+ /**
91
+ * Get orderbook for a single token
92
+ */
93
+ getTokenOrderbook(tokenId: string): Promise<Orderbook>;
94
+ /**
95
+ * Get orderbooks for multiple tokens
96
+ */
97
+ getTokenOrderbooks(params: Array<{
98
+ tokenId: string;
99
+ side: Side;
100
+ }>): Promise<Map<string, Orderbook>>;
101
+ /**
102
+ * Get processed orderbook with arbitrage analysis for a market
103
+ */
104
+ getProcessedOrderbook(conditionId: string): Promise<ProcessedOrderbook>;
105
+ /**
106
+ * Get price history for a token
107
+ */
108
+ getPricesHistory(params: PriceHistoryParams): Promise<PricePoint[]>;
109
+ /**
110
+ * Get midpoint price for a token
111
+ */
112
+ getMidpoint(tokenId: string): Promise<number>;
113
+ /**
114
+ * Get spread for a token
115
+ */
116
+ getSpread(tokenId: string): Promise<number>;
117
+ /**
118
+ * Get last trade price for a token
119
+ */
120
+ getLastTradePrice(tokenId: string): Promise<number>;
121
+ /**
122
+ * Get market by slug or condition ID
123
+ */
124
+ getMarket(identifier: string): Promise<UnifiedMarket>;
125
+ private getMarketBySlug;
126
+ private getMarketByConditionId;
127
+ /**
128
+ * Get K-Line candles for a market (single token)
129
+ *
130
+ * @param conditionId - Market condition ID
131
+ * @param interval - K-line interval (1s, 5s, 15s, 30s, 1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d)
132
+ * @param options - Query options
133
+ * @param options.limit - Maximum number of trades to fetch for aggregation (default: 1000)
134
+ * @param options.tokenId - Filter by specific token ID
135
+ * @param options.outcomeIndex - Filter by outcome index (0 = primary, 1 = secondary)
136
+ * @param options.startTimestamp - Start timestamp (Unix ms) - filter trades after this time
137
+ * @param options.endTimestamp - End timestamp (Unix ms) - filter trades before this time
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * // Get 5s candles for the last 15 minutes
142
+ * const now = Date.now();
143
+ * const candles = await sdk.markets.getKLines(conditionId, '5s', {
144
+ * startTimestamp: now - 15 * 60 * 1000,
145
+ * endTimestamp: now,
146
+ * });
147
+ * ```
148
+ */
149
+ getKLines(conditionId: string, interval: KLineInterval, options?: {
150
+ limit?: number;
151
+ tokenId?: string;
152
+ outcomeIndex?: number;
153
+ startTimestamp?: number;
154
+ endTimestamp?: number;
155
+ }): Promise<KLineCandle[]>;
156
+ /**
157
+ * Get dual K-Lines (YES + NO tokens)
158
+ *
159
+ * @param conditionId - Market condition ID
160
+ * @param interval - K-line interval (1s, 5s, 15s, 30s, 1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d)
161
+ * @param options - Query options
162
+ * @param options.limit - Maximum number of trades to fetch for aggregation (default: 1000)
163
+ * @param options.startTimestamp - Start timestamp (Unix ms) - filter trades after this time
164
+ * @param options.endTimestamp - End timestamp (Unix ms) - filter trades before this time
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * // Get 15s dual K-lines for a 15-minute market
169
+ * const now = Date.now();
170
+ * const data = await sdk.markets.getDualKLines(conditionId, '15s', {
171
+ * startTimestamp: now - 15 * 60 * 1000,
172
+ * endTimestamp: now,
173
+ * });
174
+ * console.log(`Up candles: ${data.yes.length}, Down candles: ${data.no.length}`);
175
+ * ```
176
+ */
177
+ getDualKLines(conditionId: string, interval: KLineInterval, options?: {
178
+ limit?: number;
179
+ startTimestamp?: number;
180
+ endTimestamp?: number;
181
+ }): Promise<DualKLineData>;
182
+ /**
183
+ * Get aligned K-line data for token and underlying asset
184
+ *
185
+ * This method fetches K-line data from both Polymarket (token prices)
186
+ * and Binance (underlying asset prices), aligns them by timestamp,
187
+ * and optionally calculates Pearson correlation coefficients.
188
+ *
189
+ * @param conditionId - Market condition ID
190
+ * @param underlying - Underlying asset (BTC, ETH, SOL)
191
+ * @param interval - K-line interval (must be supported by both Poly and Binance)
192
+ * @param options - Optional parameters
193
+ * @returns Aligned data with optional correlation coefficients
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * const data = await marketService.getTokenUnderlyingData(
198
+ * '0x123...',
199
+ * 'BTC',
200
+ * '1h',
201
+ * { limit: 100, calculateCorrelation: true }
202
+ * );
203
+ *
204
+ * // Access aligned data
205
+ * for (const point of data.data) {
206
+ * console.log(`${point.timestamp}: Up=${point.upPrice}, BTC=${point.underlyingPrice}`);
207
+ * }
208
+ *
209
+ * // Check correlation
210
+ * if (data.correlation) {
211
+ * console.log(`Correlation: ${data.correlation.upVsUnderlying}`);
212
+ * }
213
+ * ```
214
+ */
215
+ getTokenUnderlyingData(conditionId: string, underlying: UnderlyingAsset, interval: KLineInterval, options?: {
216
+ limit?: number;
217
+ calculateCorrelation?: boolean;
218
+ }): Promise<TokenUnderlyingCorrelation>;
219
+ /**
220
+ * Find the nearest available price for a timestamp
221
+ */
222
+ private findNearestPrice;
223
+ /**
224
+ * Calculate Pearson correlation coefficients
225
+ */
226
+ private calculatePearsonCorrelation;
227
+ /**
228
+ * Calculate Pearson correlation coefficient between two arrays
229
+ * Returns a value between -1 and 1
230
+ */
231
+ private pearson;
232
+ /**
233
+ * Aggregate trades into K-Line candles
234
+ *
235
+ * Note: Polymarket API may return timestamps in seconds or milliseconds.
236
+ * This function normalizes all timestamps to milliseconds for consistent handling.
237
+ */
238
+ private aggregateToKLines;
239
+ /**
240
+ * Analyze historical spread from trade close prices (for backtesting)
241
+ *
242
+ * This uses trade close prices, not orderbook bid/ask.
243
+ * Useful for:
244
+ * - Historical analysis / backtesting
245
+ * - Understanding past price movements
246
+ * - Identifying patterns when orderbook data unavailable
247
+ */
248
+ private analyzeHistoricalSpread;
249
+ /**
250
+ * Calculate real-time spread from orderbook (for live trading)
251
+ *
252
+ * This uses orderbook bid/ask prices for accurate arbitrage detection.
253
+ * Useful for:
254
+ * - Real-time arbitrage execution
255
+ * - Live trading decisions
256
+ * - Accurate profit calculations
257
+ */
258
+ private calculateRealtimeSpread;
259
+ /**
260
+ * Get real-time spread analysis only (without K-lines)
261
+ * Use this for quick arbitrage checks
262
+ */
263
+ getRealtimeSpread(conditionId: string): Promise<RealtimeSpreadAnalysis>;
264
+ /**
265
+ * Get processed orderbook with analytics (alias for getProcessedOrderbook)
266
+ */
267
+ getOrderbook(conditionId: string): Promise<ProcessedOrderbook>;
268
+ /**
269
+ * Detect arbitrage opportunity
270
+ *
271
+ * 使用有效价格(考虑镜像订单)计算套利机会
272
+ * 详细原理见: docs/01-polymarket-orderbook-arbitrage.md
273
+ */
274
+ detectArbitrage(conditionId: string, threshold?: number): Promise<ArbitrageOpportunity | null>;
275
+ /**
276
+ * Get trending markets
277
+ */
278
+ getTrendingMarkets(limit?: number): Promise<GammaMarket[]>;
279
+ /**
280
+ * Search markets
281
+ */
282
+ searchMarkets(params: {
283
+ active?: boolean;
284
+ closed?: boolean;
285
+ limit?: number;
286
+ offset?: number;
287
+ order?: string;
288
+ }): Promise<GammaMarket[]>;
289
+ /**
290
+ * Scan for short-term crypto markets (Up/Down markets ending soon)
291
+ *
292
+ * ## Market Types
293
+ * Polymarket has short-term crypto markets in two durations:
294
+ * - **5-minute markets**: slug pattern `{coin}-updown-5m-{timestamp}`
295
+ * - **15-minute markets**: slug pattern `{coin}-updown-15m-{timestamp}`
296
+ *
297
+ * ## Slug Pattern
298
+ * The timestamp in the slug is the START time of the time window:
299
+ * - 15-minute markets: `{coin}-updown-15m-{Math.floor(startTime / 900) * 900}`
300
+ * - 5-minute markets: `{coin}-updown-5m-{Math.floor(startTime / 300) * 300}`
301
+ *
302
+ * Example: `btc-updown-15m-1767456000` starts at 1767456000 (16:00:00 UTC)
303
+ * and ends 15 minutes later at 1767456900 (16:15:00 UTC)
304
+ *
305
+ * ## Supported Coins
306
+ * - BTC (Bitcoin)
307
+ * - ETH (Ethereum)
308
+ * - SOL (Solana)
309
+ * - XRP (Ripple)
310
+ *
311
+ * ## Market Lifecycle Rules
312
+ * 1. Markets are created ahead of time (before they become tradeable)
313
+ * 2. New markets may not have prices yet (show 0.5/0.5)
314
+ * 3. When one market ends, the next one is already open for trading
315
+ * 4. A market ending doesn't mean no price - it means resolution is pending
316
+ *
317
+ * ## Outcomes
318
+ * All crypto short-term markets have:
319
+ * - outcomes: ["Up", "Down"]
320
+ * - Resolution based on price movement during the time window
321
+ *
322
+ * @param options - Scan options
323
+ * @param options.minMinutesUntilEnd - Minimum minutes until market ends (default: 5)
324
+ * @param options.maxMinutesUntilEnd - Maximum minutes until market ends (default: 60)
325
+ * @param options.limit - Maximum number of markets to return (default: 20)
326
+ * @param options.sortBy - Sort field: 'endDate' | 'volume' | 'liquidity' (default: 'endDate')
327
+ * @param options.duration - Filter by duration: '5m' | '15m' | 'all' (default: 'all')
328
+ * @param options.coin - Filter by coin: 'BTC' | 'ETH' | 'SOL' | 'XRP' | 'all' (default: 'all')
329
+ * @returns Array of crypto short-term markets
330
+ *
331
+ * @example
332
+ * ```typescript
333
+ * // Find all 15-minute markets ending in 5-30 minutes
334
+ * const markets = await sdk.markets.scanCryptoShortTermMarkets({
335
+ * minMinutesUntilEnd: 5,
336
+ * maxMinutesUntilEnd: 30,
337
+ * duration: '15m',
338
+ * });
339
+ *
340
+ * // Find BTC 5-minute markets only
341
+ * const btcMarkets = await sdk.markets.scanCryptoShortTermMarkets({
342
+ * coin: 'BTC',
343
+ * duration: '5m',
344
+ * });
345
+ * ```
346
+ */
347
+ scanCryptoShortTermMarkets(options?: {
348
+ minMinutesUntilEnd?: number;
349
+ maxMinutesUntilEnd?: number;
350
+ limit?: number;
351
+ sortBy?: 'endDate' | 'volume' | 'liquidity';
352
+ duration?: '5m' | '15m' | 'all';
353
+ coin?: 'BTC' | 'ETH' | 'SOL' | 'XRP' | 'all';
354
+ }): Promise<GammaMarket[]>;
355
+ /**
356
+ * Detect market signals (volume surge, depth imbalance, whale trades)
357
+ */
358
+ detectMarketSignals(conditionId: string): Promise<Array<{
359
+ type: 'volume_surge' | 'depth_imbalance' | 'whale_trade' | 'momentum';
360
+ severity: 'low' | 'medium' | 'high';
361
+ details: Record<string, unknown>;
362
+ }>>;
363
+ private normalizeClobMarket;
364
+ private processOrderbooks;
365
+ private mergeMarkets;
366
+ private fromGammaMarket;
367
+ private fromClobMarket;
368
+ }
369
+ export declare function getIntervalMs(interval: KLineInterval): number;
370
+ //# sourceMappingURL=market-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market-service.d.ts","sourceRoot":"","sources":["../../../src/services/market-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,EAAE,aAAa,EAAS,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAW,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACV,aAAa,EAEb,kBAAkB,EAElB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,aAAa,EAEb,sBAAsB,EACtB,IAAI,EACJ,SAAS,EACT,eAAe,EACf,0BAA0B,EAE3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,sBAAsB,CAAC;AAM5E,eAAO,MAAM,eAAe,MAAM,CAAC;AAmCnC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,MAAM,0BAA0B,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAwBD;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,cAAc,CAAC;IATzB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,WAAW,CAAS;gBAGlB,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,YAAY,EACnB,MAAM,CAAC,EAAE,mBAAmB,YAAA,EAC5B,cAAc,CAAC,EAAE,cAAc,YAAA;YAO3B,iBAAiB;IAqB/B;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsBhE;;OAEG;IACG,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAW7F;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA+B5D;;OAEG;IACG,kBAAkB,CACtB,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,GAC7C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAwClC;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqB7E;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BzE;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQnD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjD;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYzD;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAU7C,eAAe;YAoBf,sBAAsB;IAoDpC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACA,OAAO,CAAC,WAAW,EAAE,CAAC;IAsBzB;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACA,OAAO,CAAC,aAAa,CAAC;IA+CzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,sBAAsB,CAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,eAAe,EAC3B,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,GACA,OAAO,CAAC,0BAA0B,CAAC;IAoGtC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAuBnC;;;OAGG;IACH,OAAO,CAAC,OAAO;IAgCf;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA0CzB;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IA0C/B;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IAmC/B;;;OAGG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAO7E;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIpE;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IA6BnG;;OAEG;IACG,kBAAkB,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAO5D;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE;QAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAO1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyDG;IACG,0BAA0B,CAAC,OAAO,CAAC,EAAE;QACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;QAC5C,QAAQ,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;KAC9C,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA8G1B;;OAEG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CACrD,KAAK,CAAC;QACJ,IAAI,EAAE,cAAc,GAAG,iBAAiB,GAAG,aAAa,GAAG,UAAU,CAAC;QACtE,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC,CACH;IAgED,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,iBAAiB;IAwEzB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,cAAc;CA0BvB;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAmB7D"}