UNPKG

@nexex/orderbook-client

Version:
192 lines 9.93 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var orderbook_1 = require("@nexex/types/orderbook"); var orderbook_2 = require("@nexex/types/tpl/orderbook"); var cerialize_1 = require("cerialize"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var socket_io_client_1 = __importDefault(require("socket.io-client")); var reqId = 0; var OrderbookWsClient = /** @class */ (function () { function OrderbookWsClient(config) { var _this = this; this.config = config; this.socket = socket_io_client_1.default(config.url); this.events$ = new rxjs_1.Subject(); this.socket.on('orderbook', function (event) { return _this.events$.next(_this.parse(event)); }); this.socket.on('reconnect', function () { return _this.socket.emit('subscribe', _this.lastSub); }); } /** * internally will subscribe two order sequence from ob service * @param baseTokenAddr * @param quoteTokenAddr * @return subscribeId * @throws error if not connected */ OrderbookWsClient.prototype.subscribe = function (baseTokenAddr, quoteTokenAddr) { this.lastSub = { baseTokenAddr: baseTokenAddr.toLowerCase(), quoteTokenAddr: quoteTokenAddr.toLowerCase() }; this.socket.emit('subscribe', this.lastSub); }; OrderbookWsClient.prototype.topOrders = function (marketId, limit, decimals) { if (limit === void 0) { limit = 5; } if (decimals === void 0) { decimals = 5; } var id = reqId++; this.socket.emit('rpc', { method: orderbook_1.WsRequests.MARKET_TOP_ORDERS, params: [marketId, limit, decimals], id: id }); return this.events$.pipe(operators_1.filter(function (evt) { return evt.id === id; }), operators_1.first(), operators_1.map(function (rsp) { return cerialize_1.Deserialize(rsp.payload, orderbook_2.OrderbookAggregateTpl); })).toPromise(); }; OrderbookWsClient.prototype.queryOrderAggregate = function (marketId, side, price) { var id = reqId++; this.socket.emit('rpc', { method: orderbook_1.WsRequests.MARKET_AG_BY_PRICE, params: [marketId, side, price], id: id }); return this.events$.pipe(operators_1.filter(function (evt) { return evt.id === id; }), operators_1.first(), operators_1.map(function (rsp) { return cerialize_1.Deserialize(rsp.payload, orderbook_2.OrderAggregateTpl); })).toPromise(); }; OrderbookWsClient.prototype.snapshot = function (marketId, limit) { if (limit === void 0) { limit = 5; } var id = reqId++; this.socket.emit('rpc', { method: orderbook_1.WsRequests.MARKET_SNAPSHOT, params: [marketId, limit], id: id }); return this.events$.pipe(operators_1.filter(function (evt) { return evt.id === id; }), operators_1.first(), operators_1.map(function (rsp) { return cerialize_1.Deserialize(rsp.payload, orderbook_2.OrderbookTpl); })).toPromise(); }; OrderbookWsClient.prototype.reqSnapshot = function (marketId, limit) { if (limit === void 0) { limit = 5; } this.socket.emit('rpc', { method: orderbook_1.WsRequests.MARKET_SNAPSHOT, params: [marketId, limit] }); }; OrderbookWsClient.prototype.markets = function () { return __awaiter(this, void 0, void 0, function () { var id; return __generator(this, function (_a) { id = reqId++; this.socket.emit('rpc', { method: orderbook_1.WsRequests.MARKET_QUERY, params: [], id: id }); return [2 /*return*/, this.events$.pipe(operators_1.filter(function (evt) { return evt.id === id; }), operators_1.first(), operators_1.map(function (rsp) { return rsp.payload; })).toPromise()]; }); }); }; OrderbookWsClient.prototype.queryOrder = function (orderHash) { return __awaiter(this, void 0, void 0, function () { var id; return __generator(this, function (_a) { id = reqId++; this.socket.emit('rpc', { method: orderbook_1.WsRequests.MARKET_ORDER, params: [orderHash], id: id }); return [2 /*return*/, this.events$.pipe(operators_1.filter(function (evt) { return evt.id === id; }), operators_1.first(), operators_1.map(function (rsp) { return cerialize_1.Deserialize(rsp.payload, orderbook_2.OrderbookOrderTpl); })).toPromise()]; }); }); }; OrderbookWsClient.prototype.queryOrderBatch = function (marketId, side, orderHashs) { return __awaiter(this, void 0, void 0, function () { var id; return __generator(this, function (_a) { id = reqId++; this.socket.emit('rpc', { method: orderbook_1.WsRequests.MARKET_ORDER_BATCH, params: [marketId, side, orderHashs], id: id }); return [2 /*return*/, this.events$.pipe(operators_1.filter(function (evt) { return evt.id === id; }), operators_1.first(), operators_1.map(function (rsp) { return rsp.payload; })).toPromise()]; }); }); }; OrderbookWsClient.prototype.marketConfig = function (marketId) { return __awaiter(this, void 0, void 0, function () { var id; return __generator(this, function (_a) { id = reqId++; this.socket.emit('rpc', { method: orderbook_1.WsRequests.MARKET_CONFIG, params: [marketId], id: id }); return [2 /*return*/, this.events$.pipe(operators_1.filter(function (evt) { return evt.id === id; }), operators_1.first(), operators_1.map(function (rsp) { return rsp.payload; })).toPromise()]; }); }); }; OrderbookWsClient.prototype.placeOrder = function (orderHash, order) { return __awaiter(this, void 0, void 0, function () { var id; return __generator(this, function (_a) { id = reqId++; this.socket.emit('rpc', { method: orderbook_1.WsRequests.ORDER_PLACE, params: [order], id: id }); return [2 /*return*/, this.events$.pipe(operators_1.filter(function (evt) { return evt.id === id; }), operators_1.first(), operators_1.map(function (rsp) { return rsp.payload; })).toPromise()]; }); }); }; OrderbookWsClient.prototype.parse = function (event) { if (event.type === orderbook_1.ObEventTypes.NEW_ORDER_ACCEPTED) { var payload = event.payload; var order = cerialize_1.Deserialize(payload.order, orderbook_2.OrderbookOrderTpl); return { type: event.type, payload: { marketId: payload.marketId, order: order } }; } return event; }; return OrderbookWsClient; }()); exports.OrderbookWsClient = OrderbookWsClient; //# sourceMappingURL=wsClient.js.map