@catalyst-team/poly-sdk 0.2.1 → 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.
- package/README.md +545 -812
- package/README.zh-CN.md +645 -342
- package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts +12 -0
- package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/arbitrage-service.integration.test.js +267 -0
- package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.js +6 -3
- package/dist/__tests__/integration/data-api.integration.test.js.map +1 -1
- package/dist/__tests__/integration/market-service.integration.test.d.ts +10 -0
- package/dist/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/market-service.integration.test.js +173 -0
- package/dist/__tests__/integration/market-service.integration.test.js.map +1 -0
- package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts +10 -0
- package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/realtime-service-v2.integration.test.js +307 -0
- package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
- package/dist/__tests__/integration/trading-service.integration.test.d.ts +10 -0
- package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/trading-service.integration.test.js +58 -0
- package/dist/__tests__/integration/trading-service.integration.test.js.map +1 -0
- package/dist/clients/clob-api.d.ts +73 -0
- package/dist/clients/clob-api.d.ts.map +1 -1
- package/dist/clients/clob-api.js +60 -0
- package/dist/clients/clob-api.js.map +1 -1
- package/dist/clients/data-api.d.ts +319 -14
- package/dist/clients/data-api.d.ts.map +1 -1
- package/dist/clients/data-api.js +342 -15
- package/dist/clients/data-api.js.map +1 -1
- package/dist/clients/subgraph.d.ts +196 -0
- package/dist/clients/subgraph.d.ts.map +1 -0
- package/dist/clients/subgraph.js +332 -0
- package/dist/clients/subgraph.js.map +1 -0
- package/dist/clients/websocket-manager.d.ts +3 -0
- package/dist/clients/websocket-manager.d.ts.map +1 -1
- package/dist/clients/websocket-manager.js +10 -3
- package/dist/clients/websocket-manager.js.map +1 -1
- package/dist/core/cache.d.ts +1 -0
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +1 -0
- package/dist/core/cache.js.map +1 -1
- package/dist/core/errors.d.ts +2 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +2 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/rate-limiter.d.ts +2 -1
- package/dist/core/rate-limiter.d.ts.map +1 -1
- package/dist/core/rate-limiter.js +5 -0
- package/dist/core/rate-limiter.js.map +1 -1
- package/dist/core/types.d.ts +100 -12
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/types.test.d.ts +7 -0
- package/dist/core/types.test.d.ts.map +1 -0
- package/dist/core/types.test.js +122 -0
- package/dist/core/types.test.js.map +1 -0
- package/dist/index.d.ts +76 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +125 -132
- package/dist/index.js.map +1 -1
- package/dist/services/arbitrage-service.d.ts +3 -2
- package/dist/services/arbitrage-service.d.ts.map +1 -1
- package/dist/services/arbitrage-service.js +58 -40
- package/dist/services/arbitrage-service.js.map +1 -1
- package/dist/services/market-service.d.ts +108 -8
- package/dist/services/market-service.d.ts.map +1 -1
- package/dist/services/market-service.js +352 -36
- package/dist/services/market-service.js.map +1 -1
- package/dist/services/onchain-service.d.ts +309 -0
- package/dist/services/onchain-service.d.ts.map +1 -0
- package/dist/services/onchain-service.js +417 -0
- package/dist/services/onchain-service.js.map +1 -0
- package/dist/services/realtime-service-v2.d.ts +361 -0
- package/dist/services/realtime-service-v2.d.ts.map +1 -0
- package/dist/services/realtime-service-v2.js +840 -0
- package/dist/services/realtime-service-v2.js.map +1 -0
- package/dist/services/realtime-service.d.ts +17 -17
- package/dist/services/realtime-service.d.ts.map +1 -1
- package/dist/services/realtime-service.js +91 -59
- package/dist/services/realtime-service.js.map +1 -1
- package/dist/services/smart-money-service.d.ts +196 -0
- package/dist/services/smart-money-service.d.ts.map +1 -0
- package/dist/services/smart-money-service.js +358 -0
- package/dist/services/smart-money-service.js.map +1 -0
- package/dist/services/trading-service.d.ts +156 -0
- package/dist/services/trading-service.d.ts.map +1 -0
- package/dist/services/trading-service.js +356 -0
- package/dist/services/trading-service.js.map +1 -0
- package/dist/services/wallet-service.d.ts +183 -2
- package/dist/services/wallet-service.d.ts.map +1 -1
- package/dist/services/wallet-service.js +458 -1
- package/dist/services/wallet-service.js.map +1 -1
- package/dist/utils/price-utils.test.d.ts +5 -0
- package/dist/utils/price-utils.test.d.ts.map +1 -0
- package/dist/utils/price-utils.test.js +192 -0
- package/dist/utils/price-utils.test.js.map +1 -0
- package/package.json +4 -3
- package/README.en.md +0 -502
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArbitrageService Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the ArbitrageService market scanning and opportunity detection.
|
|
5
|
+
* These tests make REAL API calls to Polymarket.
|
|
6
|
+
*
|
|
7
|
+
* Note: Trading tests are skipped without a real private key.
|
|
8
|
+
*
|
|
9
|
+
* Run with: pnpm test:integration
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=arbitrage-service.integration.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbitrage-service.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/arbitrage-service.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArbitrageService Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the ArbitrageService market scanning and opportunity detection.
|
|
5
|
+
* These tests make REAL API calls to Polymarket.
|
|
6
|
+
*
|
|
7
|
+
* Note: Trading tests are skipped without a real private key.
|
|
8
|
+
*
|
|
9
|
+
* Run with: pnpm test:integration
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect, beforeAll, afterEach } from 'vitest';
|
|
12
|
+
import { ArbitrageService } from '../../services/arbitrage-service.js';
|
|
13
|
+
describe('ArbitrageService Integration', () => {
|
|
14
|
+
let service;
|
|
15
|
+
let testMarket;
|
|
16
|
+
beforeAll(async () => {
|
|
17
|
+
// Find a liquid market for testing
|
|
18
|
+
const response = await fetch('https://gamma-api.polymarket.com/markets?active=true&limit=1&order=volume24hr&ascending=false');
|
|
19
|
+
const markets = await response.json();
|
|
20
|
+
if (markets.length === 0) {
|
|
21
|
+
throw new Error('No active markets found for testing');
|
|
22
|
+
}
|
|
23
|
+
const gammaMarket = markets[0];
|
|
24
|
+
console.log(`Using test market: "${gammaMarket.question.slice(0, 50)}..."`);
|
|
25
|
+
// Get token IDs from CLOB API
|
|
26
|
+
const clobResponse = await fetch(`https://clob.polymarket.com/markets/${gammaMarket.conditionId}`);
|
|
27
|
+
const clobMarket = await clobResponse.json();
|
|
28
|
+
const yesToken = clobMarket.tokens.find(t => t.outcome === 'Yes');
|
|
29
|
+
const noToken = clobMarket.tokens.find(t => t.outcome === 'No');
|
|
30
|
+
if (!yesToken || !noToken) {
|
|
31
|
+
throw new Error('Market does not have YES/NO tokens');
|
|
32
|
+
}
|
|
33
|
+
testMarket = {
|
|
34
|
+
name: gammaMarket.question.slice(0, 50),
|
|
35
|
+
conditionId: gammaMarket.conditionId,
|
|
36
|
+
yesTokenId: yesToken.token_id,
|
|
37
|
+
noTokenId: noToken.token_id,
|
|
38
|
+
outcomes: (gammaMarket.outcomes || ['Yes', 'No']),
|
|
39
|
+
};
|
|
40
|
+
}, 60000);
|
|
41
|
+
afterEach(async () => {
|
|
42
|
+
// Clean up service after each test
|
|
43
|
+
if (service) {
|
|
44
|
+
await service.stop();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
describe('Market Scanning', () => {
|
|
48
|
+
it('should scan markets for arbitrage opportunities', async () => {
|
|
49
|
+
service = new ArbitrageService({ enableLogging: false });
|
|
50
|
+
const results = await service.scanMarkets({
|
|
51
|
+
minVolume24h: 1000,
|
|
52
|
+
limit: 10,
|
|
53
|
+
}, 0.001); // Very low threshold to find results
|
|
54
|
+
expect(Array.isArray(results)).toBe(true);
|
|
55
|
+
expect(results.length).toBeGreaterThan(0);
|
|
56
|
+
// Verify result structure
|
|
57
|
+
const result = results[0];
|
|
58
|
+
expect(result.market).toBeDefined();
|
|
59
|
+
expect(typeof result.market.name).toBe('string');
|
|
60
|
+
expect(typeof result.market.conditionId).toBe('string');
|
|
61
|
+
expect(typeof result.market.yesTokenId).toBe('string');
|
|
62
|
+
expect(typeof result.market.noTokenId).toBe('string');
|
|
63
|
+
expect(['long', 'short', 'none']).toContain(result.arbType);
|
|
64
|
+
expect(typeof result.profitRate).toBe('number');
|
|
65
|
+
expect(typeof result.profitPercent).toBe('number');
|
|
66
|
+
expect(typeof result.volume24h).toBe('number');
|
|
67
|
+
expect(typeof result.score).toBe('number');
|
|
68
|
+
// Verify effective prices
|
|
69
|
+
expect(typeof result.effectivePrices.buyYes).toBe('number');
|
|
70
|
+
expect(typeof result.effectivePrices.buyNo).toBe('number');
|
|
71
|
+
expect(typeof result.effectivePrices.sellYes).toBe('number');
|
|
72
|
+
expect(typeof result.effectivePrices.sellNo).toBe('number');
|
|
73
|
+
expect(typeof result.effectivePrices.longCost).toBe('number');
|
|
74
|
+
expect(typeof result.effectivePrices.shortRevenue).toBe('number');
|
|
75
|
+
console.log(`✓ Scanned ${results.length} markets`);
|
|
76
|
+
console.log(` Best: ${result.market.name.slice(0, 40)}...`);
|
|
77
|
+
console.log(` Type: ${result.arbType}, Profit: ${result.profitPercent.toFixed(3)}%`);
|
|
78
|
+
}, 120000);
|
|
79
|
+
it('should filter markets by keywords', async () => {
|
|
80
|
+
service = new ArbitrageService({ enableLogging: false });
|
|
81
|
+
const results = await service.scanMarkets({
|
|
82
|
+
minVolume24h: 100,
|
|
83
|
+
keywords: ['bitcoin', 'btc', 'crypto'],
|
|
84
|
+
limit: 20,
|
|
85
|
+
}, 0);
|
|
86
|
+
// Results may be empty if no crypto markets match
|
|
87
|
+
expect(Array.isArray(results)).toBe(true);
|
|
88
|
+
console.log(`✓ Found ${results.length} markets matching crypto keywords`);
|
|
89
|
+
}, 120000);
|
|
90
|
+
it('should quick scan for best opportunities', async () => {
|
|
91
|
+
service = new ArbitrageService({ enableLogging: false });
|
|
92
|
+
const results = await service.quickScan(0.001, 5);
|
|
93
|
+
expect(Array.isArray(results)).toBe(true);
|
|
94
|
+
expect(results.length).toBeLessThanOrEqual(5);
|
|
95
|
+
// Quick scan should only return markets with opportunities
|
|
96
|
+
for (const result of results) {
|
|
97
|
+
expect(['long', 'short']).toContain(result.arbType);
|
|
98
|
+
expect(result.profitRate).toBeGreaterThan(0);
|
|
99
|
+
}
|
|
100
|
+
console.log(`✓ Quick scan found ${results.length} opportunities`);
|
|
101
|
+
if (results.length > 0) {
|
|
102
|
+
console.log(` Best: ${results[0].arbType} +${results[0].profitPercent.toFixed(3)}%`);
|
|
103
|
+
}
|
|
104
|
+
}, 120000);
|
|
105
|
+
});
|
|
106
|
+
describe('Opportunity Detection', () => {
|
|
107
|
+
it('should start monitoring and receive orderbook updates', async () => {
|
|
108
|
+
service = new ArbitrageService({ enableLogging: false });
|
|
109
|
+
// Start monitoring
|
|
110
|
+
await service.start(testMarket);
|
|
111
|
+
// Wait for orderbook updates with timeout fallback
|
|
112
|
+
const orderbookPromise = new Promise((resolve) => {
|
|
113
|
+
const timeout = setTimeout(() => resolve(false), 45000);
|
|
114
|
+
service.on('orderbookUpdate', () => {
|
|
115
|
+
clearTimeout(timeout);
|
|
116
|
+
resolve(true);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
const received = await orderbookPromise;
|
|
120
|
+
if (received) {
|
|
121
|
+
// Verify orderbook state
|
|
122
|
+
const orderbook = service.getOrderbook();
|
|
123
|
+
expect(orderbook.lastUpdate).toBeGreaterThan(0);
|
|
124
|
+
expect(Array.isArray(orderbook.yesBids)).toBe(true);
|
|
125
|
+
expect(Array.isArray(orderbook.yesAsks)).toBe(true);
|
|
126
|
+
expect(Array.isArray(orderbook.noBids)).toBe(true);
|
|
127
|
+
expect(Array.isArray(orderbook.noAsks)).toBe(true);
|
|
128
|
+
console.log(`✓ Received orderbook updates`);
|
|
129
|
+
console.log(` YES: ${orderbook.yesBids.length} bids, ${orderbook.yesAsks.length} asks`);
|
|
130
|
+
console.log(` NO: ${orderbook.noBids.length} bids, ${orderbook.noAsks.length} asks`);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(`✓ ArbitrageService started (no WebSocket data within timeout - may need market activity)`);
|
|
134
|
+
}
|
|
135
|
+
}, 60000);
|
|
136
|
+
it('should check for arbitrage opportunities', async () => {
|
|
137
|
+
service = new ArbitrageService({
|
|
138
|
+
enableLogging: false,
|
|
139
|
+
profitThreshold: 0.001, // Very low threshold to detect opportunities
|
|
140
|
+
});
|
|
141
|
+
// Start monitoring
|
|
142
|
+
await service.start(testMarket);
|
|
143
|
+
// Wait for orderbook to be populated with timeout fallback
|
|
144
|
+
const orderbookPromise = new Promise((resolve) => {
|
|
145
|
+
const timeout = setTimeout(() => resolve(false), 45000);
|
|
146
|
+
service.on('orderbookUpdate', (orderbook) => {
|
|
147
|
+
// Wait until we have data on both sides
|
|
148
|
+
if (orderbook.yesBids.length > 0 && orderbook.yesAsks.length > 0 &&
|
|
149
|
+
orderbook.noBids.length > 0 && orderbook.noAsks.length > 0) {
|
|
150
|
+
clearTimeout(timeout);
|
|
151
|
+
resolve(true);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
const received = await orderbookPromise;
|
|
156
|
+
if (received) {
|
|
157
|
+
// Check for opportunity
|
|
158
|
+
const opportunity = service.checkOpportunity();
|
|
159
|
+
if (opportunity) {
|
|
160
|
+
expect(['long', 'short']).toContain(opportunity.type);
|
|
161
|
+
expect(typeof opportunity.profitRate).toBe('number');
|
|
162
|
+
expect(typeof opportunity.profitPercent).toBe('number');
|
|
163
|
+
expect(typeof opportunity.recommendedSize).toBe('number');
|
|
164
|
+
expect(typeof opportunity.estimatedProfit).toBe('number');
|
|
165
|
+
expect(typeof opportunity.description).toBe('string');
|
|
166
|
+
console.log(`✓ Found ${opportunity.type} opportunity`);
|
|
167
|
+
console.log(` Profit: ${opportunity.profitPercent.toFixed(3)}%`);
|
|
168
|
+
console.log(` Size: ${opportunity.recommendedSize.toFixed(2)}`);
|
|
169
|
+
console.log(` Est. Profit: $${opportunity.estimatedProfit.toFixed(2)}`);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.log(`✓ No arbitrage opportunity at current prices (normal for most markets)`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
console.log(`✓ checkOpportunity available (no WebSocket data - requires market activity)`);
|
|
177
|
+
}
|
|
178
|
+
}, 60000);
|
|
179
|
+
it('should emit opportunity events', async () => {
|
|
180
|
+
service = new ArbitrageService({
|
|
181
|
+
enableLogging: false,
|
|
182
|
+
profitThreshold: 0, // Zero threshold to catch any opportunity
|
|
183
|
+
});
|
|
184
|
+
// Start monitoring
|
|
185
|
+
await service.start(testMarket);
|
|
186
|
+
// Wait for either an opportunity event or a timeout
|
|
187
|
+
const result = await Promise.race([
|
|
188
|
+
new Promise((resolve) => {
|
|
189
|
+
service.on('opportunity', () => resolve('opportunity'));
|
|
190
|
+
}),
|
|
191
|
+
new Promise((resolve) => {
|
|
192
|
+
setTimeout(() => resolve('timeout'), 30000);
|
|
193
|
+
}),
|
|
194
|
+
]);
|
|
195
|
+
if (result === 'opportunity') {
|
|
196
|
+
console.log(`✓ Received opportunity event`);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.log(`✓ No opportunity event (prices are fair - no arbitrage, or no data received)`);
|
|
200
|
+
}
|
|
201
|
+
// Stats should be tracked
|
|
202
|
+
const stats = service.getStats();
|
|
203
|
+
expect(typeof stats.opportunitiesDetected).toBe('number');
|
|
204
|
+
expect(typeof stats.executionsAttempted).toBe('number');
|
|
205
|
+
expect(typeof stats.executionsSucceeded).toBe('number');
|
|
206
|
+
expect(typeof stats.totalProfit).toBe('number');
|
|
207
|
+
expect(typeof stats.runningTimeMs).toBe('number');
|
|
208
|
+
console.log(` Opportunities detected: ${stats.opportunitiesDetected}`);
|
|
209
|
+
}, 60000);
|
|
210
|
+
});
|
|
211
|
+
describe('Service State', () => {
|
|
212
|
+
it('should track statistics', async () => {
|
|
213
|
+
service = new ArbitrageService({ enableLogging: false });
|
|
214
|
+
const stats = service.getStats();
|
|
215
|
+
expect(typeof stats.opportunitiesDetected).toBe('number');
|
|
216
|
+
expect(stats.opportunitiesDetected).toBe(0);
|
|
217
|
+
expect(typeof stats.executionsAttempted).toBe('number');
|
|
218
|
+
expect(stats.executionsAttempted).toBe(0);
|
|
219
|
+
expect(typeof stats.executionsSucceeded).toBe('number');
|
|
220
|
+
expect(stats.executionsSucceeded).toBe(0);
|
|
221
|
+
expect(typeof stats.totalProfit).toBe('number');
|
|
222
|
+
expect(stats.totalProfit).toBe(0);
|
|
223
|
+
console.log(`✓ Statistics tracking works`);
|
|
224
|
+
});
|
|
225
|
+
it('should start and stop cleanly', async () => {
|
|
226
|
+
service = new ArbitrageService({ enableLogging: false });
|
|
227
|
+
// Track events
|
|
228
|
+
let startedEmitted = false;
|
|
229
|
+
let stoppedEmitted = false;
|
|
230
|
+
service.on('started', () => { startedEmitted = true; });
|
|
231
|
+
service.on('stopped', () => { stoppedEmitted = true; });
|
|
232
|
+
// Start
|
|
233
|
+
await service.start(testMarket);
|
|
234
|
+
expect(startedEmitted).toBe(true);
|
|
235
|
+
// Stop
|
|
236
|
+
await service.stop();
|
|
237
|
+
expect(stoppedEmitted).toBe(true);
|
|
238
|
+
console.log(`✓ Start/stop lifecycle works correctly`);
|
|
239
|
+
}, 30000);
|
|
240
|
+
it('should prevent double-start', async () => {
|
|
241
|
+
service = new ArbitrageService({ enableLogging: false });
|
|
242
|
+
await service.start(testMarket);
|
|
243
|
+
// Second start should throw
|
|
244
|
+
await expect(service.start(testMarket)).rejects.toThrow('already running');
|
|
245
|
+
console.log(`✓ Double-start prevention works`);
|
|
246
|
+
}, 30000);
|
|
247
|
+
});
|
|
248
|
+
describe('Rebalancer Configuration', () => {
|
|
249
|
+
it('should calculate rebalance actions (without wallet)', () => {
|
|
250
|
+
service = new ArbitrageService({
|
|
251
|
+
enableLogging: false,
|
|
252
|
+
enableRebalancer: true,
|
|
253
|
+
minUsdcRatio: 0.2,
|
|
254
|
+
maxUsdcRatio: 0.8,
|
|
255
|
+
targetUsdcRatio: 0.5,
|
|
256
|
+
});
|
|
257
|
+
// Without a market started, should return 'none'
|
|
258
|
+
const action = service.calculateRebalanceAction();
|
|
259
|
+
expect(action.type).toBe('none');
|
|
260
|
+
expect(typeof action.amount).toBe('number');
|
|
261
|
+
expect(typeof action.reason).toBe('string');
|
|
262
|
+
expect(typeof action.priority).toBe('number');
|
|
263
|
+
console.log(`✓ Rebalance action calculation works`);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
//# sourceMappingURL=arbitrage-service.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbitrage-service.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/arbitrage-service.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,7 +55,10 @@ describe('DataApiClient Integration', () => {
|
|
|
55
55
|
if (trades.length > 0) {
|
|
56
56
|
// Verify trade structure
|
|
57
57
|
for (const trade of trades) {
|
|
58
|
-
|
|
58
|
+
// id may not be present in all API responses
|
|
59
|
+
if (trade.id !== undefined) {
|
|
60
|
+
expect(typeof trade.id).toBe('string');
|
|
61
|
+
}
|
|
59
62
|
expect(['BUY', 'SELL']).toContain(trade.side);
|
|
60
63
|
expect(typeof trade.price).toBe('number');
|
|
61
64
|
expect(trade.price).toBeGreaterThanOrEqual(0);
|
|
@@ -139,8 +142,8 @@ describe('DataApiClient Integration', () => {
|
|
|
139
142
|
if (activity.length > 0) {
|
|
140
143
|
// Verify activity structure
|
|
141
144
|
for (const act of activity) {
|
|
142
|
-
// Polymarket has various activity types
|
|
143
|
-
expect(['TRADE', 'SPLIT', 'MERGE', 'REDEEM', 'CONVERSION', 'YIELD']).toContain(act.type);
|
|
145
|
+
// Polymarket has various activity types
|
|
146
|
+
expect(['TRADE', 'SPLIT', 'MERGE', 'REDEEM', 'CONVERSION', 'YIELD', 'REWARD']).toContain(act.type);
|
|
144
147
|
// Side might be null for non-trade activities
|
|
145
148
|
if (act.type === 'TRADE') {
|
|
146
149
|
expect(['BUY', 'SELL']).toContain(act.side);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-api.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/data-api.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,MAAqB,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,WAAW,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YAE/D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAE3D,yBAAyB;YACzB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAChD,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxC,MAAM,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAC;YAED,4BAA4B;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvF,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC9H,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAEnE,6BAA6B;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC7C,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YACjD,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,yBAAyB;gBACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"data-api.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/data-api.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MarketService Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the MarketService for market data operations.
|
|
5
|
+
* These tests make REAL API calls to Polymarket.
|
|
6
|
+
*
|
|
7
|
+
* Run with: pnpm test:integration
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=market-service.integration.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market-service.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/market-service.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MarketService Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the MarketService for market data operations.
|
|
5
|
+
* These tests make REAL API calls to Polymarket.
|
|
6
|
+
*
|
|
7
|
+
* Run with: pnpm test:integration
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect, beforeAll } from 'vitest';
|
|
10
|
+
import { MarketService } from '../../services/market-service.js';
|
|
11
|
+
import { RateLimiter } from '../../core/rate-limiter.js';
|
|
12
|
+
import { createUnifiedCache } from '../../core/unified-cache.js';
|
|
13
|
+
describe('MarketService Integration', () => {
|
|
14
|
+
let service;
|
|
15
|
+
let testConditionId;
|
|
16
|
+
let testYesTokenId;
|
|
17
|
+
let testNoTokenId;
|
|
18
|
+
beforeAll(async () => {
|
|
19
|
+
// Create MarketService without gammaApi/dataApi (CLOB-only mode)
|
|
20
|
+
service = new MarketService(undefined, // gammaApi not needed for CLOB tests
|
|
21
|
+
undefined, // dataApi not needed for CLOB tests
|
|
22
|
+
new RateLimiter(), createUnifiedCache());
|
|
23
|
+
// Find a liquid market for testing
|
|
24
|
+
const response = await fetch('https://gamma-api.polymarket.com/markets?active=true&limit=1&order=volume24hr&ascending=false');
|
|
25
|
+
const markets = (await response.json());
|
|
26
|
+
if (markets.length === 0) {
|
|
27
|
+
throw new Error('No active markets found for testing');
|
|
28
|
+
}
|
|
29
|
+
testConditionId = markets[0].conditionId;
|
|
30
|
+
console.log(`Using test market: "${markets[0].question.slice(0, 50)}..."`);
|
|
31
|
+
// Get token IDs
|
|
32
|
+
const market = await service.getClobMarket(testConditionId);
|
|
33
|
+
const yesToken = market.tokens.find((t) => t.outcome === 'Yes');
|
|
34
|
+
const noToken = market.tokens.find((t) => t.outcome === 'No');
|
|
35
|
+
if (!yesToken || !noToken) {
|
|
36
|
+
throw new Error('Market does not have YES/NO tokens');
|
|
37
|
+
}
|
|
38
|
+
testYesTokenId = yesToken.tokenId;
|
|
39
|
+
testNoTokenId = noToken.tokenId;
|
|
40
|
+
}, 60000);
|
|
41
|
+
describe('getClobMarket', () => {
|
|
42
|
+
it('should return valid market data from official client', async () => {
|
|
43
|
+
const market = await service.getClobMarket(testConditionId);
|
|
44
|
+
expect(market.conditionId).toBe(testConditionId);
|
|
45
|
+
expect(typeof market.question).toBe('string');
|
|
46
|
+
expect(market.question.length).toBeGreaterThan(0);
|
|
47
|
+
expect(Array.isArray(market.tokens)).toBe(true);
|
|
48
|
+
expect(market.tokens.length).toBeGreaterThanOrEqual(2);
|
|
49
|
+
// Verify tokens
|
|
50
|
+
const yesToken = market.tokens.find((t) => t.outcome === 'Yes');
|
|
51
|
+
const noToken = market.tokens.find((t) => t.outcome === 'No');
|
|
52
|
+
expect(yesToken).toBeDefined();
|
|
53
|
+
expect(noToken).toBeDefined();
|
|
54
|
+
console.log(`✓ getClobMarket: "${market.question.slice(0, 40)}..."`);
|
|
55
|
+
}, 30000);
|
|
56
|
+
});
|
|
57
|
+
describe('getTokenOrderbook', () => {
|
|
58
|
+
it('should return sorted orderbook', async () => {
|
|
59
|
+
const book = await service.getTokenOrderbook(testYesTokenId);
|
|
60
|
+
expect(Array.isArray(book.bids)).toBe(true);
|
|
61
|
+
expect(Array.isArray(book.asks)).toBe(true);
|
|
62
|
+
expect(typeof book.timestamp).toBe('number');
|
|
63
|
+
// Bids should be sorted descending
|
|
64
|
+
for (let i = 1; i < book.bids.length; i++) {
|
|
65
|
+
expect(book.bids[i].price).toBeLessThanOrEqual(book.bids[i - 1].price);
|
|
66
|
+
}
|
|
67
|
+
// Asks should be sorted ascending
|
|
68
|
+
for (let i = 1; i < book.asks.length; i++) {
|
|
69
|
+
expect(book.asks[i].price).toBeGreaterThanOrEqual(book.asks[i - 1].price);
|
|
70
|
+
}
|
|
71
|
+
console.log(`✓ getTokenOrderbook: ${book.bids.length} bids, ${book.asks.length} asks`);
|
|
72
|
+
}, 30000);
|
|
73
|
+
});
|
|
74
|
+
describe('getProcessedOrderbook', () => {
|
|
75
|
+
it('should return processed orderbook with analytics', async () => {
|
|
76
|
+
const processed = await service.getProcessedOrderbook(testConditionId);
|
|
77
|
+
// Verify YES/NO book data
|
|
78
|
+
expect(typeof processed.yes.bid).toBe('number');
|
|
79
|
+
expect(typeof processed.yes.ask).toBe('number');
|
|
80
|
+
expect(typeof processed.no.bid).toBe('number');
|
|
81
|
+
expect(typeof processed.no.ask).toBe('number');
|
|
82
|
+
// Verify summary
|
|
83
|
+
expect(typeof processed.summary.effectiveLongCost).toBe('number');
|
|
84
|
+
expect(typeof processed.summary.effectiveShortRevenue).toBe('number');
|
|
85
|
+
expect(typeof processed.summary.longArbProfit).toBe('number');
|
|
86
|
+
expect(typeof processed.summary.shortArbProfit).toBe('number');
|
|
87
|
+
console.log(`✓ getProcessedOrderbook:`);
|
|
88
|
+
console.log(` YES: bid=${processed.yes.bid.toFixed(3)}, ask=${processed.yes.ask.toFixed(3)}`);
|
|
89
|
+
console.log(` NO: bid=${processed.no.bid.toFixed(3)}, ask=${processed.no.ask.toFixed(3)}`);
|
|
90
|
+
}, 30000);
|
|
91
|
+
});
|
|
92
|
+
describe('getMidpoint', () => {
|
|
93
|
+
it('should return midpoint price or handle no orderbook', async () => {
|
|
94
|
+
try {
|
|
95
|
+
const midpoint = await service.getMidpoint(testYesTokenId);
|
|
96
|
+
expect(typeof midpoint).toBe('number');
|
|
97
|
+
// Midpoint can be NaN if no orderbook exists
|
|
98
|
+
if (!isNaN(midpoint)) {
|
|
99
|
+
expect(midpoint).toBeGreaterThanOrEqual(0);
|
|
100
|
+
expect(midpoint).toBeLessThanOrEqual(1);
|
|
101
|
+
console.log(`✓ getMidpoint: ${midpoint.toFixed(4)}`);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.log(`✓ getMidpoint: NaN (no orderbook exists - expected for some tokens)`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// API may return error if no orderbook exists
|
|
109
|
+
console.log(`✓ getMidpoint: API error (no orderbook - expected for some tokens)`);
|
|
110
|
+
}
|
|
111
|
+
}, 30000);
|
|
112
|
+
});
|
|
113
|
+
describe('getSpread', () => {
|
|
114
|
+
it('should return spread or handle no orderbook', async () => {
|
|
115
|
+
try {
|
|
116
|
+
const spread = await service.getSpread(testYesTokenId);
|
|
117
|
+
expect(typeof spread).toBe('number');
|
|
118
|
+
// Spread can be NaN if no orderbook exists
|
|
119
|
+
if (!isNaN(spread)) {
|
|
120
|
+
expect(spread).toBeGreaterThanOrEqual(0);
|
|
121
|
+
console.log(`✓ getSpread: ${spread.toFixed(4)}`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.log(`✓ getSpread: NaN (no orderbook exists - expected for some tokens)`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// API may return error if no orderbook exists
|
|
129
|
+
console.log(`✓ getSpread: API error (no orderbook - expected for some tokens)`);
|
|
130
|
+
}
|
|
131
|
+
}, 30000);
|
|
132
|
+
});
|
|
133
|
+
describe('getPricesHistory', () => {
|
|
134
|
+
it('should return price history array', async () => {
|
|
135
|
+
try {
|
|
136
|
+
const history = await service.getPricesHistory({
|
|
137
|
+
tokenId: testYesTokenId,
|
|
138
|
+
interval: '1d',
|
|
139
|
+
});
|
|
140
|
+
expect(Array.isArray(history)).toBe(true);
|
|
141
|
+
if (history.length > 0) {
|
|
142
|
+
for (const point of history) {
|
|
143
|
+
expect(typeof point.timestamp).toBe('number');
|
|
144
|
+
expect(typeof point.price).toBe('number');
|
|
145
|
+
expect(point.price).toBeGreaterThanOrEqual(0);
|
|
146
|
+
expect(point.price).toBeLessThanOrEqual(1);
|
|
147
|
+
}
|
|
148
|
+
console.log(`✓ getPricesHistory: ${history.length} data points`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
console.log(`✓ getPricesHistory: empty (no history available for this token)`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// API may return error for some tokens
|
|
156
|
+
console.log(`✓ getPricesHistory: API error (no history - expected for some tokens)`);
|
|
157
|
+
}
|
|
158
|
+
}, 30000);
|
|
159
|
+
});
|
|
160
|
+
describe('getClobMarkets', () => {
|
|
161
|
+
it('should return paginated markets list', async () => {
|
|
162
|
+
const result = await service.getClobMarkets();
|
|
163
|
+
expect(Array.isArray(result.markets)).toBe(true);
|
|
164
|
+
expect(result.markets.length).toBeGreaterThan(0);
|
|
165
|
+
expect(typeof result.nextCursor).toBe('string');
|
|
166
|
+
const market = result.markets[0];
|
|
167
|
+
expect(typeof market.conditionId).toBe('string');
|
|
168
|
+
expect(typeof market.question).toBe('string');
|
|
169
|
+
console.log(`✓ getClobMarkets: ${result.markets.length} markets returned`);
|
|
170
|
+
}, 30000);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=market-service.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market-service.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/market-service.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RealtimeServiceV2 Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the new RealtimeServiceV2 that uses @polymarket/real-time-data-client.
|
|
5
|
+
* These tests make REAL WebSocket connections to Polymarket.
|
|
6
|
+
*
|
|
7
|
+
* Run with: pnpm test:integration
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=realtime-service-v2.integration.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-service-v2.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/realtime-service-v2.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|