mirror of
https://github.com/multipleof4/KalBot.git
synced 2026-03-16 21:41:02 +00:00
Fix: empty markets fallback + rotation fix
This commit is contained in:
@@ -2,6 +2,8 @@ import { getActiveBTCEvent, getEventMarkets, getOrderbook, getMarket } from '../
|
||||
import { KalshiWS } from '../kalshi/websocket.js';
|
||||
import { EventEmitter } from 'events';
|
||||
|
||||
const OPEN_MARKET_STATUSES = new Set(['open', 'active', 'initialized', 'trading']);
|
||||
|
||||
/**
|
||||
* Tracks the currently active BTC 15-min market.
|
||||
* Auto-rotates when the current market expires.
|
||||
@@ -80,28 +82,41 @@ export class MarketTracker extends EventEmitter {
|
||||
async _findAndSubscribe() {
|
||||
try {
|
||||
const event = await getActiveBTCEvent();
|
||||
|
||||
if (!event) {
|
||||
if (!this.currentTicker) this.emit('update', null);
|
||||
console.log('[Tracker] No active BTC 15m event found. Retrying in 30s...');
|
||||
return;
|
||||
}
|
||||
|
||||
const markets = event.markets || await getEventMarkets(event.event_ticker);
|
||||
// Find the up/down market (usually only one market per event)
|
||||
const market = markets.find(m => m.status === 'active' || m.status === 'open') || markets[0];
|
||||
const inlineMarkets = Array.isArray(event.markets) ? event.markets : [];
|
||||
const markets = inlineMarkets.length ? inlineMarkets : await getEventMarkets(event.event_ticker);
|
||||
|
||||
const market = markets.find((m) => OPEN_MARKET_STATUSES.has(String(m?.status || '').toLowerCase())) || markets[0];
|
||||
|
||||
if (!market) {
|
||||
console.log('[Tracker] No active market in event. Retrying...');
|
||||
if (!this.currentTicker) {
|
||||
this.currentEvent = event.event_ticker || null;
|
||||
this.marketData = null;
|
||||
this.orderbook = { yes: [], no: [] };
|
||||
this.emit('update', null);
|
||||
}
|
||||
console.log(`[Tracker] Event ${event.event_ticker} has no active market yet. Retrying...`);
|
||||
return;
|
||||
}
|
||||
|
||||
const newTicker = market.ticker;
|
||||
if (newTicker === this.currentTicker) {
|
||||
this.currentEvent = event.event_ticker;
|
||||
return;
|
||||
}
|
||||
|
||||
if (newTicker === this.currentTicker) return;
|
||||
const oldTicker = this.currentTicker;
|
||||
|
||||
// Unsubscribe from old
|
||||
if (this.currentTicker) {
|
||||
console.log(`[Tracker] Rotating from ${this.currentTicker} → ${newTicker}`);
|
||||
this.ws.unsubscribeTicker(this.currentTicker);
|
||||
if (oldTicker) {
|
||||
console.log(`[Tracker] Rotating from ${oldTicker} → ${newTicker}`);
|
||||
this.ws.unsubscribeTicker(oldTicker);
|
||||
}
|
||||
|
||||
this.currentTicker = newTicker;
|
||||
@@ -122,8 +137,7 @@ export class MarketTracker extends EventEmitter {
|
||||
console.log(`[Tracker] Now tracking: ${newTicker} (${market.title || market.subtitle})`);
|
||||
|
||||
this.emit('update', this.getState());
|
||||
this.emit('market-rotated', { from: this.currentTicker, to: newTicker });
|
||||
|
||||
this.emit('market-rotated', { from: oldTicker, to: newTicker });
|
||||
} catch (err) {
|
||||
console.error('[Tracker] Discovery error:', err.message);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user