diff --git a/js/src/api/transport/ws/ws.js b/js/src/api/transport/ws/ws.js index 934daa5ad..c30c910e6 100644 --- a/js/src/api/transport/ws/ws.js +++ b/js/src/api/transport/ws/ws.js @@ -101,16 +101,6 @@ export default class Ws extends JsonRpcBase { } } - _checkNodeUp () { - return fetch('/', { method: 'HEAD' }) - .then((r) => { - return r.status === 200; - }, () => { - return false; - }) - .catch(() => false); - } - _onOpen = (event) => { console.log('ws:onOpen', event); this._connected = true; @@ -127,36 +117,25 @@ export default class Ws extends JsonRpcBase { this._connected = false; this._connecting = false; - this._checkNodeUp() - .then((up) => { - // If the connection has been closed and the node - // is up, it means we have a wrong token - // Event code 1006 for WS means there is an error - // (not just closed by server) - if (up && event.code === 1006) { - event.status = 403; - } + this._lastError = event; - this._lastError = event; + if (this._autoConnect) { + const timeout = this.retryTimeout; - if (this._autoConnect) { - const timeout = this.retryTimeout; + const time = timeout < 1000 + ? Math.round(timeout) + 'ms' + : (Math.round(timeout / 10) / 100) + 's'; - const time = timeout < 1000 - ? Math.round(timeout) + 'ms' - : (Math.round(timeout / 10) / 100) + 's'; + console.log('ws:onClose', `trying again in ${time}...`); - console.log('ws:onClose', `trying again in ${time}...`); + this._reconnectTimeoutId = setTimeout(() => { + this._connect(); + }, timeout); - this._reconnectTimeoutId = setTimeout(() => { - this._connect(); - }, timeout); + return; + } - return; - } - - console.log('ws:onClose', event); - }); + console.log('ws:onClose', event); } _onError = (event) => { diff --git a/js/src/secureApi.js b/js/src/secureApi.js index 1b86b48f5..af62da2cf 100644 --- a/js/src/secureApi.js +++ b/js/src/secureApi.js @@ -41,6 +41,15 @@ export default class SecureApi extends Api { console.log('SecureApi:setToken', this._transport.token); } + _checkNodeUp () { + return fetch('/', { method: 'HEAD' }) + .then( + (r) => r.status === 200, + () => false + ) + .catch(() => false); + } + _followConnection = () => { const nextTick = () => { if (this._followConnectionTimeoutId) { @@ -65,17 +74,23 @@ export default class SecureApi extends Api { if (isConnected) { return this.connectSuccess(); } else if (lastError) { - const nextToken = this._tokensToTry[0] || 'initial'; - const nextState = nextToken !== 'initial' ? 0 : 1; + return this + ._checkNodeUp() + .then((isNodeUp) => { + const nextToken = this._tokensToTry[0] || 'initial'; + const nextState = nextToken !== 'initial' ? 0 : 1; - // If previous token was wrong, delete it - if (lastError.status === 403) { - this._tokensToTry = this._tokensToTry.slice(1); - } + // If previous token was wrong (error while node up), delete it + if (isNodeUp) { + this._tokensToTry = this._tokensToTry.slice(1); + } - if (nextToken !== this._transport.token) { - this.updateToken(nextToken, nextState); - } + if (nextToken !== this._transport.token) { + this.updateToken(nextToken, nextState); + } + + nextTick(); + }); } break;