UNPKG

tardis-dev

Version:

Convenient access to tick-level historical and real-time cryptocurrency market data via Node.js

58 lines 1.97 kB
import { wait } from "../handy.js"; import { RealTimeFeedBase } from "./realtimefeed.js"; export class WooxRealTimeFeed extends RealTimeFeedBase { wssURL = 'wss://wss.woo.org/ws/stream/OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY'; mapToSubscribeMessages(filters) { return filters .filter((filter) => filter.channel !== 'orderbook') .map((filter) => { if (!filter.symbols || filter.symbols.length === 0) { throw new Error('WooxRealTimeFeed requires explicitly specified symbols when subscribing to live feed'); } return filter.symbols.map((symbol) => { return { id: `${symbol}@${filter.channel}`, topic: `${symbol}@${filter.channel}`, event: 'subscribe' }; }); }) .flatMap((f) => f); } async provideManualSnapshots(filters, shouldCancel) { const orderbookFilter = filters.find((f) => f.channel === 'orderbook'); if (!orderbookFilter) { return; } await wait(200); for (let symbol of orderbookFilter.symbols) { if (shouldCancel()) { return; } this.send({ id: `${symbol}@orderbook`, event: 'request', params: { type: 'orderbook', symbol } }); await wait(1); } this.debug('sent orderbook requests for: %s', orderbookFilter.symbols); } messageIsError(message) { return message.success === false || message.errorMsg !== undefined; } messageIsHeartbeat(message) { return message.event === 'ping'; } onMessage(msg) { if (msg.event === 'ping') { this.send({ event: 'ping' }); } } } //# sourceMappingURL=woox.js.map