@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,75 @@
1
+ /**
2
+ * Rate Limiter for Polymarket APIs
3
+ * - Data API: 100ms minimum interval
4
+ * - Gamma API: 10 req/s
5
+ * - CLOB API: 10 req/s
6
+ */
7
+ import Bottleneck from 'bottleneck';
8
+ export var ApiType;
9
+ (function (ApiType) {
10
+ ApiType["DATA_API"] = "data-api";
11
+ ApiType["GAMMA_API"] = "gamma-api";
12
+ ApiType["CLOB_API"] = "clob-api";
13
+ ApiType["SUBGRAPH"] = "subgraph";
14
+ })(ApiType || (ApiType = {}));
15
+ const API_LIMITS = {
16
+ [ApiType.DATA_API]: {
17
+ minTime: 100, // 100ms minimum interval
18
+ maxConcurrent: 5,
19
+ },
20
+ [ApiType.GAMMA_API]: {
21
+ reservoir: 10,
22
+ reservoirRefreshAmount: 10,
23
+ reservoirRefreshInterval: 1000,
24
+ },
25
+ [ApiType.CLOB_API]: {
26
+ reservoir: 10,
27
+ reservoirRefreshAmount: 10,
28
+ reservoirRefreshInterval: 1000,
29
+ },
30
+ [ApiType.SUBGRAPH]: {
31
+ minTime: 50, // 50ms minimum interval
32
+ maxConcurrent: 10,
33
+ },
34
+ };
35
+ export class RateLimiter {
36
+ limiters = new Map();
37
+ constructor() {
38
+ for (const [type, config] of Object.entries(API_LIMITS)) {
39
+ this.limiters.set(type, new Bottleneck(config));
40
+ }
41
+ }
42
+ /**
43
+ * Execute a function with rate limiting
44
+ */
45
+ async execute(api, fn) {
46
+ const limiter = this.limiters.get(api);
47
+ if (!limiter)
48
+ throw new Error(`Unknown API type: ${api}`);
49
+ return limiter.schedule(fn);
50
+ }
51
+ /**
52
+ * Execute multiple functions in order with rate limiting
53
+ */
54
+ async executeBatch(api, fns) {
55
+ const results = [];
56
+ for (const fn of fns) {
57
+ results.push(await this.execute(api, fn));
58
+ }
59
+ return results;
60
+ }
61
+ /**
62
+ * Get current limiter statistics
63
+ */
64
+ getStats(api) {
65
+ const limiter = this.limiters.get(api);
66
+ if (!limiter)
67
+ return null;
68
+ const counts = limiter.counts();
69
+ return {
70
+ running: counts.RUNNING,
71
+ queued: counts.QUEUED,
72
+ };
73
+ }
74
+ }
75
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/core/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,MAAM,CAAN,IAAY,OAKX;AALD,WAAY,OAAO;IACjB,gCAAqB,CAAA;IACrB,kCAAuB,CAAA;IACvB,gCAAqB,CAAA;IACrB,gCAAqB,CAAA;AACvB,CAAC,EALW,OAAO,KAAP,OAAO,QAKlB;AAED,MAAM,UAAU,GAAmD;IACjE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAClB,OAAO,EAAE,GAAG,EAAE,yBAAyB;QACvC,aAAa,EAAE,CAAC;KACjB;IACD,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACnB,SAAS,EAAE,EAAE;QACb,sBAAsB,EAAE,EAAE;QAC1B,wBAAwB,EAAE,IAAI;KAC/B;IACD,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAClB,SAAS,EAAE,EAAE;QACb,sBAAsB,EAAE,EAAE;QAC1B,wBAAwB,EAAE,IAAI;KAC/B;IACD,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAClB,OAAO,EAAE,EAAE,EAAE,wBAAwB;QACrC,aAAa,EAAE,EAAE;KAClB;CACF,CAAC;AAEF,MAAM,OAAO,WAAW;IACd,QAAQ,GAA6B,IAAI,GAAG,EAAE,CAAC;IAEvD;QACE,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAe,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAI,GAAY,EAAE,EAAoB;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAI,GAAY,EAAE,GAAyB;QAC3D,MAAM,OAAO,GAAQ,EAAE,CAAC;QACxB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,GAAY;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,402 @@
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 = '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
+ export declare function getIntervalMs(interval: KLineInterval): number;
402
+ //# 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,19 @@
1
+ /**
2
+ * Common types used across the SDK
3
+ */
4
+ // Helper to convert interval to milliseconds
5
+ export function getIntervalMs(interval) {
6
+ const map = {
7
+ '30s': 30 * 1000,
8
+ '1m': 60 * 1000,
9
+ '5m': 5 * 60 * 1000,
10
+ '15m': 15 * 60 * 1000,
11
+ '30m': 30 * 60 * 1000,
12
+ '1h': 60 * 60 * 1000,
13
+ '4h': 4 * 60 * 60 * 1000,
14
+ '12h': 12 * 60 * 60 * 1000,
15
+ '1d': 24 * 60 * 60 * 1000,
16
+ };
17
+ return map[interval];
18
+ }
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgcH,6CAA6C;AAC7C,MAAM,UAAU,aAAa,CAAC,QAAuB;IACnD,MAAM,GAAG,GAAkC;QACzC,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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Core Types Unit Tests
3
+ *
4
+ * Tests type definitions and type guards
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ describe('Core Types', () => {
8
+ describe('MarketToken', () => {
9
+ it('should have correct structure', () => {
10
+ const token = {
11
+ tokenId: '123456789',
12
+ outcome: 'Yes',
13
+ price: 0.55,
14
+ };
15
+ expect(token.tokenId).toBe('123456789');
16
+ expect(token.outcome).toBe('Yes');
17
+ expect(token.price).toBe(0.55);
18
+ });
19
+ });
20
+ describe('UnifiedMarket', () => {
21
+ it('should have tokens as array', () => {
22
+ const market = {
23
+ conditionId: '0x123',
24
+ slug: 'test-market',
25
+ question: 'Will this test pass?',
26
+ tokens: [
27
+ { tokenId: 'yes-token', outcome: 'Yes', price: 0.6 },
28
+ { tokenId: 'no-token', outcome: 'No', price: 0.4 },
29
+ ],
30
+ volume: 10000,
31
+ liquidity: 5000,
32
+ active: true,
33
+ closed: false,
34
+ acceptingOrders: true,
35
+ endDate: new Date('2025-12-31'),
36
+ source: 'gamma',
37
+ };
38
+ // Tokens should be an array
39
+ expect(Array.isArray(market.tokens)).toBe(true);
40
+ expect(market.tokens.length).toBe(2);
41
+ // Should be able to find tokens by outcome
42
+ const yesToken = market.tokens.find(t => t.outcome === 'Yes');
43
+ const noToken = market.tokens.find(t => t.outcome === 'No');
44
+ expect(yesToken?.tokenId).toBe('yes-token');
45
+ expect(yesToken?.price).toBe(0.6);
46
+ expect(noToken?.tokenId).toBe('no-token');
47
+ expect(noToken?.price).toBe(0.4);
48
+ });
49
+ it('should support multi-outcome markets', () => {
50
+ const market = {
51
+ conditionId: '0x456',
52
+ slug: 'multi-outcome',
53
+ question: 'Who will win?',
54
+ tokens: [
55
+ { tokenId: 'a-token', outcome: 'Candidate A', price: 0.4 },
56
+ { tokenId: 'b-token', outcome: 'Candidate B', price: 0.35 },
57
+ { tokenId: 'c-token', outcome: 'Candidate C', price: 0.25 },
58
+ ],
59
+ volume: 50000,
60
+ liquidity: 20000,
61
+ active: true,
62
+ closed: false,
63
+ acceptingOrders: true,
64
+ endDate: new Date('2025-11-05'),
65
+ source: 'clob',
66
+ };
67
+ expect(market.tokens.length).toBe(3);
68
+ expect(market.tokens.map(t => t.outcome)).toEqual([
69
+ 'Candidate A',
70
+ 'Candidate B',
71
+ 'Candidate C',
72
+ ]);
73
+ });
74
+ });
75
+ describe('Orderbook', () => {
76
+ it('should have correct structure', () => {
77
+ const orderbook = {
78
+ bids: [
79
+ { price: 0.50, size: 100 },
80
+ { price: 0.49, size: 200 },
81
+ ],
82
+ asks: [
83
+ { price: 0.52, size: 150 },
84
+ { price: 0.53, size: 250 },
85
+ ],
86
+ timestamp: Date.now(),
87
+ };
88
+ expect(orderbook.bids.length).toBe(2);
89
+ expect(orderbook.asks.length).toBe(2);
90
+ expect(orderbook.bids[0].price).toBeGreaterThan(orderbook.bids[1].price);
91
+ expect(orderbook.asks[0].price).toBeLessThan(orderbook.asks[1].price);
92
+ });
93
+ });
94
+ describe('OrderbookLevel', () => {
95
+ it('should have price and size', () => {
96
+ const level = {
97
+ price: 0.55,
98
+ size: 100,
99
+ };
100
+ expect(level.price).toBe(0.55);
101
+ expect(level.size).toBe(100);
102
+ });
103
+ });
104
+ describe('Side', () => {
105
+ it('should only allow BUY or SELL', () => {
106
+ const buy = 'BUY';
107
+ const sell = 'SELL';
108
+ expect(buy).toBe('BUY');
109
+ expect(sell).toBe('SELL');
110
+ });
111
+ });
112
+ describe('OrderType', () => {
113
+ it('should support all order types', () => {
114
+ const gtc = 'GTC';
115
+ const gtd = 'GTD';
116
+ const fok = 'FOK';
117
+ const fak = 'FAK';
118
+ expect([gtc, gtd, fok, fak]).toEqual(['GTC', 'GTD', 'FOK', 'FAK']);
119
+ });
120
+ });
121
+ });
122
+ //# sourceMappingURL=types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../src/core/types.test.ts"],"names":[],"mappings":"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"}