bitso-ws
Version:
Simple wrapper for Bitso websocket api.
85 lines (62 loc) • 2.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = BitsoWebSocket;
var _events = require('events');
var _events2 = _interopRequireDefault(_events);
var _websocket = require('websocket');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const debug = require('debug')('bitso-ws');
const TRADES = 'trades';
const DIFF_ORDERS = 'diff-orders';
const ORDERS = 'orders';
function BitsoWebSocket(opts) {
var _opts$orders = opts.orders;
const orders = _opts$orders === undefined ? false : _opts$orders;
var _opts$diffOrders = opts.diffOrders;
const diffOrders = _opts$diffOrders === undefined ? false : _opts$diffOrders;
var _opts$trades = opts.trades;
const trades = _opts$trades === undefined ? false : _opts$trades;
const events = new _events2.default();
const websocket = new _websocket.w3cwebsocket('wss://ws.bitso.com');
const subscribeArgs = {
action: 'subscribe',
book: 'btc_mxn',
type: ORDERS
};
websocket.onopen = () => {
debug('#### websocket is open ###');
if (orders) {
websocket.send(JSON.stringify(subscribeArgs));
}
if (diffOrders) {
websocket.send(JSON.stringify(_extends({ type: DIFF_ORDERS }, subscribeArgs)));
}
if (trades) {
websocket.send(JSON.stringify(_extends({ type: TRADES }, subscribeArgs)));
}
};
websocket.onmessage = message => {
const data = JSON.parse(message.data);
debug(data);
if (data.action === 'subscribe') {
switch (data.type) {
case TRADES:
debug('### subscribed to trades channel.');
break;
case DIFF_ORDERS:
debug('### subscribed to diff-orders channel.');
break;
case ORDERS:
debug('### subscribed to orders channel.');
break;
default:
}
}
events.emit('data', data);
};
websocket.onerror = err => events.emit('error', err);
return events;
}