diff --git a/src/client/connection.ts b/src/client/connection.ts index 234a9b08..e66c0acf 100644 --- a/src/client/connection.ts +++ b/src/client/connection.ts @@ -401,10 +401,10 @@ export class Connection extends EventEmitter { this.emit('error', 'websocket', error.message, error) ) // Handle a closed connection: reconnect if it was unexpected - this._ws.once('close', (code) => { + this._ws.once('close', (code, reason) => { this._clearHeartbeatInterval() this._requestManager.rejectAll( - new DisconnectedError('websocket was closed') + new DisconnectedError(`websocket was closed, ${reason}`) ) this._ws.removeAllListeners() this._ws = null diff --git a/src/client/index.ts b/src/client/index.ts index 889b7f44..50a9b549 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -232,7 +232,7 @@ class Client extends EventEmitter { // 4000: Connection uses a 4000 code internally to indicate a manual disconnect/close // Since 4000 is a normal disconnect reason, we convert this to the standard exit code 1000 if (finalCode === 4000) { - finalCode = 1000 + finalCode = 1000 } this.emit('disconnected', finalCode) }) diff --git a/test/connection-test.ts b/test/connection-test.ts index 99dc904e..f03bb7dc 100644 --- a/test/connection-test.ts +++ b/test/connection-test.ts @@ -572,4 +572,13 @@ describe('Connection', function () { data: {disconnectIn: 5} }) }) + + it('should not crash on error', async function (done) { + this.mockRippled.suppressOutput = true + this.client.connection.request({ + command: 'test_garbage' + }) + .then(() => new Error('Should not have succeeded')) + .catch(done()) + }) }) diff --git a/test/mock-rippled.ts b/test/mock-rippled.ts index 2fde1835..d98771d6 100644 --- a/test/mock-rippled.ts +++ b/test/mock-rippled.ts @@ -88,6 +88,8 @@ export function createMockRippled(port) { mock.expectedRequests = expectedRequests } + mock.suppressOutput = false + mock.on('connection', function (this: MockedWebSocketServer, conn: any) { if (mock.config.breakNextConnection) { mock.config.breakNextConnection = false @@ -106,8 +108,9 @@ export function createMockRippled(port) { mock.emit('request_' + request.command, request, conn) } } catch (err) { - console.error('Error: ' + err.message) - assert(false, err.message) + if (!mock.suppressOutput) + console.error('Error: ' + err.message) + conn.close(4000, err.message) } }) })