UNPKG

tardis-dev

Version:

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

84 lines 2.52 kB
import { parseμs, upperCaseSymbols } from "../handy.js"; export const bitnomialTradesMapper = { canHandle(message) { return message.type === 'trade'; }, getFilters(symbols) { symbols = upperCaseSymbols(symbols); return [ { channel: 'trade', symbols } ]; }, *map(message, localTimestamp) { const timestamp = new Date(message.timestamp); timestamp.μs = parseμs(message.timestamp); yield { type: 'trade', symbol: message.symbol, exchange: 'bitnomial', id: String(message.ack_id), price: Number(message.price), amount: Number(message.quantity), side: message.taker_side === 'Bid' ? 'buy' : 'sell', timestamp, localTimestamp: localTimestamp }; } }; const mapBookLevel = (level) => { return { price: level[0], amount: level[1] }; }; export class BitnomialBookChangMapper { canHandle(message) { return message.type === 'book' || message.type === 'level'; } getFilters(symbols) { symbols = upperCaseSymbols(symbols); return [ { channel: 'book', symbols }, { channel: 'level', symbols } ]; } *map(message, localTimestamp) { const timestamp = new Date(message.timestamp); timestamp.μs = parseμs(message.timestamp); if (message.type === 'book') { yield { type: 'book_change', symbol: message.symbol, exchange: 'bitnomial', isSnapshot: true, bids: message.bids.map(mapBookLevel), asks: message.asks.map(mapBookLevel), timestamp, localTimestamp }; } else { const update = { price: message.price, amount: message.quantity }; yield { type: 'book_change', symbol: message.symbol, exchange: 'bitnomial', isSnapshot: false, bids: message.side === 'Bid' ? [update] : [], asks: message.side === 'Ask' ? [update] : [], timestamp, localTimestamp: localTimestamp }; } } } //# sourceMappingURL=bitnomial.js.map