'use strict'; var SockJS = require('sockjs-client/dist/sockjs'); var retries = 0; var sock = null; var socket = function initSocket(url, handlers) { sock = new SockJS(url); sock.onopen = function onopen() { retries = 0; }; sock.onclose = function onclose() { if (retries === 0) { handlers.close(); } // Try to reconnect. sock = null; // After 10 retries stop trying, to prevent logspam. if (retries <= 10) { // Exponentially increase timeout to reconnect. // Respectfully copied from the package `got`. // eslint-disable-next-line no-mixed-operators, no-restricted-properties var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100; retries += 1; setTimeout(function () { socket(url, handlers); }, retryInMs); } }; sock.onmessage = function onmessage(e) { // This assumes that all data sent via the websocket is JSON. var msg = JSON.parse(e.data); if (handlers[msg.type]) { handlers[msg.type](msg.data); } }; }; module.exports = socket;