tardis-dev
Version:
Convenient access to tick-level historical and real-time cryptocurrency market data via Node.js
122 lines • 4.36 kB
JavaScript
;
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