@catalyst-team/poly-sdk 0.2.0 → 0.3.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 (242) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +548 -813
  3. package/README.zh-CN.md +805 -0
  4. package/dist/__tests__/clob-api.test.d.ts +5 -0
  5. package/dist/__tests__/clob-api.test.d.ts.map +1 -0
  6. package/dist/__tests__/clob-api.test.js +240 -0
  7. package/dist/__tests__/clob-api.test.js.map +1 -0
  8. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts +12 -0
  9. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
  10. package/dist/__tests__/integration/arbitrage-service.integration.test.js +267 -0
  11. package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
  12. package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
  13. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
  14. package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
  15. package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
  16. package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
  17. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
  18. package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
  19. package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
  20. package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
  21. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
  22. package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
  23. package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
  24. package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
  25. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
  26. package/dist/__tests__/integration/data-api.integration.test.js +164 -0
  27. package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
  28. package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
  29. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
  30. package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
  31. package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
  32. package/dist/__tests__/integration/market-service.integration.test.d.ts +10 -0
  33. package/dist/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
  34. package/dist/__tests__/integration/market-service.integration.test.js +173 -0
  35. package/dist/__tests__/integration/market-service.integration.test.js.map +1 -0
  36. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts +10 -0
  37. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
  38. package/dist/__tests__/integration/realtime-service-v2.integration.test.js +307 -0
  39. package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
  40. package/dist/__tests__/integration/trading-service.integration.test.d.ts +10 -0
  41. package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
  42. package/dist/__tests__/integration/trading-service.integration.test.js +58 -0
  43. package/dist/__tests__/integration/trading-service.integration.test.js.map +1 -0
  44. package/dist/__tests__/test-utils.d.ts +92 -0
  45. package/dist/__tests__/test-utils.d.ts.map +1 -0
  46. package/dist/__tests__/test-utils.js +143 -0
  47. package/dist/__tests__/test-utils.js.map +1 -0
  48. package/dist/clients/bridge-client.d.ts +388 -0
  49. package/dist/clients/bridge-client.d.ts.map +1 -0
  50. package/dist/clients/bridge-client.js +587 -0
  51. package/dist/clients/bridge-client.js.map +1 -0
  52. package/dist/clients/clob-api.d.ts +391 -0
  53. package/dist/clients/clob-api.d.ts.map +1 -0
  54. package/dist/clients/clob-api.js +448 -0
  55. package/dist/clients/clob-api.js.map +1 -0
  56. package/dist/clients/ctf-client.d.ts +473 -0
  57. package/dist/clients/ctf-client.d.ts.map +1 -0
  58. package/dist/clients/ctf-client.js +915 -0
  59. package/dist/clients/ctf-client.js.map +1 -0
  60. package/dist/clients/data-api.d.ts +439 -0
  61. package/dist/clients/data-api.d.ts.map +1 -0
  62. package/dist/clients/data-api.js +592 -0
  63. package/dist/clients/data-api.js.map +1 -0
  64. package/dist/clients/gamma-api.d.ts +401 -0
  65. package/dist/clients/gamma-api.d.ts.map +1 -0
  66. package/dist/clients/gamma-api.js +352 -0
  67. package/dist/clients/gamma-api.js.map +1 -0
  68. package/dist/clients/subgraph.d.ts +196 -0
  69. package/dist/clients/subgraph.d.ts.map +1 -0
  70. package/dist/clients/subgraph.js +332 -0
  71. package/dist/clients/subgraph.js.map +1 -0
  72. package/dist/clients/trading-client.d.ts +252 -0
  73. package/dist/clients/trading-client.d.ts.map +1 -0
  74. package/dist/clients/trading-client.js +543 -0
  75. package/dist/clients/trading-client.js.map +1 -0
  76. package/dist/clients/websocket-manager.d.ts +103 -0
  77. package/dist/clients/websocket-manager.d.ts.map +1 -0
  78. package/dist/clients/websocket-manager.js +200 -0
  79. package/dist/clients/websocket-manager.js.map +1 -0
  80. package/dist/core/cache-adapter-bridge.d.ts +36 -0
  81. package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
  82. package/dist/core/cache-adapter-bridge.js +81 -0
  83. package/dist/core/cache-adapter-bridge.js.map +1 -0
  84. package/dist/core/cache.d.ts +41 -0
  85. package/dist/core/cache.d.ts.map +1 -0
  86. package/dist/core/cache.js +72 -0
  87. package/dist/core/cache.js.map +1 -0
  88. package/dist/core/errors.d.ts +39 -0
  89. package/dist/core/errors.d.ts.map +1 -0
  90. package/dist/core/errors.js +86 -0
  91. package/dist/core/errors.js.map +1 -0
  92. package/dist/core/rate-limiter.d.ts +32 -0
  93. package/dist/core/rate-limiter.d.ts.map +1 -0
  94. package/dist/core/rate-limiter.js +75 -0
  95. package/dist/core/rate-limiter.js.map +1 -0
  96. package/dist/core/types.d.ts +402 -0
  97. package/dist/core/types.d.ts.map +1 -0
  98. package/dist/core/types.js +19 -0
  99. package/dist/core/types.js.map +1 -0
  100. package/dist/core/types.test.d.ts +7 -0
  101. package/dist/core/types.test.d.ts.map +1 -0
  102. package/dist/core/types.test.js +122 -0
  103. package/dist/core/types.test.js.map +1 -0
  104. package/dist/core/unified-cache.d.ts +63 -0
  105. package/dist/core/unified-cache.d.ts.map +1 -0
  106. package/dist/core/unified-cache.js +114 -0
  107. package/dist/core/unified-cache.js.map +1 -0
  108. package/dist/index.d.ts +151 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +248 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/services/arbitrage-service.d.ts +409 -0
  113. package/dist/services/arbitrage-service.d.ts.map +1 -0
  114. package/dist/services/arbitrage-service.js +1440 -0
  115. package/dist/services/arbitrage-service.js.map +1 -0
  116. package/dist/services/authorization-service.d.ts +97 -0
  117. package/dist/services/authorization-service.d.ts.map +1 -0
  118. package/dist/services/authorization-service.js +279 -0
  119. package/dist/services/authorization-service.js.map +1 -0
  120. package/dist/services/market-service.d.ts +208 -0
  121. package/dist/services/market-service.d.ts.map +1 -0
  122. package/dist/services/market-service.js +774 -0
  123. package/dist/services/market-service.js.map +1 -0
  124. package/dist/services/onchain-service.d.ts +309 -0
  125. package/dist/services/onchain-service.d.ts.map +1 -0
  126. package/dist/services/onchain-service.js +417 -0
  127. package/dist/services/onchain-service.js.map +1 -0
  128. package/dist/services/realtime-service-v2.d.ts +361 -0
  129. package/dist/services/realtime-service-v2.d.ts.map +1 -0
  130. package/dist/services/realtime-service-v2.js +840 -0
  131. package/dist/services/realtime-service-v2.js.map +1 -0
  132. package/dist/services/realtime-service.d.ts +82 -0
  133. package/dist/services/realtime-service.d.ts.map +1 -0
  134. package/dist/services/realtime-service.js +182 -0
  135. package/dist/services/realtime-service.js.map +1 -0
  136. package/dist/services/smart-money-service.d.ts +196 -0
  137. package/dist/services/smart-money-service.d.ts.map +1 -0
  138. package/dist/services/smart-money-service.js +358 -0
  139. package/dist/services/smart-money-service.js.map +1 -0
  140. package/dist/services/swap-service.d.ts +217 -0
  141. package/dist/services/swap-service.d.ts.map +1 -0
  142. package/dist/services/swap-service.js +695 -0
  143. package/dist/services/swap-service.js.map +1 -0
  144. package/dist/services/trading-service.d.ts +156 -0
  145. package/dist/services/trading-service.d.ts.map +1 -0
  146. package/dist/services/trading-service.js +356 -0
  147. package/dist/services/trading-service.js.map +1 -0
  148. package/dist/services/wallet-service.d.ts +275 -0
  149. package/dist/services/wallet-service.d.ts.map +1 -0
  150. package/dist/services/wallet-service.js +630 -0
  151. package/dist/services/wallet-service.js.map +1 -0
  152. package/dist/utils/price-utils.d.ts +153 -0
  153. package/dist/utils/price-utils.d.ts.map +1 -0
  154. package/dist/utils/price-utils.js +236 -0
  155. package/dist/utils/price-utils.js.map +1 -0
  156. package/dist/utils/price-utils.test.d.ts +5 -0
  157. package/dist/utils/price-utils.test.d.ts.map +1 -0
  158. package/dist/utils/price-utils.test.js +192 -0
  159. package/dist/utils/price-utils.test.js.map +1 -0
  160. package/package.json +10 -4
  161. package/README.en.md +0 -538
  162. package/docs/00-design.md +0 -760
  163. package/docs/02-API.md +0 -1148
  164. package/docs/arb/test-plan.md +0 -387
  165. package/docs/arb/test-results.md +0 -336
  166. package/docs/arbitrage.md +0 -754
  167. package/docs/reports/smart-money-analysis-2025-12-23-cn.md +0 -840
  168. package/examples/01-basic-usage.ts +0 -68
  169. package/examples/02-smart-money.ts +0 -95
  170. package/examples/03-market-analysis.ts +0 -108
  171. package/examples/04-kline-aggregation.ts +0 -158
  172. package/examples/05-follow-wallet-strategy.ts +0 -156
  173. package/examples/06-services-demo.ts +0 -124
  174. package/examples/07-realtime-websocket.ts +0 -117
  175. package/examples/08-trading-orders.ts +0 -278
  176. package/examples/09-rewards-tracking.ts +0 -187
  177. package/examples/10-ctf-operations.ts +0 -336
  178. package/examples/11-live-arbitrage-scan.ts +0 -221
  179. package/examples/12-trending-arb-monitor.ts +0 -406
  180. package/examples/13-arbitrage-service.ts +0 -211
  181. package/examples/README.md +0 -179
  182. package/scripts/README.md +0 -163
  183. package/scripts/approvals/approve-erc1155.ts +0 -129
  184. package/scripts/approvals/approve-neg-risk-erc1155.ts +0 -149
  185. package/scripts/approvals/approve-neg-risk.ts +0 -102
  186. package/scripts/approvals/check-all-allowances.ts +0 -150
  187. package/scripts/approvals/check-allowance.ts +0 -129
  188. package/scripts/approvals/check-ctf-approval.ts +0 -158
  189. package/scripts/arb/faze-bo3-arb.ts +0 -385
  190. package/scripts/arb/settle-position.ts +0 -190
  191. package/scripts/arb/token-rebalancer.ts +0 -420
  192. package/scripts/arb-tests/01-unit-tests.ts +0 -495
  193. package/scripts/arb-tests/02-integration-tests.ts +0 -412
  194. package/scripts/arb-tests/03-e2e-tests.ts +0 -503
  195. package/scripts/arb-tests/README.md +0 -109
  196. package/scripts/datas/001-report.md +0 -486
  197. package/scripts/datas/clone-modal-screenshot.png +0 -0
  198. package/scripts/deposit/deposit-native-usdc.ts +0 -179
  199. package/scripts/deposit/deposit-usdc.ts +0 -155
  200. package/scripts/deposit/swap-usdc-to-usdce.ts +0 -375
  201. package/scripts/research/research-markets.ts +0 -166
  202. package/scripts/trading/check-orders.ts +0 -50
  203. package/scripts/trading/sell-nvidia-positions.ts +0 -206
  204. package/scripts/trading/test-order.ts +0 -172
  205. package/scripts/verify/test-approve-trading.ts +0 -98
  206. package/scripts/verify/test-provider-fix.ts +0 -43
  207. package/scripts/verify/test-search-mcp.ts +0 -113
  208. package/scripts/verify/verify-all-apis.ts +0 -160
  209. package/scripts/wallet/check-wallet-balances.ts +0 -75
  210. package/scripts/wallet/test-wallet-operations.ts +0 -191
  211. package/scripts/wallet/verify-wallet-tools.ts +0 -124
  212. package/src/__tests__/clob-api.test.ts +0 -301
  213. package/src/__tests__/integration/bridge-client.integration.test.ts +0 -314
  214. package/src/__tests__/integration/clob-api.integration.test.ts +0 -218
  215. package/src/__tests__/integration/ctf-client.integration.test.ts +0 -331
  216. package/src/__tests__/integration/data-api.integration.test.ts +0 -194
  217. package/src/__tests__/integration/gamma-api.integration.test.ts +0 -206
  218. package/src/__tests__/test-utils.ts +0 -170
  219. package/src/clients/bridge-client.ts +0 -841
  220. package/src/clients/clob-api.ts +0 -629
  221. package/src/clients/ctf-client.ts +0 -1216
  222. package/src/clients/data-api.ts +0 -469
  223. package/src/clients/gamma-api.ts +0 -597
  224. package/src/clients/trading-client.ts +0 -749
  225. package/src/clients/websocket-manager.ts +0 -267
  226. package/src/core/cache-adapter-bridge.ts +0 -94
  227. package/src/core/cache.ts +0 -85
  228. package/src/core/errors.ts +0 -117
  229. package/src/core/rate-limiter.ts +0 -74
  230. package/src/core/types.ts +0 -360
  231. package/src/core/unified-cache.ts +0 -153
  232. package/src/index.ts +0 -461
  233. package/src/services/arbitrage-service.ts +0 -1807
  234. package/src/services/authorization-service.ts +0 -357
  235. package/src/services/market-service.ts +0 -544
  236. package/src/services/realtime-service.ts +0 -196
  237. package/src/services/swap-service.ts +0 -896
  238. package/src/services/wallet-service.ts +0 -259
  239. package/src/utils/price-utils.ts +0 -307
  240. package/tsconfig.json +0 -8
  241. package/vitest.config.ts +0 -19
  242. package/vitest.integration.config.ts +0 -18
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Polymarket Subgraph Client
3
+ *
4
+ * 官方文档: https://docs.polymarket.com/developers/subgraph/overview
5
+ * Schema 仓库: https://github.com/Polymarket/polymarket-subgraph
6
+ *
7
+ * 5 个 Subgraph:
8
+ * - Positions (0.0.7): 用户余额、Net 余额
9
+ * - PnL (0.0.14): 用户持仓、PnL、Condition 结算状态
10
+ * - Activity (0.0.4): Split/Merge/Redemption 事件
11
+ * - OI (0.0.6): 市场/全局 Open Interest
12
+ * - Orderbook (0.0.1): 订单成交事件
13
+ */
14
+ import { ApiType } from '../core/rate-limiter.js';
15
+ // ==================== 端点配置 ====================
16
+ export const SUBGRAPH_ENDPOINTS = {
17
+ positions: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/positions-subgraph/0.0.7/gn',
18
+ pnl: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/pnl-subgraph/0.0.14/gn',
19
+ activity: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/activity-subgraph/0.0.4/gn',
20
+ oi: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/oi-subgraph/0.0.6/gn',
21
+ orderbook: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/orderbook-subgraph/0.0.1/gn',
22
+ };
23
+ // ==================== 客户端实现 ====================
24
+ export class SubgraphClient {
25
+ rateLimiter;
26
+ cache;
27
+ constructor(rateLimiter, cache) {
28
+ this.rateLimiter = rateLimiter;
29
+ this.cache = cache;
30
+ }
31
+ /**
32
+ * 执行 GraphQL 查询
33
+ */
34
+ async query(subgraph, queryStr) {
35
+ const endpoint = SUBGRAPH_ENDPOINTS[subgraph];
36
+ const cacheKey = `subgraph:${subgraph}:${queryStr}`;
37
+ // 检查缓存
38
+ const cached = await this.cache.get(cacheKey);
39
+ if (cached !== undefined) {
40
+ return cached;
41
+ }
42
+ // 限流并执行请求
43
+ const data = await this.rateLimiter.execute(ApiType.SUBGRAPH, async () => {
44
+ const response = await fetch(endpoint, {
45
+ method: 'POST',
46
+ headers: { 'Content-Type': 'application/json' },
47
+ body: JSON.stringify({ query: queryStr }),
48
+ });
49
+ if (!response.ok) {
50
+ const text = await response.text();
51
+ throw new Error(`Subgraph request failed: HTTP ${response.status} - ${text.slice(0, 200)}`);
52
+ }
53
+ const result = (await response.json());
54
+ if (result.errors && result.errors.length > 0) {
55
+ throw new Error(`GraphQL error: ${result.errors.map((e) => e.message).join(', ')}`);
56
+ }
57
+ if (!result.data) {
58
+ throw new Error(`No data returned from subgraph. Response: ${JSON.stringify(result).slice(0, 200)}`);
59
+ }
60
+ return result.data;
61
+ });
62
+ // 缓存结果 (短 TTL,subgraph 数据更新较快)
63
+ await this.cache.set(cacheKey, data, 30_000);
64
+ return data;
65
+ }
66
+ /**
67
+ * 构建查询字符串
68
+ */
69
+ buildQuery(entityName, fields, params = {}) {
70
+ const args = [];
71
+ if (params.first !== undefined) {
72
+ args.push(`first: ${params.first}`);
73
+ }
74
+ if (params.skip !== undefined) {
75
+ args.push(`skip: ${params.skip}`);
76
+ }
77
+ if (params.orderBy) {
78
+ args.push(`orderBy: ${params.orderBy}`);
79
+ }
80
+ if (params.orderDirection) {
81
+ args.push(`orderDirection: ${params.orderDirection}`);
82
+ }
83
+ if (params.where && Object.keys(params.where).length > 0) {
84
+ // Build where clause manually to avoid JSON quote issues
85
+ const whereParts = Object.entries(params.where).map(([key, value]) => {
86
+ if (typeof value === 'string') {
87
+ return `${key}: "${value}"`;
88
+ }
89
+ return `${key}: ${JSON.stringify(value)}`;
90
+ });
91
+ args.push(`where: { ${whereParts.join(', ')} }`);
92
+ }
93
+ const argsStr = args.length > 0 ? `(${args.join(', ')})` : '';
94
+ const fieldsStr = fields.join('\n ');
95
+ return `{
96
+ ${entityName}${argsStr} {
97
+ ${fieldsStr}
98
+ }
99
+ }`;
100
+ }
101
+ // ==================== Positions Subgraph ====================
102
+ /**
103
+ * 获取用户余额
104
+ */
105
+ async getUserBalances(user, params = {}) {
106
+ const query = this.buildQuery('userBalances', ['id', 'user', 'asset', 'balance'], {
107
+ ...params,
108
+ where: { ...params.where, user: user.toLowerCase() },
109
+ });
110
+ const result = await this.query('positions', query);
111
+ return result.userBalances;
112
+ }
113
+ /**
114
+ * 获取 Net 用户余额
115
+ */
116
+ async getNetUserBalances(user, params = {}) {
117
+ const query = this.buildQuery('netUserBalances', ['id', 'user', 'asset', 'balance'], {
118
+ ...params,
119
+ where: { ...params.where, user: user.toLowerCase() },
120
+ });
121
+ const result = await this.query('positions', query);
122
+ return result.netUserBalances;
123
+ }
124
+ // ==================== PnL Subgraph ====================
125
+ /**
126
+ * 获取用户持仓 (含 PnL)
127
+ */
128
+ async getUserPositions(user, params = {}) {
129
+ const query = this.buildQuery('userPositions', ['id', 'user', 'tokenId', 'amount', 'avgPrice', 'realizedPnl', 'totalBought'], {
130
+ orderBy: 'realizedPnl',
131
+ orderDirection: 'desc',
132
+ ...params,
133
+ where: { ...params.where, user: user.toLowerCase() },
134
+ });
135
+ const result = await this.query('pnl', query);
136
+ return result.userPositions;
137
+ }
138
+ /**
139
+ * 获取 Condition 结算状态
140
+ */
141
+ async getConditions(params = {}) {
142
+ const query = this.buildQuery('conditions', ['id', 'positionIds', 'payoutNumerators', 'payoutDenominator'], params);
143
+ const result = await this.query('pnl', query);
144
+ return result.conditions;
145
+ }
146
+ /**
147
+ * 获取单个 Condition
148
+ */
149
+ async getCondition(conditionId) {
150
+ const query = `{
151
+ condition(id: "${conditionId.toLowerCase()}") {
152
+ id
153
+ positionIds
154
+ payoutNumerators
155
+ payoutDenominator
156
+ }
157
+ }`;
158
+ const result = await this.query('pnl', query);
159
+ return result.condition;
160
+ }
161
+ /**
162
+ * 检查 Condition 是否已结算
163
+ */
164
+ async isConditionResolved(conditionId) {
165
+ const condition = await this.getCondition(conditionId);
166
+ if (!condition)
167
+ return false;
168
+ return condition.payoutNumerators.length > 0 && condition.payoutDenominator !== '0';
169
+ }
170
+ // ==================== Activity Subgraph ====================
171
+ /**
172
+ * 获取用户的 Split 事件
173
+ */
174
+ async getSplits(user, params = {}) {
175
+ const query = this.buildQuery('splits', ['id', 'timestamp', 'stakeholder', 'condition', 'amount'], {
176
+ orderBy: 'timestamp',
177
+ orderDirection: 'desc',
178
+ ...params,
179
+ where: { ...params.where, stakeholder: user.toLowerCase() },
180
+ });
181
+ const result = await this.query('activity', query);
182
+ return result.splits;
183
+ }
184
+ /**
185
+ * 获取用户的 Merge 事件
186
+ */
187
+ async getMerges(user, params = {}) {
188
+ const query = this.buildQuery('merges', ['id', 'timestamp', 'stakeholder', 'condition', 'amount'], {
189
+ orderBy: 'timestamp',
190
+ orderDirection: 'desc',
191
+ ...params,
192
+ where: { ...params.where, stakeholder: user.toLowerCase() },
193
+ });
194
+ const result = await this.query('activity', query);
195
+ return result.merges;
196
+ }
197
+ /**
198
+ * 获取用户的 Redemption 事件
199
+ */
200
+ async getRedemptions(user, params = {}) {
201
+ const query = this.buildQuery('redemptions', ['id', 'timestamp', 'redeemer', 'condition', 'payout'], {
202
+ orderBy: 'timestamp',
203
+ orderDirection: 'desc',
204
+ ...params,
205
+ where: { ...params.where, redeemer: user.toLowerCase() },
206
+ });
207
+ const result = await this.query('activity', query);
208
+ return result.redemptions;
209
+ }
210
+ /**
211
+ * 获取最近的 Redemption 事件 (不限用户)
212
+ */
213
+ async getRecentRedemptions(params = {}) {
214
+ const query = this.buildQuery('redemptions', ['id', 'timestamp', 'redeemer', 'condition', 'payout'], {
215
+ orderBy: 'timestamp',
216
+ orderDirection: 'desc',
217
+ first: 100,
218
+ ...params,
219
+ });
220
+ const result = await this.query('activity', query);
221
+ return result.redemptions;
222
+ }
223
+ // ==================== OI Subgraph ====================
224
+ /**
225
+ * 获取市场 Open Interest
226
+ */
227
+ async getMarketOpenInterest(conditionId) {
228
+ const query = `{
229
+ marketOpenInterest(id: "${conditionId.toLowerCase()}") {
230
+ id
231
+ amount
232
+ }
233
+ }`;
234
+ const result = await this.query('oi', query);
235
+ return result.marketOpenInterest;
236
+ }
237
+ /**
238
+ * 获取 Top 市场按 OI 排序
239
+ */
240
+ async getTopMarketsByOI(params = {}) {
241
+ const query = this.buildQuery('marketOpenInterests', ['id', 'amount'], {
242
+ orderBy: 'amount',
243
+ orderDirection: 'desc',
244
+ first: 50,
245
+ ...params,
246
+ });
247
+ const result = await this.query('oi', query);
248
+ return result.marketOpenInterests;
249
+ }
250
+ /**
251
+ * 获取全局 Open Interest
252
+ */
253
+ async getGlobalOpenInterest() {
254
+ const query = `{
255
+ globalOpenInterests(first: 1) {
256
+ id
257
+ amount
258
+ }
259
+ }`;
260
+ const result = await this.query('oi', query);
261
+ return result.globalOpenInterests[0]?.amount || '0';
262
+ }
263
+ // ==================== Orderbook Subgraph ====================
264
+ /**
265
+ * 获取订单成交事件
266
+ */
267
+ async getOrderFilledEvents(params = {}) {
268
+ const query = this.buildQuery('orderFilledEvents', ['id', 'transactionHash', 'timestamp', 'orderHash', 'maker', 'taker', 'makerAssetId', 'takerAssetId', 'makerAmountFilled', 'takerAmountFilled', 'fee'], {
269
+ orderBy: 'timestamp',
270
+ orderDirection: 'desc',
271
+ first: 100,
272
+ ...params,
273
+ });
274
+ const result = await this.query('orderbook', query);
275
+ return result.orderFilledEvents;
276
+ }
277
+ /**
278
+ * 获取用户作为 maker 的成交事件
279
+ */
280
+ async getMakerFills(maker, params = {}) {
281
+ const query = this.buildQuery('orderFilledEvents', ['id', 'transactionHash', 'timestamp', 'orderHash', 'maker', 'taker', 'makerAssetId', 'takerAssetId', 'makerAmountFilled', 'takerAmountFilled', 'fee'], {
282
+ orderBy: 'timestamp',
283
+ orderDirection: 'desc',
284
+ ...params,
285
+ where: { ...params.where, maker: maker.toLowerCase() },
286
+ });
287
+ const result = await this.query('orderbook', query);
288
+ return result.orderFilledEvents;
289
+ }
290
+ /**
291
+ * 获取用户作为 taker 的成交事件
292
+ */
293
+ async getTakerFills(taker, params = {}) {
294
+ const query = this.buildQuery('orderFilledEvents', ['id', 'transactionHash', 'timestamp', 'orderHash', 'maker', 'taker', 'makerAssetId', 'takerAssetId', 'makerAmountFilled', 'takerAmountFilled', 'fee'], {
295
+ orderBy: 'timestamp',
296
+ orderDirection: 'desc',
297
+ ...params,
298
+ where: { ...params.where, taker: taker.toLowerCase() },
299
+ });
300
+ const result = await this.query('orderbook', query);
301
+ return result.orderFilledEvents;
302
+ }
303
+ /**
304
+ * 获取市场数据
305
+ */
306
+ async getMarketData(assetId) {
307
+ const query = `{
308
+ marketData(id: "${assetId}") {
309
+ id
310
+ volume
311
+ }
312
+ }`;
313
+ const result = await this.query('orderbook', query);
314
+ return result.marketData;
315
+ }
316
+ // ==================== 便捷方法 ====================
317
+ /**
318
+ * 获取用户完整的链上活动摘要
319
+ */
320
+ async getUserActivitySummary(user) {
321
+ const [positions, splits, merges, redemptions, makerFills, takerFills] = await Promise.all([
322
+ this.getUserPositions(user, { first: 100 }),
323
+ this.getSplits(user, { first: 50 }),
324
+ this.getMerges(user, { first: 50 }),
325
+ this.getRedemptions(user, { first: 50 }),
326
+ this.getMakerFills(user, { first: 50 }),
327
+ this.getTakerFills(user, { first: 50 }),
328
+ ]);
329
+ return { positions, splits, merges, redemptions, makerFills, takerFills };
330
+ }
331
+ }
332
+ //# sourceMappingURL=subgraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../src/clients/subgraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Trading Client for Polymarket
3
+ *
4
+ * Wraps @polymarket/clob-client for order execution:
5
+ * - Create/cancel orders
6
+ * - Market/limit orders
7
+ * - Order management
8
+ *
9
+ * Based on: docs/01-product-research/06-poly-sdk/reports/02-clob-client.md
10
+ */
11
+ import { ClobClient, type TickSize } from '@polymarket/clob-client';
12
+ import { RateLimiter } from '../core/rate-limiter.js';
13
+ export declare const POLYGON_MAINNET = 137;
14
+ export declare const POLYGON_AMOY = 80002;
15
+ export type Side = 'BUY' | 'SELL';
16
+ export type OrderType = 'GTC' | 'FOK' | 'GTD' | 'FAK';
17
+ export interface ApiCredentials {
18
+ key: string;
19
+ secret: string;
20
+ passphrase: string;
21
+ }
22
+ export interface OrderParams {
23
+ /** Token ID to trade */
24
+ tokenId: string;
25
+ /** BUY or SELL */
26
+ side: Side;
27
+ /** Price (0.001 - 0.999) */
28
+ price: number;
29
+ /** Size in shares */
30
+ size: number;
31
+ /** Order type: GTC (default) or GTD for limit orders */
32
+ orderType?: 'GTC' | 'GTD';
33
+ /** Expiration for GTD orders (unix timestamp seconds) */
34
+ expiration?: number;
35
+ }
36
+ export interface MarketOrderParams {
37
+ /** Token ID to trade */
38
+ tokenId: string;
39
+ /** BUY or SELL */
40
+ side: Side;
41
+ /** Amount in USDC for BUY, shares for SELL */
42
+ amount: number;
43
+ /** Price limit (optional) */
44
+ price?: number;
45
+ /** Order type: FOK (default) or FAK */
46
+ orderType?: 'FOK' | 'FAK';
47
+ }
48
+ export interface Order {
49
+ id: string;
50
+ status: string;
51
+ tokenId: string;
52
+ side: Side;
53
+ price: number;
54
+ originalSize: number;
55
+ filledSize: number;
56
+ remainingSize: number;
57
+ associateTrades: string[];
58
+ createdAt: number;
59
+ }
60
+ export interface OrderResult {
61
+ success: boolean;
62
+ orderId?: string;
63
+ orderIds?: string[];
64
+ errorMsg?: string;
65
+ transactionHashes?: string[];
66
+ }
67
+ export interface TradeInfo {
68
+ id: string;
69
+ tokenId: string;
70
+ side: Side;
71
+ price: number;
72
+ size: number;
73
+ fee: number;
74
+ timestamp: number;
75
+ }
76
+ export interface UserEarning {
77
+ date: string;
78
+ conditionId: string;
79
+ assetAddress: string;
80
+ makerAddress: string;
81
+ earnings: number;
82
+ assetRate: number;
83
+ }
84
+ export interface MarketReward {
85
+ conditionId: string;
86
+ question: string;
87
+ marketSlug: string;
88
+ eventSlug: string;
89
+ image: string;
90
+ rewardsMaxSpread: number;
91
+ rewardsMinSize: number;
92
+ tokens: Array<{
93
+ tokenId: string;
94
+ outcome: string;
95
+ price: number;
96
+ }>;
97
+ rewardsConfig: Array<{
98
+ assetAddress: string;
99
+ startDate: string;
100
+ endDate: string;
101
+ ratePerDay: number;
102
+ totalRewards: number;
103
+ }>;
104
+ }
105
+ export interface OrderScoring {
106
+ scoring: boolean;
107
+ }
108
+ export interface TradingClientConfig {
109
+ /** Private key for signing */
110
+ privateKey: string;
111
+ /** Chain ID (default: Polygon mainnet 137) */
112
+ chainId?: number;
113
+ /** Pre-generated API credentials (optional) */
114
+ credentials?: ApiCredentials;
115
+ }
116
+ export declare class TradingClient {
117
+ private rateLimiter;
118
+ private config;
119
+ private clobClient;
120
+ private wallet;
121
+ private chainId;
122
+ private credentials;
123
+ private initialized;
124
+ private tickSizeCache;
125
+ private negRiskCache;
126
+ constructor(rateLimiter: RateLimiter, config: TradingClientConfig);
127
+ /**
128
+ * Initialize the trading client
129
+ * Creates API credentials if not provided
130
+ */
131
+ initialize(): Promise<void>;
132
+ private ensureInitialized;
133
+ /**
134
+ * Get tick size for a token (cached)
135
+ */
136
+ getTickSize(tokenId: string): Promise<TickSize>;
137
+ /**
138
+ * Check if token is neg risk (cached)
139
+ */
140
+ isNegRisk(tokenId: string): Promise<boolean>;
141
+ /**
142
+ * Create and post a limit order (single step)
143
+ */
144
+ createOrder(params: OrderParams): Promise<OrderResult>;
145
+ /**
146
+ * Create and post a market order (executes at best available price)
147
+ */
148
+ createMarketOrder(params: MarketOrderParams): Promise<OrderResult>;
149
+ /**
150
+ * Cancel an order by ID
151
+ */
152
+ cancelOrder(orderId: string): Promise<OrderResult>;
153
+ /**
154
+ * Cancel multiple orders by IDs (order hashes)
155
+ */
156
+ cancelOrders(orderIds: string[]): Promise<OrderResult>;
157
+ /**
158
+ * Cancel all open orders
159
+ */
160
+ cancelAllOrders(): Promise<OrderResult>;
161
+ /**
162
+ * Get open orders (fully paginated)
163
+ */
164
+ getOpenOrders(marketId?: string): Promise<Order[]>;
165
+ /**
166
+ * Get trade history
167
+ */
168
+ getTrades(marketId?: string): Promise<TradeInfo[]>;
169
+ /**
170
+ * Get current price for a token
171
+ */
172
+ getPrice(tokenId: string, side: Side): Promise<number>;
173
+ /**
174
+ * Get midpoint price for a token
175
+ */
176
+ getMidpoint(tokenId: string): Promise<number>;
177
+ /**
178
+ * Get spread for a token
179
+ */
180
+ getSpread(tokenId: string): Promise<number>;
181
+ /**
182
+ * Get wallet address
183
+ */
184
+ getAddress(): string;
185
+ /**
186
+ * Get API credentials (for storage/reuse)
187
+ */
188
+ getCredentials(): ApiCredentials | null;
189
+ /**
190
+ * Check if client is initialized
191
+ */
192
+ isInitialized(): boolean;
193
+ /**
194
+ * Get underlying CLOB client for advanced usage
195
+ */
196
+ getClobClient(): ClobClient | null;
197
+ /**
198
+ * Check if an order is scoring for rewards
199
+ * Orders that are scoring contribute to daily reward earnings
200
+ */
201
+ isOrderScoring(orderId: string): Promise<boolean>;
202
+ /**
203
+ * Check if multiple orders are scoring for rewards
204
+ */
205
+ areOrdersScoring(orderIds: string[]): Promise<Record<string, boolean>>;
206
+ /**
207
+ * Get user earnings for a specific day
208
+ * @param date - Date in YYYY-MM-DD format
209
+ */
210
+ getEarningsForDay(date: string): Promise<UserEarning[]>;
211
+ /**
212
+ * Get total earnings across all markets for a specific day
213
+ * @param date - Date in YYYY-MM-DD format
214
+ */
215
+ getTotalEarningsForDay(date: string): Promise<{
216
+ date: string;
217
+ totalEarnings: number;
218
+ byAsset: Array<{
219
+ assetAddress: string;
220
+ earnings: number;
221
+ rate: number;
222
+ }>;
223
+ }>;
224
+ /**
225
+ * Get current market rewards configuration
226
+ * Returns markets that have active reward programs
227
+ */
228
+ getCurrentRewards(): Promise<MarketReward[]>;
229
+ /**
230
+ * Get reward percentages by market
231
+ * Higher percentages indicate higher reward rates
232
+ */
233
+ getRewardPercentages(): Promise<Record<string, number>>;
234
+ /**
235
+ * Get raw rewards for a specific market
236
+ */
237
+ getMarketRewards(conditionId: string): Promise<MarketReward[]>;
238
+ /**
239
+ * Get balance and allowance for collateral or conditional tokens
240
+ * @param assetType - 'COLLATERAL' for USDC, 'CONDITIONAL' for outcome tokens
241
+ * @param tokenId - Token ID (required for CONDITIONAL type)
242
+ */
243
+ getBalanceAllowance(assetType: 'COLLATERAL' | 'CONDITIONAL', tokenId?: string): Promise<{
244
+ balance: string;
245
+ allowance: string;
246
+ }>;
247
+ /**
248
+ * Update balance allowance (approve spending)
249
+ */
250
+ updateBalanceAllowance(assetType: 'COLLATERAL' | 'CONDITIONAL', tokenId?: string): Promise<void>;
251
+ }
252
+ //# sourceMappingURL=trading-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trading-client.d.ts","sourceRoot":"","sources":["../../src/clients/trading-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAgG,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAElK,OAAO,EAAE,WAAW,EAAW,MAAM,yBAAyB,CAAC;AAI/D,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,YAAY,QAAQ,CAAC;AAOlC,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC3B;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,aAAa,EAAE,KAAK,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAID,qBAAa,aAAa;IAUtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IAVhB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,YAAY,CAAmC;gBAG7C,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,mBAAmB;IASrC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAiCnB,iBAAiB;IAS/B;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAWrD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAalD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IA6D5D;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IA8DxE;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBxD;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAkB5D;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;IAiB7C;;OAEG;IACG,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA8BxD;;OAEG;IACG,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAyBxD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASnD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWjD;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,cAAc,IAAI,cAAc,GAAG,IAAI;IAIvC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAMlC;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASvD;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAS5E;;;OAGG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgB7D;;;OAGG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAClD,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,KAAK,CAAC;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC1E,CAAC;IAoBF;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA6BlD;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAQ7D;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA+BpE;;;;OAIG;IACG,mBAAmB,CACvB,SAAS,EAAE,YAAY,GAAG,aAAa,EACvC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAelD;;OAEG;IACG,sBAAsB,CAC1B,SAAS,EAAE,YAAY,GAAG,aAAa,EACvC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;CAUjB"}