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