UNPKG

tardis-dev

Version:

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

172 lines 6.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GateIOFuturesBookTickerMapper = exports.GateIOFuturesDerivativeTickerMapper = exports.GateIOFuturesBookChangeMapper = exports.GateIOFuturesTradesMapper = void 0; const handy_1 = require("../handy"); const mapper_1 = require("./mapper"); // https://www.gate.io/docs/futures/ws/index.html class GateIOFuturesTradesMapper { constructor(_exchange) { this._exchange = _exchange; } canHandle(message) { return message.channel === 'futures.trades' && message.event === 'update'; } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: 'trades', symbols } ]; } *map(tradesMessage, localTimestamp) { for (const trade of tradesMessage.result) { const timestamp = trade.create_time_ms !== undefined ? new Date(trade.create_time_ms) : new Date(trade.create_time * 1000); yield { type: 'trade', symbol: trade.contract, exchange: this._exchange, id: trade.id.toString(), price: Number(trade.price), amount: Math.abs(trade.size), side: trade.size < 0 ? 'sell' : 'buy', timestamp, localTimestamp: localTimestamp }; } } } exports.GateIOFuturesTradesMapper = GateIOFuturesTradesMapper; const mapBookLevel = (level) => { const price = Number(level.p); return { price, amount: Math.abs(level.s) }; }; class GateIOFuturesBookChangeMapper { constructor(_exchange) { this._exchange = _exchange; } canHandle(message) { return message.channel === 'futures.order_book' && (message.event === 'all' || message.event === 'update'); } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: 'order_book', symbols } ]; } *map(depthMessage, localTimestamp) { if (depthMessage.event === 'all') { if (depthMessage.result.t === 0) { return; } const timestamp = depthMessage.result.t !== undefined ? new Date(depthMessage.result.t) : new Date(depthMessage.time * 1000); // snapshot yield { type: 'book_change', symbol: depthMessage.result.contract, exchange: this._exchange, isSnapshot: true, bids: depthMessage.result.bids.map(mapBookLevel), asks: depthMessage.result.asks.map(mapBookLevel), timestamp, localTimestamp: localTimestamp }; } else if (depthMessage.result.length > 0) { // update const timestamp = depthMessage.result[0].t !== undefined ? new Date(depthMessage.result[0].t) : new Date(depthMessage.time * 1000); yield { type: 'book_change', symbol: depthMessage.result[0].c, exchange: this._exchange, isSnapshot: false, bids: depthMessage.result.filter((l) => l.s >= 0).map(mapBookLevel), asks: depthMessage.result.filter((l) => l.s <= 0).map(mapBookLevel), timestamp, localTimestamp: localTimestamp }; } } } exports.GateIOFuturesBookChangeMapper = GateIOFuturesBookChangeMapper; class GateIOFuturesDerivativeTickerMapper { constructor() { this.pendingTickerInfoHelper = new mapper_1.PendingTickerInfoHelper(); } canHandle(message) { return message.channel === 'futures.tickers' && message.event === 'update'; } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: 'tickers', symbols } ]; } *map(message, localTimestamp) { const tickers = Array.isArray(message.result) ? message.result : [message.result]; for (const futuresTicker of tickers) { if (futuresTicker.contract === undefined) { return; } const timestamp = message.time_ms !== undefined ? new Date(message.time_ms) : new Date(message.time * 1000); const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(futuresTicker.contract, 'gate-io-futures'); pendingTickerInfo.updateFundingRate(Number(futuresTicker.funding_rate)); pendingTickerInfo.updatePredictedFundingRate(Number(futuresTicker.funding_rate_indicative)); pendingTickerInfo.updateIndexPrice(Number(futuresTicker.index_price)); pendingTickerInfo.updateMarkPrice(Number(futuresTicker.mark_price)); pendingTickerInfo.updateLastPrice(Number(futuresTicker.last)); pendingTickerInfo.updateTimestamp(timestamp); if (futuresTicker.total_size !== undefined) { pendingTickerInfo.updateOpenInterest(Number(futuresTicker.total_size)); } if (pendingTickerInfo.hasChanged()) { yield pendingTickerInfo.getSnapshot(localTimestamp); } } } } exports.GateIOFuturesDerivativeTickerMapper = GateIOFuturesDerivativeTickerMapper; class GateIOFuturesBookTickerMapper { constructor(_exchange) { this._exchange = _exchange; } canHandle(message) { return message.channel === 'futures.book_ticker' && message.event === 'update'; } getFilters(symbols) { symbols = (0, handy_1.upperCaseSymbols)(symbols); return [ { channel: 'book_ticker', symbols } ]; } *map(gateIoFuturesBookTickerMessage, localTimestamp) { const gateIoFuturesBookTicker = gateIoFuturesBookTickerMessage.result; if (gateIoFuturesBookTicker.t === 0) { return; } const ticker = { type: 'book_ticker', symbol: gateIoFuturesBookTicker.s, exchange: this._exchange, askAmount: gateIoFuturesBookTicker.A !== 0 ? gateIoFuturesBookTicker.A : undefined, askPrice: gateIoFuturesBookTicker.a !== '' ? Number(gateIoFuturesBookTicker.a) : undefined, bidPrice: gateIoFuturesBookTicker.b !== '' ? Number(gateIoFuturesBookTicker.b) : undefined, bidAmount: gateIoFuturesBookTicker.B !== 0 ? gateIoFuturesBookTicker.B : undefined, timestamp: gateIoFuturesBookTicker.t !== undefined ? new Date(gateIoFuturesBookTicker.t) : localTimestamp, localTimestamp: localTimestamp }; yield ticker; } } exports.GateIOFuturesBookTickerMapper = GateIOFuturesBookTickerMapper; //# sourceMappingURL=gateiofutures.js.map