@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,177 @@
1
+ /**
2
+ * TradingService
3
+ *
4
+ * Trading service using official @polymarket/clob-client.
5
+ *
6
+ * Provides:
7
+ * - Order creation (limit, market)
8
+ * - Order management (cancel, query)
9
+ * - Rewards tracking
10
+ * - Balance management
11
+ *
12
+ * Note: Market data methods have been moved to MarketService.
13
+ */
14
+ import { ClobClient, type TickSize } from '@polymarket/clob-client';
15
+ import { Wallet } from 'ethers';
16
+ import { RateLimiter } from '../core/rate-limiter.js';
17
+ import type { UnifiedCache } from '../core/unified-cache.js';
18
+ import type { Side } from '../core/types.js';
19
+ export declare const POLYGON_MAINNET = 137;
20
+ export declare const POLYGON_AMOY = 80002;
21
+ /** Minimum order value in USDC (price * size >= MIN_ORDER_VALUE) */
22
+ export declare const MIN_ORDER_VALUE_USDC = 1;
23
+ /** Minimum order size in shares */
24
+ export declare const MIN_ORDER_SIZE_SHARES = 5;
25
+ export type { Side, OrderType } from '../core/types.js';
26
+ export interface ApiCredentials {
27
+ key: string;
28
+ secret: string;
29
+ passphrase: string;
30
+ }
31
+ export interface TradingServiceConfig {
32
+ /** Private key for signing */
33
+ privateKey: string;
34
+ /** Chain ID (default: Polygon mainnet 137) */
35
+ chainId?: number;
36
+ /** Pre-generated API credentials (optional) */
37
+ credentials?: ApiCredentials;
38
+ }
39
+ export interface LimitOrderParams {
40
+ tokenId: string;
41
+ side: Side;
42
+ price: number;
43
+ size: number;
44
+ orderType?: 'GTC' | 'GTD';
45
+ expiration?: number;
46
+ }
47
+ export interface MarketOrderParams {
48
+ tokenId: string;
49
+ side: Side;
50
+ amount: number;
51
+ price?: number;
52
+ orderType?: 'FOK' | 'FAK';
53
+ }
54
+ export interface Order {
55
+ id: string;
56
+ status: string;
57
+ tokenId: string;
58
+ side: Side;
59
+ price: number;
60
+ originalSize: number;
61
+ filledSize: number;
62
+ remainingSize: number;
63
+ associateTrades: string[];
64
+ createdAt: number;
65
+ }
66
+ export interface OrderResult {
67
+ success: boolean;
68
+ orderId?: string;
69
+ orderIds?: string[];
70
+ errorMsg?: string;
71
+ transactionHashes?: string[];
72
+ }
73
+ export interface TradeInfo {
74
+ id: string;
75
+ tokenId: string;
76
+ side: Side;
77
+ price: number;
78
+ size: number;
79
+ fee: number;
80
+ timestamp: number;
81
+ }
82
+ export interface UserEarning {
83
+ date: string;
84
+ conditionId: string;
85
+ assetAddress: string;
86
+ makerAddress: string;
87
+ earnings: number;
88
+ assetRate: number;
89
+ }
90
+ export interface MarketReward {
91
+ conditionId: string;
92
+ question: string;
93
+ marketSlug: string;
94
+ eventSlug: string;
95
+ rewardsMaxSpread: number;
96
+ rewardsMinSize: number;
97
+ tokens: Array<{
98
+ tokenId: string;
99
+ outcome: string;
100
+ price: number;
101
+ }>;
102
+ rewardsConfig: Array<{
103
+ assetAddress: string;
104
+ startDate: string;
105
+ endDate: string;
106
+ ratePerDay: number;
107
+ totalRewards: number;
108
+ }>;
109
+ }
110
+ export declare class TradingService {
111
+ private rateLimiter;
112
+ private cache;
113
+ private config;
114
+ private clobClient;
115
+ private wallet;
116
+ private chainId;
117
+ private credentials;
118
+ private initialized;
119
+ private tickSizeCache;
120
+ private negRiskCache;
121
+ constructor(rateLimiter: RateLimiter, cache: UnifiedCache, config: TradingServiceConfig);
122
+ initialize(): Promise<void>;
123
+ /**
124
+ * Try to derive existing API key first, create new one if not exists.
125
+ * This is the reverse of official createOrDeriveApiKey() to avoid
126
+ * 400 "Could not create api key" error log for existing keys.
127
+ */
128
+ private deriveOrCreateApiKey;
129
+ private ensureInitialized;
130
+ /**
131
+ * Get tick size for a token
132
+ */
133
+ getTickSize(tokenId: string): Promise<TickSize>;
134
+ /**
135
+ * Check if token is neg risk
136
+ */
137
+ isNegRisk(tokenId: string): Promise<boolean>;
138
+ /**
139
+ * Create and post a limit order
140
+ *
141
+ * Note: Polymarket enforces minimum order requirements:
142
+ * - Minimum size: 5 shares (MIN_ORDER_SIZE_SHARES)
143
+ * - Minimum value: $1 USDC (MIN_ORDER_VALUE_USDC)
144
+ *
145
+ * Orders below these limits will be rejected by the API.
146
+ */
147
+ createLimitOrder(params: LimitOrderParams): Promise<OrderResult>;
148
+ /**
149
+ * Create and post a market order
150
+ *
151
+ * Note: Polymarket enforces minimum order requirements:
152
+ * - Minimum value: $1 USDC (MIN_ORDER_VALUE_USDC)
153
+ *
154
+ * Market orders below this limit will be rejected by the API.
155
+ */
156
+ createMarketOrder(params: MarketOrderParams): Promise<OrderResult>;
157
+ cancelOrder(orderId: string): Promise<OrderResult>;
158
+ cancelOrders(orderIds: string[]): Promise<OrderResult>;
159
+ cancelAllOrders(): Promise<OrderResult>;
160
+ getOpenOrders(marketId?: string): Promise<Order[]>;
161
+ getTrades(marketId?: string): Promise<TradeInfo[]>;
162
+ isOrderScoring(orderId: string): Promise<boolean>;
163
+ areOrdersScoring(orderIds: string[]): Promise<Record<string, boolean>>;
164
+ getEarningsForDay(date: string): Promise<UserEarning[]>;
165
+ getCurrentRewards(): Promise<MarketReward[]>;
166
+ getBalanceAllowance(assetType: 'COLLATERAL' | 'CONDITIONAL', tokenId?: string): Promise<{
167
+ balance: string;
168
+ allowance: string;
169
+ }>;
170
+ updateBalanceAllowance(assetType: 'COLLATERAL' | 'CONDITIONAL', tokenId?: string): Promise<void>;
171
+ getAddress(): string;
172
+ getWallet(): Wallet;
173
+ getCredentials(): ApiCredentials | null;
174
+ isInitialized(): boolean;
175
+ getClobClient(): ClobClient | null;
176
+ }
177
+ //# sourceMappingURL=trading-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trading-service.d.ts","sourceRoot":"","sources":["../../src/services/trading-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,422 @@
1
+ /**
2
+ * TradingService
3
+ *
4
+ * Trading service using official @polymarket/clob-client.
5
+ *
6
+ * Provides:
7
+ * - Order creation (limit, market)
8
+ * - Order management (cancel, query)
9
+ * - Rewards tracking
10
+ * - Balance management
11
+ *
12
+ * Note: Market data methods have been moved to MarketService.
13
+ */
14
+ import { ClobClient, Side as ClobSide, OrderType as ClobOrderType, } from '@polymarket/clob-client';
15
+ import { Wallet } from 'ethers';
16
+ import { ApiType } from '../core/rate-limiter.js';
17
+ import { PolymarketError, ErrorCode } from '../core/errors.js';
18
+ // Chain IDs
19
+ export const POLYGON_MAINNET = 137;
20
+ export const POLYGON_AMOY = 80002;
21
+ // CLOB Host
22
+ const CLOB_HOST = 'https://clob.polymarket.com';
23
+ // ============================================================================
24
+ // Polymarket Order Minimums
25
+ // ============================================================================
26
+ // These are enforced by Polymarket's CLOB API. Orders below these limits will
27
+ // be rejected with errors like:
28
+ // - "invalid amount for a marketable BUY order ($X), min size: $1"
29
+ // - "Size (X) lower than the minimum: 5"
30
+ //
31
+ // Strategies should ensure orders meet these requirements BEFORE sending.
32
+ // ============================================================================
33
+ /** Minimum order value in USDC (price * size >= MIN_ORDER_VALUE) */
34
+ export const MIN_ORDER_VALUE_USDC = 1;
35
+ /** Minimum order size in shares */
36
+ export const MIN_ORDER_SIZE_SHARES = 5;
37
+ // ============================================================================
38
+ // TradingService Implementation
39
+ // ============================================================================
40
+ export class TradingService {
41
+ rateLimiter;
42
+ cache;
43
+ config;
44
+ clobClient = null;
45
+ wallet;
46
+ chainId;
47
+ credentials = null;
48
+ initialized = false;
49
+ tickSizeCache = new Map();
50
+ negRiskCache = new Map();
51
+ constructor(rateLimiter, cache, config) {
52
+ this.rateLimiter = rateLimiter;
53
+ this.cache = cache;
54
+ this.config = config;
55
+ this.wallet = new Wallet(config.privateKey);
56
+ this.chainId = (config.chainId || POLYGON_MAINNET);
57
+ this.credentials = config.credentials || null;
58
+ }
59
+ // ============================================================================
60
+ // Initialization
61
+ // ============================================================================
62
+ async initialize() {
63
+ if (this.initialized)
64
+ return;
65
+ // Create CLOB client with L1 auth (wallet)
66
+ this.clobClient = new ClobClient(CLOB_HOST, this.chainId, this.wallet);
67
+ // Get or create API credentials
68
+ // We use derive-first strategy (opposite of official createOrDeriveApiKey)
69
+ // because most users already have a key, avoiding unnecessary 400 error logs.
70
+ if (!this.credentials) {
71
+ const creds = await this.deriveOrCreateApiKey();
72
+ this.credentials = {
73
+ key: creds.key,
74
+ secret: creds.secret,
75
+ passphrase: creds.passphrase,
76
+ };
77
+ }
78
+ // Re-initialize with L2 auth (credentials)
79
+ this.clobClient = new ClobClient(CLOB_HOST, this.chainId, this.wallet, {
80
+ key: this.credentials.key,
81
+ secret: this.credentials.secret,
82
+ passphrase: this.credentials.passphrase,
83
+ });
84
+ this.initialized = true;
85
+ }
86
+ /**
87
+ * Try to derive existing API key first, create new one if not exists.
88
+ * This is the reverse of official createOrDeriveApiKey() to avoid
89
+ * 400 "Could not create api key" error log for existing keys.
90
+ */
91
+ async deriveOrCreateApiKey() {
92
+ // First try to derive existing key (most common case for existing users)
93
+ const derived = await this.clobClient.deriveApiKey();
94
+ if (derived.key) {
95
+ return derived;
96
+ }
97
+ // Derive failed (key doesn't exist), create new key (first-time users)
98
+ const created = await this.clobClient.createApiKey();
99
+ if (!created.key) {
100
+ throw new PolymarketError(ErrorCode.AUTH_FAILED, 'Failed to create or derive API key. Wallet may not be registered on Polymarket.');
101
+ }
102
+ return created;
103
+ }
104
+ async ensureInitialized() {
105
+ if (!this.initialized || !this.clobClient) {
106
+ await this.initialize();
107
+ }
108
+ return this.clobClient;
109
+ }
110
+ // ============================================================================
111
+ // Trading Helpers
112
+ // ============================================================================
113
+ /**
114
+ * Get tick size for a token
115
+ */
116
+ async getTickSize(tokenId) {
117
+ if (this.tickSizeCache.has(tokenId)) {
118
+ return this.tickSizeCache.get(tokenId);
119
+ }
120
+ const client = await this.ensureInitialized();
121
+ const tickSize = await client.getTickSize(tokenId);
122
+ this.tickSizeCache.set(tokenId, tickSize);
123
+ return tickSize;
124
+ }
125
+ /**
126
+ * Check if token is neg risk
127
+ */
128
+ async isNegRisk(tokenId) {
129
+ if (this.negRiskCache.has(tokenId)) {
130
+ return this.negRiskCache.get(tokenId);
131
+ }
132
+ const client = await this.ensureInitialized();
133
+ const negRisk = await client.getNegRisk(tokenId);
134
+ this.negRiskCache.set(tokenId, negRisk);
135
+ return negRisk;
136
+ }
137
+ // ============================================================================
138
+ // Order Creation
139
+ // ============================================================================
140
+ /**
141
+ * Create and post a limit order
142
+ *
143
+ * Note: Polymarket enforces minimum order requirements:
144
+ * - Minimum size: 5 shares (MIN_ORDER_SIZE_SHARES)
145
+ * - Minimum value: $1 USDC (MIN_ORDER_VALUE_USDC)
146
+ *
147
+ * Orders below these limits will be rejected by the API.
148
+ */
149
+ async createLimitOrder(params) {
150
+ // Validate minimum order requirements before sending to API
151
+ if (params.size < MIN_ORDER_SIZE_SHARES) {
152
+ return {
153
+ success: false,
154
+ errorMsg: `Order size (${params.size}) is below Polymarket minimum (${MIN_ORDER_SIZE_SHARES} shares)`,
155
+ };
156
+ }
157
+ const orderValue = params.price * params.size;
158
+ if (orderValue < MIN_ORDER_VALUE_USDC) {
159
+ return {
160
+ success: false,
161
+ errorMsg: `Order value ($${orderValue.toFixed(2)}) is below Polymarket minimum ($${MIN_ORDER_VALUE_USDC})`,
162
+ };
163
+ }
164
+ const client = await this.ensureInitialized();
165
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
166
+ try {
167
+ const [tickSize, negRisk] = await Promise.all([
168
+ this.getTickSize(params.tokenId),
169
+ this.isNegRisk(params.tokenId),
170
+ ]);
171
+ const orderType = params.orderType === 'GTD' ? ClobOrderType.GTD : ClobOrderType.GTC;
172
+ const result = await client.createAndPostOrder({
173
+ tokenID: params.tokenId,
174
+ side: params.side === 'BUY' ? ClobSide.BUY : ClobSide.SELL,
175
+ price: params.price,
176
+ size: params.size,
177
+ expiration: params.expiration || 0,
178
+ }, { tickSize, negRisk }, orderType);
179
+ const success = result.success === true ||
180
+ (result.success !== false &&
181
+ ((result.orderID !== undefined && result.orderID !== '') ||
182
+ (result.transactionsHashes !== undefined && result.transactionsHashes.length > 0)));
183
+ return {
184
+ success,
185
+ orderId: result.orderID,
186
+ orderIds: result.orderIDs,
187
+ errorMsg: result.errorMsg,
188
+ transactionHashes: result.transactionsHashes,
189
+ };
190
+ }
191
+ catch (error) {
192
+ return {
193
+ success: false,
194
+ errorMsg: `Order failed: ${error instanceof Error ? error.message : String(error)}`,
195
+ };
196
+ }
197
+ });
198
+ }
199
+ /**
200
+ * Create and post a market order
201
+ *
202
+ * Note: Polymarket enforces minimum order requirements:
203
+ * - Minimum value: $1 USDC (MIN_ORDER_VALUE_USDC)
204
+ *
205
+ * Market orders below this limit will be rejected by the API.
206
+ */
207
+ async createMarketOrder(params) {
208
+ // Validate minimum order value before sending to API
209
+ if (params.amount < MIN_ORDER_VALUE_USDC) {
210
+ return {
211
+ success: false,
212
+ errorMsg: `Order amount ($${params.amount.toFixed(2)}) is below Polymarket minimum ($${MIN_ORDER_VALUE_USDC})`,
213
+ };
214
+ }
215
+ const client = await this.ensureInitialized();
216
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
217
+ try {
218
+ const [tickSize, negRisk] = await Promise.all([
219
+ this.getTickSize(params.tokenId),
220
+ this.isNegRisk(params.tokenId),
221
+ ]);
222
+ const orderType = params.orderType === 'FAK' ? ClobOrderType.FAK : ClobOrderType.FOK;
223
+ const result = await client.createAndPostMarketOrder({
224
+ tokenID: params.tokenId,
225
+ side: params.side === 'BUY' ? ClobSide.BUY : ClobSide.SELL,
226
+ amount: params.amount,
227
+ price: params.price,
228
+ }, { tickSize, negRisk }, orderType);
229
+ const success = result.success === true ||
230
+ (result.success !== false &&
231
+ ((result.orderID !== undefined && result.orderID !== '') ||
232
+ (result.transactionsHashes !== undefined && result.transactionsHashes.length > 0)));
233
+ return {
234
+ success,
235
+ orderId: result.orderID,
236
+ orderIds: result.orderIDs,
237
+ errorMsg: result.errorMsg,
238
+ transactionHashes: result.transactionsHashes,
239
+ };
240
+ }
241
+ catch (error) {
242
+ return {
243
+ success: false,
244
+ errorMsg: `Market order failed: ${error instanceof Error ? error.message : String(error)}`,
245
+ };
246
+ }
247
+ });
248
+ }
249
+ // ============================================================================
250
+ // Order Management
251
+ // ============================================================================
252
+ async cancelOrder(orderId) {
253
+ const client = await this.ensureInitialized();
254
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
255
+ try {
256
+ const result = await client.cancelOrder({ orderID: orderId });
257
+ return { success: result.canceled ?? false, orderId };
258
+ }
259
+ catch (error) {
260
+ throw new PolymarketError(ErrorCode.ORDER_FAILED, `Cancel failed: ${error instanceof Error ? error.message : String(error)}`);
261
+ }
262
+ });
263
+ }
264
+ async cancelOrders(orderIds) {
265
+ const client = await this.ensureInitialized();
266
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
267
+ try {
268
+ const result = await client.cancelOrders(orderIds);
269
+ return { success: result.canceled ?? false, orderIds };
270
+ }
271
+ catch (error) {
272
+ throw new PolymarketError(ErrorCode.ORDER_FAILED, `Cancel orders failed: ${error instanceof Error ? error.message : String(error)}`);
273
+ }
274
+ });
275
+ }
276
+ async cancelAllOrders() {
277
+ const client = await this.ensureInitialized();
278
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
279
+ try {
280
+ const result = await client.cancelAll();
281
+ return { success: result.canceled ?? false };
282
+ }
283
+ catch (error) {
284
+ throw new PolymarketError(ErrorCode.ORDER_FAILED, `Cancel all failed: ${error instanceof Error ? error.message : String(error)}`);
285
+ }
286
+ });
287
+ }
288
+ async getOpenOrders(marketId) {
289
+ const client = await this.ensureInitialized();
290
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
291
+ const orders = await client.getOpenOrders(marketId ? { market: marketId } : undefined);
292
+ return orders.map((o) => {
293
+ const originalSize = Number(o.original_size) || 0;
294
+ const filledSize = Number(o.size_matched) || 0;
295
+ return {
296
+ id: o.id,
297
+ status: o.status,
298
+ tokenId: o.asset_id,
299
+ side: o.side.toUpperCase(),
300
+ price: Number(o.price) || 0,
301
+ originalSize,
302
+ filledSize,
303
+ remainingSize: originalSize - filledSize,
304
+ associateTrades: o.associate_trades || [],
305
+ createdAt: o.created_at,
306
+ };
307
+ });
308
+ });
309
+ }
310
+ async getTrades(marketId) {
311
+ const client = await this.ensureInitialized();
312
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
313
+ const trades = await client.getTrades(marketId ? { market: marketId } : undefined);
314
+ return trades.map((t) => ({
315
+ id: t.id,
316
+ tokenId: t.asset_id,
317
+ side: t.side,
318
+ price: Number(t.price) || 0,
319
+ size: Number(t.size) || 0,
320
+ fee: Number(t.fee_rate_bps) || 0,
321
+ timestamp: Number(t.match_time) || Date.now(),
322
+ }));
323
+ });
324
+ }
325
+ // ============================================================================
326
+ // Rewards
327
+ // ============================================================================
328
+ async isOrderScoring(orderId) {
329
+ const client = await this.ensureInitialized();
330
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
331
+ const result = await client.isOrderScoring({ order_id: orderId });
332
+ return result.scoring;
333
+ });
334
+ }
335
+ async areOrdersScoring(orderIds) {
336
+ const client = await this.ensureInitialized();
337
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
338
+ return await client.areOrdersScoring({ orderIds });
339
+ });
340
+ }
341
+ async getEarningsForDay(date) {
342
+ const client = await this.ensureInitialized();
343
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
344
+ const earnings = await client.getEarningsForUserForDay(date);
345
+ return earnings.map(e => ({
346
+ date: e.date,
347
+ conditionId: e.condition_id,
348
+ assetAddress: e.asset_address,
349
+ makerAddress: e.maker_address,
350
+ earnings: e.earnings,
351
+ assetRate: e.asset_rate,
352
+ }));
353
+ });
354
+ }
355
+ async getCurrentRewards() {
356
+ const client = await this.ensureInitialized();
357
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
358
+ const rewards = await client.getCurrentRewards();
359
+ return rewards.map(r => ({
360
+ conditionId: r.condition_id,
361
+ question: r.question,
362
+ marketSlug: r.market_slug,
363
+ eventSlug: r.event_slug,
364
+ rewardsMaxSpread: r.rewards_max_spread,
365
+ rewardsMinSize: r.rewards_min_size,
366
+ tokens: r.tokens.map(t => ({
367
+ tokenId: t.token_id,
368
+ outcome: t.outcome,
369
+ price: t.price,
370
+ })),
371
+ rewardsConfig: r.rewards_config.map(c => ({
372
+ assetAddress: c.asset_address,
373
+ startDate: c.start_date,
374
+ endDate: c.end_date,
375
+ ratePerDay: c.rate_per_day,
376
+ totalRewards: c.total_rewards,
377
+ })),
378
+ }));
379
+ });
380
+ }
381
+ // ============================================================================
382
+ // Balance & Allowance
383
+ // ============================================================================
384
+ async getBalanceAllowance(assetType, tokenId) {
385
+ const client = await this.ensureInitialized();
386
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
387
+ const result = await client.getBalanceAllowance({
388
+ asset_type: assetType,
389
+ token_id: tokenId,
390
+ });
391
+ return { balance: result.balance, allowance: result.allowance };
392
+ });
393
+ }
394
+ async updateBalanceAllowance(assetType, tokenId) {
395
+ const client = await this.ensureInitialized();
396
+ return this.rateLimiter.execute(ApiType.CLOB_API, async () => {
397
+ await client.updateBalanceAllowance({
398
+ asset_type: assetType,
399
+ token_id: tokenId,
400
+ });
401
+ });
402
+ }
403
+ // ============================================================================
404
+ // Account Info
405
+ // ============================================================================
406
+ getAddress() {
407
+ return this.wallet.address;
408
+ }
409
+ getWallet() {
410
+ return this.wallet;
411
+ }
412
+ getCredentials() {
413
+ return this.credentials;
414
+ }
415
+ isInitialized() {
416
+ return this.initialized;
417
+ }
418
+ getClobClient() {
419
+ return this.clobClient;
420
+ }
421
+ }
422
+ //# sourceMappingURL=trading-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trading-service.js","sourceRoot":"","sources":["../../src/services/trading-service.ts"],"names":[],"mappings":"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"}