UNPKG

tardis-dev

Version:

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

189 lines 6.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DeltaBookTickerMapper = exports.DeltaDerivativeTickerMapper = exports.DeltaBookChangeMapper = exports.DeltaTradesMapper = void 0; const handy_1 = require("../handy"); const mapper_1 = require("./mapper"); class DeltaTradesMapper { constructor(_useV2Channels) { this._useV2Channels = _useV2Channels; } canHandle(message) { return message.type === (this._useV2Channels ? 'all_trades' : 'recent_trade'); } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: this._useV2Channels ? 'all_trades' : 'recent_trade', symbols } ]; } *map(message, localTimestamp) { yield { type: 'trade', symbol: message.symbol, exchange: 'delta', id: undefined, price: Number(message.price), amount: Number(message.size), side: message.buyer_role === 'taker' ? 'buy' : 'sell', timestamp: (0, handy_1.fromMicroSecondsToDate)(message.timestamp), localTimestamp: localTimestamp }; } } exports.DeltaTradesMapper = DeltaTradesMapper; const mapBookLevel = (level) => { return { price: Number(level.limit_price), amount: Number(level.size) }; }; const mapL2Level = (level) => { return { price: Number(level[0]), amount: Number(level[1]) }; }; class DeltaBookChangeMapper { constructor(_useL2UpdatesChannel) { this._useL2UpdatesChannel = _useL2UpdatesChannel; } canHandle(message) { if (this._useL2UpdatesChannel) { return message.type === 'l2_updates'; } return message.type === 'l2_orderbook'; } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); if (this._useL2UpdatesChannel) { return [ { channel: 'l2_updates', symbols } ]; } return [ { channel: 'l2_orderbook', symbols } ]; } *map(message, localTimestamp) { if (message.type === 'l2_updates') { yield { type: 'book_change', symbol: message.symbol, exchange: 'delta', isSnapshot: message.action === 'snapshot', bids: message.bids !== undefined ? message.bids.map(mapL2Level) : [], asks: message.asks !== undefined ? message.asks.map(mapL2Level) : [], timestamp: message.timestamp !== undefined ? (0, handy_1.fromMicroSecondsToDate)(message.timestamp) : localTimestamp, localTimestamp }; } else { if (message.buy === undefined && message.sell === undefined) { return; } yield { type: 'book_change', symbol: message.symbol, exchange: 'delta', isSnapshot: true, bids: message.buy !== undefined ? message.buy.map(mapBookLevel) : [], asks: message.sell !== undefined ? message.sell.map(mapBookLevel) : [], timestamp: message.timestamp !== undefined ? (0, handy_1.fromMicroSecondsToDate)(message.timestamp) : localTimestamp, localTimestamp }; } } } exports.DeltaBookChangeMapper = DeltaBookChangeMapper; class DeltaDerivativeTickerMapper { constructor(_useV2Channels) { this._useV2Channels = _useV2Channels; this.pendingTickerInfoHelper = new mapper_1.PendingTickerInfoHelper(); } canHandle(message) { return (message.type === (this._useV2Channels ? 'all_trades' : 'recent_trade') || message.type === 'funding_rate' || message.type === 'mark_price'); } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: this._useV2Channels ? 'all_trades' : 'recent_trade', symbols }, { channel: 'funding_rate', symbols }, { channel: 'mark_price', symbols } ]; } *map(message, localTimestamp) { const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(message.symbol.replace('MARK:', ''), 'delta'); if (message.type === 'recent_trade' || message.type === 'all_trades') { pendingTickerInfo.updateLastPrice(Number(message.price)); } if (message.type === 'mark_price') { pendingTickerInfo.updateMarkPrice(Number(message.price)); } if (message.type === 'funding_rate') { if (message.funding_rate !== undefined) { pendingTickerInfo.updateFundingRate(Number(message.funding_rate)); } if (message.predicted_funding_rate !== undefined) { pendingTickerInfo.updatePredictedFundingRate(Number(message.predicted_funding_rate)); } if (message.next_funding_realization !== undefined) { pendingTickerInfo.updateFundingTimestamp((0, handy_1.fromMicroSecondsToDate)(message.next_funding_realization)); } } pendingTickerInfo.updateTimestamp((0, handy_1.fromMicroSecondsToDate)(message.timestamp)); if (pendingTickerInfo.hasChanged()) { yield pendingTickerInfo.getSnapshot(localTimestamp); } } } exports.DeltaDerivativeTickerMapper = DeltaDerivativeTickerMapper; class DeltaBookTickerMapper { canHandle(message) { return message.type === 'l1_orderbook'; } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: 'l1_orderbook', symbols } ]; } *map(message, localTimestamp) { const ticker = { type: 'book_ticker', symbol: message.symbol, exchange: 'delta', askAmount: message.ask_qty !== undefined ? Number(message.ask_qty) : undefined, askPrice: message.best_ask !== undefined ? Number(message.best_ask) : undefined, bidPrice: message.best_bid !== undefined ? Number(message.best_bid) : undefined, bidAmount: message.bid_qty !== undefined ? Number(message.bid_qty) : undefined, timestamp: message.timestamp !== undefined ? (0, handy_1.fromMicroSecondsToDate)(message.timestamp) : localTimestamp, localTimestamp: localTimestamp }; yield ticker; } } exports.DeltaBookTickerMapper = DeltaBookTickerMapper; //# sourceMappingURL=delta.js.map