UNPKG

tardis-dev

Version:

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

109 lines 3.21 kB
import { asNonZeroNumberOrUndefined, upperCaseSymbols } from "../handy.js"; export class SerumTradesMapper { _exchange; constructor(_exchange) { this._exchange = _exchange; } canHandle(message) { return message.type === 'trade'; } getFilters(symbols) { if (this._exchange === 'serum') { symbols = upperCaseSymbols(symbols); } return [ { channel: 'trade', symbols } ]; } *map(message, localTimestamp) { yield { type: 'trade', symbol: message.market.toUpperCase(), exchange: this._exchange, id: message.id, price: Number(message.price), amount: Number(message.size), side: message.side, timestamp: message.eventTimestamp !== undefined ? new Date(message.eventTimestamp) : new Date(message.timestamp), localTimestamp }; } } export class SerumBookChangeMapper { _exchange; constructor(_exchange) { this._exchange = _exchange; } canHandle(message) { return message.type === 'l2snapshot' || message.type === 'l2update'; } getFilters(symbols) { if (this._exchange === 'serum') { symbols = upperCaseSymbols(symbols); } return [ { channel: 'l2snapshot', symbols }, { channel: 'l2update', symbols } ]; } *map(message, localTimestamp) { yield { type: 'book_change', symbol: message.market.toUpperCase(), exchange: this._exchange, isSnapshot: message.type === 'l2snapshot', bids: message.bids.map(this.mapBookLevel), asks: message.asks.map(this.mapBookLevel), timestamp: new Date(message.timestamp), localTimestamp }; } mapBookLevel(level) { const price = Number(level[0]); const amount = Number(level[1]); return { price, amount }; } } export class SerumBookTickerMapper { _exchange; constructor(_exchange) { this._exchange = _exchange; } canHandle(message) { return message.type === 'quote'; } getFilters(symbols) { if (this._exchange === 'serum') { symbols = upperCaseSymbols(symbols); } return [ { channel: 'quote', symbols } ]; } *map(message, localTimestamp) { yield { type: 'book_ticker', symbol: message.market.toUpperCase(), exchange: this._exchange, askAmount: asNonZeroNumberOrUndefined(message.bestAsk?.[1]), askPrice: asNonZeroNumberOrUndefined(message.bestAsk?.[0]), bidPrice: asNonZeroNumberOrUndefined(message.bestBid?.[0]), bidAmount: asNonZeroNumberOrUndefined(message.bestBid?.[1]), timestamp: new Date(message.timestamp), localTimestamp: localTimestamp }; } } //# sourceMappingURL=serum.js.map