@catalyst-team/poly-sdk 0.4.3 → 0.4.5

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 (33) hide show
  1. package/dist/src/core/order-status.d.ts +159 -0
  2. package/dist/src/core/order-status.d.ts.map +1 -0
  3. package/dist/src/core/order-status.js +254 -0
  4. package/dist/src/core/order-status.js.map +1 -0
  5. package/dist/src/core/types.d.ts +124 -0
  6. package/dist/src/core/types.d.ts.map +1 -1
  7. package/dist/src/core/types.js +120 -0
  8. package/dist/src/core/types.js.map +1 -1
  9. package/dist/src/index.d.ts +5 -0
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +6 -0
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/src/services/ctf-detector.d.ts +215 -0
  14. package/dist/src/services/ctf-detector.d.ts.map +1 -0
  15. package/dist/src/services/ctf-detector.js +420 -0
  16. package/dist/src/services/ctf-detector.js.map +1 -0
  17. package/dist/src/services/ctf-manager.d.ts +202 -0
  18. package/dist/src/services/ctf-manager.d.ts.map +1 -0
  19. package/dist/src/services/ctf-manager.js +542 -0
  20. package/dist/src/services/ctf-manager.js.map +1 -0
  21. package/dist/src/services/order-manager.d.ts +281 -0
  22. package/dist/src/services/order-manager.d.ts.map +1 -0
  23. package/dist/src/services/order-manager.js +641 -0
  24. package/dist/src/services/order-manager.js.map +1 -0
  25. package/dist/src/services/order-manager.test.d.ts +8 -0
  26. package/dist/src/services/order-manager.test.d.ts.map +1 -0
  27. package/dist/src/services/order-manager.test.js +477 -0
  28. package/dist/src/services/order-manager.test.js.map +1 -0
  29. package/dist/src/services/trading-service.d.ts +89 -1
  30. package/dist/src/services/trading-service.d.ts.map +1 -1
  31. package/dist/src/services/trading-service.js +227 -1
  32. package/dist/src/services/trading-service.js.map +1 -1
  33. package/package.json +1 -1
@@ -0,0 +1,281 @@
1
+ /**
2
+ * OrderManager - Unified Order Creation and Monitoring
3
+ *
4
+ * Core Design Philosophy:
5
+ * - Unifies order creation + lifecycle monitoring in one component
6
+ * - Encapsulates all Polymarket-specific details (USDC.e, tick size, tokenId, CTF, Polygon)
7
+ * - Provides complete lifecycle events (CLOB match → tx submit → on-chain confirm)
8
+ * - Auto-validates orders before submission (market state, balance, precision)
9
+ * - Auto-watches orders after creation
10
+ *
11
+ * Platform-Specific Implementation:
12
+ * This is a Polymarket-specific implementation. The design allows future extraction
13
+ * to interfaces if supporting multiple prediction markets, but for now we focus on
14
+ * clean encapsulation with Polymarket details in private methods.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const orderMgr = new OrderManager({
19
+ * privateKey: '0x...',
20
+ * rateLimiter,
21
+ * cache,
22
+ * });
23
+ *
24
+ * await orderMgr.start();
25
+ *
26
+ * // Listen to complete lifecycle
27
+ * orderMgr.on('order_opened', (order) => {
28
+ * console.log('Order live in orderbook');
29
+ * });
30
+ *
31
+ * orderMgr.on('order_filled', (event) => {
32
+ * console.log(`Filled: ${event.fill.size} @ ${event.fill.price}`);
33
+ * });
34
+ *
35
+ * orderMgr.on('transaction_confirmed', (event) => {
36
+ * console.log(`On-chain settled: ${event.transactionHash}`);
37
+ * });
38
+ *
39
+ * // Create order (auto-validates + auto-watches)
40
+ * const result = await orderMgr.createOrder({
41
+ * tokenId: '0x...',
42
+ * side: 'BUY',
43
+ * price: 0.52,
44
+ * size: 100,
45
+ * });
46
+ * ```
47
+ */
48
+ import { EventEmitter } from 'events';
49
+ import { type LimitOrderParams, type Order, type OrderResult } from './trading-service.js';
50
+ import { RateLimiter } from '../core/rate-limiter.js';
51
+ import type { UnifiedCache } from '../core/unified-cache.js';
52
+ import { OrderStatus } from '../core/types.js';
53
+ export interface OrderManagerConfig {
54
+ /** Private key for signing transactions */
55
+ privateKey: string;
56
+ /** Rate limiter for API calls */
57
+ rateLimiter: RateLimiter;
58
+ /** Cache for market metadata */
59
+ cache: UnifiedCache;
60
+ /** Chain ID (default: 137 Polygon mainnet) */
61
+ chainId?: number;
62
+ /** Detection mode for order status tracking */
63
+ mode?: 'websocket' | 'polling' | 'hybrid';
64
+ /** Polling interval in ms (default: 5000) */
65
+ pollingInterval?: number;
66
+ /** RPC URL for Polygon provider (for settlement tracking) */
67
+ polygonRpcUrl?: string;
68
+ }
69
+ /**
70
+ * Optional metadata for order tracking
71
+ * Can be used by strategies to attach context
72
+ */
73
+ export interface OrderMetadata {
74
+ strategyId?: string;
75
+ marketSlug?: string;
76
+ notes?: string;
77
+ [key: string]: unknown;
78
+ }
79
+ /**
80
+ * Order status change event
81
+ * Emitted whenever an order transitions between states
82
+ */
83
+ export interface OrderStatusChangeEvent {
84
+ orderId: string;
85
+ from: OrderStatus;
86
+ to: OrderStatus;
87
+ order: Order;
88
+ timestamp: number;
89
+ reason?: string;
90
+ }
91
+ /**
92
+ * Fill event
93
+ * Emitted when an order receives a fill (partial or complete)
94
+ */
95
+ export interface FillEvent {
96
+ orderId: string;
97
+ order: Order;
98
+ fill: {
99
+ tradeId: string;
100
+ size: number;
101
+ price: number;
102
+ fee: number;
103
+ timestamp: number;
104
+ transactionHash?: string;
105
+ };
106
+ cumulativeFilled: number;
107
+ remainingSize: number;
108
+ isCompleteFill: boolean;
109
+ }
110
+ /**
111
+ * Transaction submitted event (Polymarket-specific)
112
+ * Emitted when a trade has a transaction hash
113
+ */
114
+ export interface TransactionEvent {
115
+ orderId: string;
116
+ tradeId: string;
117
+ transactionHash: string;
118
+ timestamp: number;
119
+ }
120
+ /**
121
+ * On-chain settlement event (Polymarket-specific)
122
+ * Emitted when transaction is confirmed on Polygon
123
+ */
124
+ export interface SettlementEvent {
125
+ orderId: string;
126
+ tradeId: string;
127
+ transactionHash: string;
128
+ blockNumber: number;
129
+ gasUsed: string;
130
+ timestamp: number;
131
+ }
132
+ /**
133
+ * Cancellation event
134
+ */
135
+ export interface CancelEvent {
136
+ orderId: string;
137
+ order: Order;
138
+ filledSize: number;
139
+ cancelledSize: number;
140
+ reason: 'user' | 'system';
141
+ timestamp: number;
142
+ }
143
+ /**
144
+ * Expiration event (for GTD orders)
145
+ */
146
+ export interface ExpireEvent {
147
+ orderId: string;
148
+ order: Order;
149
+ filledSize: number;
150
+ expiredSize: number;
151
+ expirationTime: number;
152
+ timestamp: number;
153
+ }
154
+ /**
155
+ * Rejection event (order failed validation)
156
+ */
157
+ export interface RejectEvent {
158
+ orderId?: string;
159
+ params: LimitOrderParams;
160
+ reason: string;
161
+ timestamp: number;
162
+ }
163
+ export declare class OrderManager extends EventEmitter {
164
+ private tradingService;
165
+ private realtimeService;
166
+ private polygonProvider;
167
+ private config;
168
+ private initialized;
169
+ private watchedOrders;
170
+ private processedEvents;
171
+ private mode;
172
+ private marketCache;
173
+ constructor(config: OrderManagerConfig);
174
+ /**
175
+ * Initialize OrderManager
176
+ * - Initializes TradingService
177
+ * - Optionally initializes RealtimeService (for WebSocket mode)
178
+ * - Optionally initializes Polygon provider (for settlement tracking)
179
+ */
180
+ start(): Promise<void>;
181
+ /**
182
+ * Stop OrderManager
183
+ * - Unwatch all orders
184
+ * - Disconnect WebSocket (if connected)
185
+ */
186
+ stop(): void;
187
+ /**
188
+ * Create and submit a limit order
189
+ *
190
+ * Auto-validates (Polymarket-specific):
191
+ * - Market state (active, not closed)
192
+ * - USDC.e balance
193
+ * - Tick size (0.01)
194
+ * - Minimum size (5 shares)
195
+ * - Minimum value ($1)
196
+ *
197
+ * Auto-watches: Starts monitoring immediately after creation
198
+ *
199
+ * @param params Order parameters
200
+ * @param metadata Optional metadata for tracking
201
+ * @returns Order result with orderId or error
202
+ */
203
+ createOrder(params: LimitOrderParams, metadata?: OrderMetadata): Promise<OrderResult>;
204
+ /**
205
+ * Cancel an order
206
+ * Auto-unwatches after cancellation
207
+ */
208
+ cancelOrder(orderId: string): Promise<OrderResult>;
209
+ /**
210
+ * Get order details
211
+ * Fetches from TradingService (CLOB API)
212
+ */
213
+ getOrder(orderId: string): Promise<Order | null>;
214
+ /**
215
+ * Create multiple orders in batch
216
+ * Auto-watches all successfully created orders
217
+ */
218
+ createBatchOrders(orders: LimitOrderParams[], metadata?: OrderMetadata): Promise<OrderResult>;
219
+ /**
220
+ * Manually watch an order
221
+ * Used for monitoring externally-created orders
222
+ *
223
+ * @param orderId Order ID to watch
224
+ * @param metadata Optional metadata
225
+ */
226
+ watchOrder(orderId: string, metadata?: OrderMetadata): void;
227
+ /**
228
+ * Stop watching an order
229
+ */
230
+ unwatchOrder(orderId: string): void;
231
+ /**
232
+ * Get all watched orders
233
+ */
234
+ getWatchedOrders(): Order[];
235
+ /**
236
+ * Get watched order by ID
237
+ */
238
+ getWatchedOrder(orderId: string): Order | undefined;
239
+ /**
240
+ * Validate order parameters before submission
241
+ * All checks here are Polymarket-specific
242
+ */
243
+ private validateOrder;
244
+ /**
245
+ * Ensure WebSocket connection is established
246
+ * Lazy initialization of RealtimeService
247
+ */
248
+ private ensureWebSocketConnected;
249
+ /**
250
+ * Handle USER_ORDER WebSocket event (Polymarket-specific)
251
+ * Triggered on: PLACEMENT, UPDATE, CANCELLATION
252
+ */
253
+ private handleUserOrder;
254
+ /**
255
+ * Handle USER_TRADE WebSocket event (Polymarket-specific)
256
+ * Triggered when: MATCHED, MINED, CONFIRMED
257
+ */
258
+ private handleUserTrade;
259
+ /**
260
+ * Start polling for order status
261
+ * Fallback mechanism when WebSocket is unavailable
262
+ */
263
+ private startPolling;
264
+ /**
265
+ * Update watched order from polling result
266
+ * Detects both status changes and fill changes
267
+ */
268
+ private updateWatchedOrder;
269
+ /**
270
+ * Emit status change event with appropriate specific events
271
+ * @param fillAlreadyEmitted - Set to true if fill event was already emitted (to prevent duplicates)
272
+ */
273
+ private emitStatusChange;
274
+ /**
275
+ * Track transaction settlement on Polygon blockchain
276
+ * Waits for on-chain confirmation and emits transaction_confirmed event
277
+ */
278
+ private trackSettlement;
279
+ private ensureInitialized;
280
+ }
281
+ //# sourceMappingURL=order-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-manager.d.ts","sourceRoot":"","sources":["../../../src/services/order-manager.ts"],"names":[],"mappings":"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"}