UNPKG

@firefly-exchange/firefly-client

Version:

The Firefly Client Library allows traders to sign, create, retrieve and listen to orders on Firefly Exchange.

211 lines 7.54 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebSockets = void 0; /* eslint-disable no-unused-vars */ const library_1 = require("@firefly-exchange/library"); // @ts-ignore const WebSocket = require("ws"); const callbackListeners = {}; class WebSockets { constructor(url) { this.setAuthToken = (token) => { this.token = token; }; this.setAPIToken = (apiToken) => __awaiter(this, void 0, void 0, function* () { this.apiToken = apiToken; }); // Emitted when any price bin on the oderbook is updated. this.onOrderBookUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.OrderbookUpdateKey] = cb; }; this.onOrderBookPartialDepthUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.OrderbookDepthUpdateKey] = cb; }; this.onMarketDataUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.MarketDataUpdateKey] = cb; }; this.onMarketHealthChange = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.MarketHealthKey] = cb; }; this.onCandleStickUpdate = (symbol, interval, cb) => { callbackListeners[this.createDynamicUrl(library_1.SOCKET_EVENTS.GET_LAST_KLINE_WITH_INTERVAL, { symbol, interval, })] = cb; }; this.onExchangeHealthChange = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.ExchangeHealthKey] = cb; }; this.onTickerUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.TickerUpdate] = cb; }; // TODO: figure out what it does this.onRecentTrades = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.RecentTradesKey] = cb; }; this.onUserOrderUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.OrderUpdateKey] = cb; }; this.onUserOrderSentForSettlementUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.OrderSentForSettlementUpdate] = cb; }; this.onUserOrderRequeueUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.OrderRequeueUpdate] = cb; }; this.onUserOrderCancelOnRevertUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.OrderCancelledOnReversionUpdate] = cb; }; this.onUserPositionUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.PositionUpdateKey] = cb; }; this.onUserUpdates = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.UserTradeKey] = cb; }; this.onUserAccountDataUpdate = (cb) => { callbackListeners[library_1.SOCKET_EVENTS.AccountDataUpdateKey] = cb; }; this.url = url; this.token = ""; this.apiToken = ""; } createDynamicUrl(dynamicUrl, object) { // eslint-disable-next-line no-restricted-syntax, guard-for-in for (const key in object) { dynamicUrl = dynamicUrl.replace(`{${key}}`, object[key]); } return dynamicUrl; } /** * opens socket instance connection */ open() { return __awaiter(this, void 0, void 0, function* () { const socket = new WebSocket(this.url); this.socketInstance = socket; const socketOpenPromise = new Promise(function (resolve, reject) { socket.onopen = function () { resolve(true); }; socket.onerror = function (err) { reject(err); }; }); this.socketInstance.onmessage = (event) => { event = JSON.parse(event.data); if (callbackListeners[event.eventName]) { callbackListeners[event.eventName](event.data); } }; return socketOpenPromise; }); } /** * closes the socket instance connection */ close() { if (this.socketInstance) { this.socketInstance.close(); } Object.keys(callbackListeners).forEach(function (key) { delete callbackListeners[key]; }); } subscribeGlobalUpdatesBySymbol(symbol) { if (!this.socketInstance) return false; this.socketInstance.send(JSON.stringify([ "SUBSCRIBE", [ { e: library_1.SOCKET_EVENTS.GLOBAL_UPDATES_ROOM, p: symbol, }, ], ])); return true; } unsubscribeGlobalUpdatesBySymbol(symbol) { if (!this.socketInstance) return false; this.socketInstance.send(JSON.stringify([ "UNSUBSCRIBE", [ { e: library_1.SOCKET_EVENTS.GLOBAL_UPDATES_ROOM, p: symbol, }, ], ])); return true; } subscribeOrderBookDepthStreamBySymbol(symbol, depth = "") { if (!this.socketInstance) return false; this.socketInstance.send(JSON.stringify([ "SUBSCRIBE", [ { e: library_1.SOCKET_EVENTS.ORDERBOOK_DEPTH_STREAM_ROOM, p: symbol, d: depth, }, ], ])); return true; } unsubscribeOrderBookDepthStreamBySymbol(symbol, depth = "") { if (!this.socketInstance) return false; this.socketInstance.send(JSON.stringify([ "UNSUBSCRIBE", [ { e: library_1.SOCKET_EVENTS.ORDERBOOK_DEPTH_STREAM_ROOM, p: symbol, d: depth, }, ], ])); return true; } subscribeUserUpdateByToken() { if (!this.socketInstance) return false; this.socketInstance.send(JSON.stringify([ "SUBSCRIBE", [ { e: library_1.SOCKET_EVENTS.UserUpdatesRoom, rt: this.apiToken ? this.apiToken : "", t: this.token, }, ], ])); return true; } unsubscribeUserUpdateByToken() { if (!this.socketInstance) return false; this.socketInstance.send(JSON.stringify([ "UNSUBSCRIBE", [ { e: library_1.SOCKET_EVENTS.UserUpdatesRoom, t: this.token, }, ], ])); return true; } } exports.WebSockets = WebSockets; //# sourceMappingURL=WebSocket.js.map