diff --git a/src/common/connection.js b/src/common/connection.js index cb87dbef..f116e741 100644 --- a/src/common/connection.js +++ b/src/common/connection.js @@ -38,6 +38,17 @@ class Connection extends EventEmitter { this._nextRequestID = 1; } + _updateLedgerVersions(data) { + this._ledgerVersion = Number(data.ledger_index); + if (data.validated_ledgers) { + this._availableLedgerVersions.reset(); + this._availableLedgerVersions.parseAndAddRanges( + data.validated_ledgers); + } else { + this._availableLedgerVersions.addValue(this._ledgerVersion); + } + } + // return value is array of arguments to Connection.emit _parseMessage(message) { const data = JSON.parse(message); @@ -48,10 +59,7 @@ class Connection extends EventEmitter { return [data.id.toString(), data]; } else if (isStreamMessageType(data.type)) { if (data.type === 'ledgerClosed') { - this._ledgerVersion = Number(data.ledger_index); - this._availableLedgerVersions.reset(); - this._availableLedgerVersions.parseAndAddRanges( - data.validated_ledgers); + this._updateLedgerVersions(data); } return [data.type, data]; } else if (data.type === undefined && data.error) { @@ -99,10 +107,8 @@ class Connection extends EventEmitter { command: 'subscribe', streams: ['ledger'] }; - return this.request(request).then(response => { - this._ledgerVersion = Number(response.ledger_index); - this._availableLedgerVersions.parseAndAddRanges( - response.validated_ledgers); + return this.request(request).then(data => { + this._updateLedgerVersions(data); this._isReady = true; this.emit('connected'); }); diff --git a/test/broadcast-api-test.js b/test/broadcast-api-test.js index 993d3f3d..bdf6bbd4 100644 --- a/test/broadcast-api-test.js +++ b/test/broadcast-api-test.js @@ -42,7 +42,6 @@ describe('RippleAPIBroadcast', function() { this.mocks.forEach(mock => mock.socket.send(JSON.stringify(ledgerNext))); setTimeout(() => { - console.log('-- ledgerVersion', this.api.ledgerVersion); assert.strictEqual(gotLedger, 1); done(); }, 50); diff --git a/test/connection-test.js b/test/connection-test.js index 24f2dd88..0e14cbc7 100644 --- a/test/connection-test.js +++ b/test/connection-test.js @@ -7,6 +7,7 @@ const assert = require('assert-diff'); const setupAPI = require('./setup-api'); const RippleAPI = require('ripple-api').RippleAPI; const utils = RippleAPI._PRIVATE.ledgerUtils; +const ledgerClose = require('./fixtures/rippled/ledger-close.json'); function unused() { @@ -261,4 +262,13 @@ describe('Connection', function() { this.api.connection._onMessage(JSON.stringify({type: 'unknown'})); }); + + it('ledger close without validated_ledgers', function(done) { + const message = _.omit(ledgerClose, 'validated_ledgers'); + this.api.on('ledger', function(ledger) { + assert.strictEqual(ledger.ledgerVersion, 8819951); + done(); + }); + this.api.connection._ws.emit('message', JSON.stringify(message)); + }); });