← Back
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'));