UNPKG

rofex

Version:

Primary REST API. Websocket API

137 lines (118 loc) 4.22 kB
var RofexAuth = require('./auth.js'); var WebSocketClient = require('websocket').client; const EventEmitter = require('events'); class WebSocket extends EventEmitter { constructor( user, pass, timeout = 15000, test = false ) { super(); this.waitFor = []; this._baseUrl = 'wss://api.primary.com.ar'; if (test) { this._baseUrl = 'ws://demo-api.primary.com.ar'; } this.WSclient = new WebSocketClient(); this.WSclient.on('connectFailed', function (error) { console.log('Connect Error: ' + error.toString()); }); this.WSclient.on('connect', (connection) => { console.log('WebSocket Client Connected'); connection.on('error', function (error) { console.log("Connection Error: " + error.toString()); }); connection.on('close', function () { console.log('echo-protocol Connection Closed'); }); connection.on('message', (message) => { if (message.type === 'utf8') { //console.log("Received: '" + message.utf8Data + "'"); var data = JSON.parse(message.utf8Data); var event = ''; switch (data.type) { case 'or': event = 'orderReport'; break; case 'Md': event = 'marketData'; break;; } this.emit(event, data); } }); }); this.WSclient.on('close', function () { console.log('echo-protocol Client Closed'); }); this.Auth = new RofexAuth(user, pass, timeout, test); this.Auth.getToken() .then(token => { var Headers = { 'X-Auth-Token': token }; console.log(Headers, this._baseUrl); this.WSclient.connect(this._baseUrl, null, null, Headers); }) .catch(console.error); } marketData(marketId, symbol, entries = ['BI', 'OF', 'LA'], level = 1, depth = 2) { var request = { "type": "smd", "level": level, "entries": entries, "products": [{ "symbol": symbol, "marketId": marketId }], "depth": depth }; this.WSclient.on('connect', function (connection) { if (connection.connected) { connection.sendUTF(JSON.stringify(request)); } }); } executionReport(){ var request = { type:"os"}; this.WSclient.on('connect', function (connection) { if (connection.connected) { console.log(request); connection.sendUTF(JSON.stringify(request)); } }); } /** * * @param {*} marketId * @param {*} symbol * @param {*} side [Sell|Buy] */ order(marketId, symbol, price, quantity, side, timeInForce = 'Day', account, wsClOrdId = null, iceberg = null, expireDate = null, displayQuantity = null ) { var request = { type: "no", product: { symbol: symbol, marketId: marketId }, price: price, quantity: quantity, side: side, account: account, timeInForce : timeInForce }; //Mensaje para el envío de una orden para un contrato Mayorista: if(allOrNone!=null){ request.allOrNone = allOrNone } //Mensaje para el envío de una orden con identificador (wsClOrdId): if (wsClOrdId) { request.wsClOrdId = wsClOrdId; } //Mensaje para el envío de una orden Iceberg: if (iceberg!==null) { request.iceberg = iceberg } if(displayQty!==null){ request.displayQuantity = displayQuantity; } //Mensaje para el envío de una orden GTD: if (expireDate !==null) { request.expireDate = expireDate; } } } module.exports = WebSocket;