Skip to content

Commit e37c23e

Browse files
authored
Merge pull request #17 from bitholla/develop
Develop
2 parents 2301dc8 + 2cf747d commit e37c23e

File tree

7 files changed

+82
-56
lines changed

7 files changed

+82
-56
lines changed

example/hollaex.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const API_SECRET = process.env.API_SECRET || '';
66
const client = new HollaEx({ apiKey: API_KEY, apiSecret: API_SECRET });
77

88
client
9-
.getTicker('hex-usdt')
9+
.getTicker('xht-usdt')
1010
.then((res) => {
1111
let data = JSON.parse(res);
1212
console.log('The volume is', data.volume);
@@ -19,10 +19,10 @@ client
1919
/*
2020
events (emitted) : trades (trades), orderbook (orderbook), user (userInfo, userWallet, userOrder, userTrades, userUpdate), all
2121
22-
symbols : hex-usdt
22+
symbols : xht-usdt
2323
*/
2424

25-
const socket1 = client.connect('trades:hex-usdt');
25+
const socket1 = client.connect('trades:xht-usdt');
2626

2727
socket1.on('trades', (data) => {
2828
console.log(data);
@@ -38,3 +38,8 @@ socket2.on('orderbook', (data) => {
3838
socket2.on('userInfo', (data) => {
3939
console.log(data);
4040
});
41+
42+
43+
setTimeout(() => {
44+
socket2.disconnect();
45+
}, 5000);

index.js

Lines changed: 61 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const io = require('socket.io-client');
22
const EventEmitter = require('events');
33
const moment = require('moment');
4+
const { each } = require('lodash');
45
const { createRequest, createSignature, generateHeaders } = require('./utils');
56

67
class HollaEx {
@@ -314,111 +315,131 @@ Websocket
314315
class Socket extends EventEmitter {
315316
constructor(events = '', url, apiKey, apiSignature, apiExpires) {
316317
super();
318+
this.events = events;
319+
this.url = url;
320+
this.apiKey = apiKey;
321+
this.apiSignature = apiSignature;
322+
this.apiExpires = apiExpires;
323+
this.connect(this.events, this.url, this.apiKey, this.apiSignature, this.apiExpires);
324+
}
325+
326+
disconnect() {
327+
each(this.ioLink, (ioLink) => {
328+
ioLink.close();
329+
});
330+
this.ioLink = [];
331+
}
332+
333+
connect(events, url, apiKey, apiSignature, apiExpires) {
317334
if (!Array.isArray(events)) {
318-
let subs = {};
319-
let listeners = [];
320-
let ioLink;
335+
this.subs = {};
336+
this.ioLink = [];
321337
events = events.split(':');
322338
let [event, symbol] = events;
323339
switch (event) {
324340
case 'orderbook':
325341
case 'trades':
326342
// case 'ticker':
327343
if (symbol) {
328-
ioLink = io(`${url}/realtime`, { query: { symbol } });
344+
this.ioLink.push(io(`${url}/realtime`, { query: { symbol } }));
329345
} else {
330-
ioLink = io(`${url}/realtime`);
346+
this.ioLink.push(io(`${url}/realtime`));
331347
}
332-
listeners.push(ioLink);
333-
listeners[listeners.length - 1].on(event, (data) => {
348+
this.ioLink[this.ioLink.length - 1].on(event, (data) => {
334349
this.emit(event, data);
335350
});
336-
listeners[listeners.length - 1].once('disconnect', (data) => {
337-
this.emit('disconnect', `Socket.io disconnected from server due to: ${data}.`);
338-
subs = this._events;
351+
this.ioLink[this.ioLink.length - 1].on('error', (error) => {
352+
this.emit('error', error);
353+
});
354+
this.ioLink[this.ioLink.length - 1].once('disconnect', (data) => {
355+
this.emit('disconnect', `Soscket.io disconnected from server due to: ${data}.`);
356+
this.subs = this._events;
339357
this.removeAllListeners();
340358
});
341-
listeners[listeners.length - 1].once('reconnect', (attempts) => {
342-
this._events = subs;
359+
this.ioLink[this.ioLink.length - 1].once('reconnect', (attempts) => {
360+
this._events = this.subs;
343361
this.emit('reconnect', `Successfully reconnected after ${attempts} attempts.`);
344362
});
345363
break;
346364
case 'user':
347-
ioLink = io(`${url}/user`, {
365+
this.ioLink.push(io(`${url}/user`, {
348366
query: {
349367
'api-key': apiKey,
350368
'api-signature': apiSignature,
351369
'api-expires': apiExpires
352370
}
353-
});
371+
}));
354372

355-
listeners.push(ioLink);
356-
listeners[listeners.length - 1].on('user', (data) => {
373+
this.ioLink[this.ioLink.length - 1].on('user', (data) => {
357374
this.emit('userInfo', data);
358375
});
359-
listeners[listeners.length - 1].on('wallet', (data) => {
376+
this.ioLink[this.ioLink.length - 1].on('wallet', (data) => {
360377
this.emit('userWallet', data);
361378
});
362-
listeners[listeners.length - 1].on('orders', (data) => {
379+
this.ioLink[this.ioLink.length - 1].on('orders', (data) => {
363380
this.emit('userOrder', data);
364381
});
365-
listeners[listeners.length - 1].on('trades', (data) => {
382+
this.ioLink[this.ioLink.length - 1].on('trades', (data) => {
366383
this.emit('userTrades', data);
367384
});
368-
listeners[listeners.length - 1].on('update', (data) => {
385+
this.ioLink[this.ioLink.length - 1].on('update', (data) => {
369386
this.emit('userUpdate', data);
370387
});
371-
listeners[listeners.length - 1].once('disconnect', (data) => {
388+
this.ioLink[this.ioLink.length - 1].on('error', (error) => {
389+
this.emit('error', error);
390+
});
391+
this.ioLink[this.ioLink.length - 1].once('disconnect', (data) => {
372392
this.emit('disconnect', `Socket.io disconnected from server due to: ${data}.`);
373-
subs = this._events;
393+
this.subs = this._events;
374394
this.removeAllListeners();
375395
});
376-
listeners[listeners.length - 1].once('reconnect', (attempts) => {
377-
this._events = subs;
396+
this.ioLink[this.ioLink.length - 1].once('reconnect', (attempts) => {
397+
this._events = this.subs;
378398
this.emit('reconnect', `Successfully reconnected after ${attempts} attempts.`);
379399
});
380400
break;
381401
case 'all':
382-
ioLink = io(`${url}/realtime`);
402+
this.ioLink.push(io(`${url}/realtime`));
383403

384-
listeners.push(ioLink);
385-
listeners[listeners.length - 1].on('orderbook', (data) => {
404+
this.ioLink[this.ioLink.length - 1].on('orderbook', (data) => {
386405
this.emit('orderbook', data);
387406
});
388-
listeners[listeners.length - 1].on('trades', (data) => {
407+
this.ioLink[this.ioLink.length - 1].on('trades', (data) => {
389408
this.emit('trades', data);
390409
});
391410

392-
ioLink = io(`${url}/user`, {
411+
this.ioLink.push(io(`${url}/user`, {
393412
query: {
394413
'api-key': apiKey,
395414
'api-signature': apiSignature,
396415
'api-expires': apiExpires
397416
}
398-
});
399-
listeners.push(ioLink);
400-
listeners[listeners.length - 1].on('user', (data) => {
417+
}));
418+
this.ioLink[this.ioLink.length - 1].on('user', (data) => {
401419
this.emit('userInfo', data);
402420
});
403-
listeners[listeners.length - 1].on('wallet', (data) => {
421+
this.ioLink[this.ioLink.length - 1].on('wallet', (data) => {
404422
this.emit('userWallet', data);
405423
});
406-
listeners[listeners.length - 1].on('orders', (data) => {
424+
this.ioLink[this.ioLink.length - 1].on('orders', (data) => {
407425
this.emit('userOrder', data);
408426
});
409-
listeners[listeners.length - 1].on('trades', (data) => {
427+
this.ioLink[this.ioLink.length - 1].on('trades', (data) => {
410428
this.emit('userTrade', data);
411429
});
412-
listeners[listeners.length - 1].on('update', (data) => {
430+
this.ioLink[this.ioLink.length - 1].on('update', (data) => {
413431
this.emit('userUpdate', data);
414432
});
415-
listeners[listeners.length - 1].once('disconnect', (data) => {
433+
this.ioLink[this.ioLink.length - 1].on('error', (error) => {
434+
this.emit('error', error);
435+
});
436+
this.ioLink[this.ioLink.length - 1].once('disconnect', (data) => {
416437
this.emit('disconnect', `Socket.io disconnected from server due to: ${data}.`);
417-
subs = this._events;
438+
this.subs = this._events;
418439
this.removeAllListeners();
419440
});
420-
listeners[listeners.length - 1].once('reconnect', (attempts) => {
421-
this._events = subs;
441+
this.ioLink[this.ioLink.length - 1].once('reconnect', (attempts) => {
442+
this._events = this.subs;
422443
this.emit('reconnect', `Successfully reconnected after ${attempts} attempts.`);
423444
});
424445
break;

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hollaex-node-lib",
3-
"version": "1.0.1",
3+
"version": "1.1.0",
44
"description": "hollaex api and websocket library for nodejs",
55
"main": "index.js",
66
"dependencies": {

test/REST/restApiTest.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ describe('Private functions', () => {
357357
describe('#createOrder(symbolPair, side, size, type, price)', () => {
358358
it('Create an order and return output', (done) => {
359359
client
360-
.createOrder('btc-eur', 'buy', 0.0001, 'limit', 1000)
360+
.createOrder('btc-usdt', 'buy', 0.0001, 'limit', 1000)
361361
.then((result) => {
362362
const data = JSON.parse(result);
363363
btcOrder = data;
@@ -369,7 +369,7 @@ describe('Private functions', () => {
369369
});
370370
it('Get an error message when price is too low', (done) => {
371371
client
372-
.createOrder('btc-eur', 'buy', 0.0001, 'limit', -9999)
372+
.createOrder('btc-usdt', 'buy', 0.0001, 'limit', -9999)
373373
.catch((err) => {
374374
expect(err.response.body).to.include(
375375
'Order price is out of the limits'
@@ -379,7 +379,7 @@ describe('Private functions', () => {
379379
});
380380
it('Get an error message when amount is too low', (done) => {
381381
client
382-
.createOrder('btc-eur', 'buy', -9999, 'limit', 1000)
382+
.createOrder('btc-usdt', 'buy', -9999, 'limit', 1000)
383383
.catch((err) => {
384384
expect(err.response.body).to.include(
385385
'Order size is out of the limits'
@@ -409,7 +409,7 @@ describe('Private functions', () => {
409409

410410
describe('#getAllOrder(symbolPair)', () => {
411411
it('Get all orders', (done) => {
412-
client.getAllOrder('btc-eur').then((result) => {
412+
client.getAllOrder('btc-usdt').then((result) => {
413413
const data = JSON.parse(result);
414414
expect(data).to.be.an('array');
415415
expect(data).not.be.empty;

test/Websocket/websocketTest.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe('Socket testing', () => {
3232
this.firstAsk = this.orderbook.asks[0];
3333
this.firstBid = this.orderbook.bids[0];
3434
this.usdt = this.balance['usdt_available'];
35-
this.hex = this.balance['hex_available'];
35+
this.xht = this.balance['xht_available'];
3636

3737
await sleep(1000);
3838
});
@@ -46,7 +46,7 @@ describe('Socket testing', () => {
4646
});
4747

4848
it('Market maker places a valid order', async () => {
49-
if (0.0001 <= this.hex) {
49+
if (0.0001 <= this.xht) {
5050
await client
5151
.createOrder(
5252
symbolPair,
@@ -83,7 +83,7 @@ describe('Socket testing', () => {
8383
});
8484

8585
it('Market maker creates sell order significantly larger than largest sell order', async () => {
86-
if (0.0001 <= this.hex) {
86+
if (0.0001 <= this.xht) {
8787
this.logs = [];
8888
await client
8989
.createOrder(symbolPair, 'sell', 0.0001, 'limit', 50000)
@@ -115,7 +115,7 @@ describe('Socket testing', () => {
115115
});
116116

117117
it('Market taker creates an order that is immediately filled', async () => {
118-
if (0.0001 * (this.firstBid[0] + 1) <= this.usdt && 0.0001 <= this.hex) {
118+
if (0.0001 * (this.firstBid[0] + 1) <= this.usdt && 0.0001 <= this.xht) {
119119
this.logs = [];
120120
await client
121121
.createOrder(symbolPair, 'buy', 0.0001, 'limit', this.firstBid[0] + 1)
@@ -156,7 +156,7 @@ describe('Socket testing', () => {
156156
});
157157

158158
it('Market taker creates an order that is immediately partially filled', async () => {
159-
if (0.0001 * (this.firstBid[0] + 1) <= this.usdt && 0.0001 <= this.hex) {
159+
if (0.0001 * (this.firstBid[0] + 1) <= this.usdt && 0.0001 <= this.xht) {
160160
this.logs = [];
161161
await client
162162
.createOrder(symbolPair, 'buy', 0.0001, 'limit', this.firstBid[0] + 1)
@@ -221,7 +221,7 @@ describe('Socket testing', () => {
221221
});
222222

223223
it('Market taker creates a market order', async () => {
224-
if (0.0001 * (this.firstBid[0] + 1) <= this.usdt && 0.0001 <= this.hex) {
224+
if (0.0001 * (this.firstBid[0] + 1) <= this.usdt && 0.0001 <= this.xht) {
225225
this.logs = [];
226226
await client
227227
.createOrder(symbolPair, 'buy', 0.0001, 'limit', this.firstBid[0] + 1)

test/common.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require('dotenv').load();
55

66
const ACCESS_TOKEN = process.env.ACCESS_TOKEN;
77
const client = new HollaEx({ accessToken: ACCESS_TOKEN });
8-
const symbolPair = 'hex-usdt';
8+
const symbolPair = 'xht-usdt';
99

1010
module.exports = {
1111
expect,

0 commit comments

Comments
 (0)