import WebSocket from 'ws';
const ws = new WebSocket('wss://ws-live-data.polymarket.com');
let n = 0;
const t = setTimeout(() => { console.log('timeout, got', n, 'trade msgs'); ws.close(); process.exit(0); }, 20000);
ws.on('open', () => {
console.log('connected');
ws.send(JSON.stringify({ action: 'subscribe', subscriptions: [{ topic: 'activity', type: 'trades' }] }));
setInterval(() => { try { ws.send('PING'); } catch {} }, 5000);
});
ws.on('message', (d) => {
const s = d.toString();
if (s === 'PONG' || !s.startsWith('{') && !s.startsWith('[')) return;
let msg; try { msg = JSON.parse(s); } catch { return; }
const arr = Array.isArray(msg) ? msg : [msg];
for (const m of arr) {
const p = m.payload || m;
if (p && p.proxyWallet && p.asset) {
if (n < 3) console.log(`TRADE: ${p.side} ${p.size} "${p.outcome}" @ ${p.price} by ${String(p.proxyWallet).slice(0,10)} | ${String(p.title).slice(0,35)}`);
n++;
if (n === 3) { console.log('… stream working, fields present ✓'); }
} else if (n === 0) { console.log('non-trade msg sample:', s.slice(0,160)); }
}
});
ws.on('error', (e) => { console.log('ws error:', e.message); clearTimeout(t); process.exit(1); });
ws.on('close', () => console.log('closed'));