UNPKG

tardis-dev

Version:

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

122 lines 4.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OkexSpreadsBookTickerMapper = exports.OkexSpreadsBookChangeMapper = exports.OkexSpreadsTradesMapper = void 0; const handy_1 = require("../handy"); class OkexSpreadsTradesMapper { canHandle(message) { if (message.event !== undefined || message.arg === undefined) { return false; } return message.arg.channel === 'sprd-public-trades'; } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: `sprd-public-trades`, symbols } ]; } *map(okexTradesMessage, localTimestamp) { for (const okexTrade of okexTradesMessage.data) { yield { type: 'trade', symbol: okexTrade.sprdId, exchange: 'okex-spreads', id: okexTrade.tradeId, price: Number(okexTrade.px), amount: Number(okexTrade.sz), side: okexTrade.side === 'buy' ? 'buy' : 'sell', timestamp: new Date(Number(okexTrade.ts)), localTimestamp: localTimestamp }; } } } exports.OkexSpreadsTradesMapper = OkexSpreadsTradesMapper; const mapBookLevel = (level) => { const price = Number(level[0]); const amount = Number(level[1]); return { price, amount }; }; class OkexSpreadsBookChangeMapper { canHandle(message) { if (message.event !== undefined || message.arg === undefined) { return false; } return message.arg.channel === 'sprd-books5'; } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: 'sprd-books5', symbols } ]; } *map(okexDepthDataMessage, localTimestamp) { for (const message of okexDepthDataMessage.data) { const timestamp = new Date(Number(message.ts)); if (timestamp.valueOf() === 0) { continue; } yield { type: 'book_change', symbol: okexDepthDataMessage.arg.sprdId, exchange: 'okex-spreads', isSnapshot: true, bids: message.bids.map(mapBookLevel), asks: message.asks.map(mapBookLevel), timestamp, localTimestamp: localTimestamp }; } } } exports.OkexSpreadsBookChangeMapper = OkexSpreadsBookChangeMapper; class OkexSpreadsBookTickerMapper { canHandle(message) { if (message.event !== undefined || message.arg === undefined) { return false; } return message.arg.channel === 'sprd-bbo-tbt'; } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: `sprd-bbo-tbt`, symbols } ]; } *map(message, localTimestamp) { if (!message.data) { return; } for (const tbtTicker of message.data) { const timestamp = new Date(Number(tbtTicker.ts)); if (timestamp.valueOf() === 0) { continue; } const bestAsk = tbtTicker.asks !== undefined && tbtTicker.asks[0] ? mapBookLevel(tbtTicker.asks[0]) : undefined; const bestBid = tbtTicker.bids !== undefined && tbtTicker.bids[0] ? mapBookLevel(tbtTicker.bids[0]) : undefined; const ticker = { type: 'book_ticker', symbol: message.arg.sprdId, exchange: 'okex-spreads', askAmount: bestAsk === null || bestAsk === void 0 ? void 0 : bestAsk.amount, askPrice: bestAsk === null || bestAsk === void 0 ? void 0 : bestAsk.price, bidPrice: bestBid === null || bestBid === void 0 ? void 0 : bestBid.price, bidAmount: bestBid === null || bestBid === void 0 ? void 0 : bestBid.amount, timestamp, localTimestamp: localTimestamp }; yield ticker; } } } exports.OkexSpreadsBookTickerMapper = OkexSpreadsBookTickerMapper; //# sourceMappingURL=okexspreads.js.map