Add ledgerClosed event

This commit is contained in:
Chris Clark
2015-09-16 17:53:19 -07:00
parent 49623cb4dd
commit 7ee368965c
8 changed files with 76 additions and 6 deletions

View File

@@ -78,7 +78,8 @@ function loadSchemas() {
require('./schemas/tx.json'), require('./schemas/tx.json'),
require('./schemas/uint32.json'), require('./schemas/uint32.json'),
require('./schemas/value.json'), require('./schemas/value.json'),
require('./schemas/prepare.json') require('./schemas/prepare.json'),
require('./schemas/ledger-closed.json')
]; ];
const titles = _.map(schemas, schema => schema.title); const titles = _.map(schemas, schema => schema.title);
const duplicates = _.keys(_.pick(_.countBy(titles), count => count > 1)); const duplicates = _.keys(_.pick(_.countBy(titles), count => count > 1));

View File

@@ -0,0 +1,21 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "ledgerClosed",
"description": "A ledgerClosed event message",
"type": "object",
"properties": {
"feeBase": {"type": "integer", "minimum": 0},
"feeReference": {"type": "integer", "minimum": 0},
"ledgerHash": {"$ref": "ledgerHash"},
"ledgerVersion": {"$ref": "ledgerVersion"},
"ledgerTimestamp": {"type": "string", "format": "date-time"},
"reserveBase": {"type": "integer", "minimum": 0},
"reserveIncrement": {"type": "integer", "minimum": 0},
"transactionCount": {"type": "integer", "minimum": 0},
"validatedLedgerVersions": {"type": "string"}
},
"addtionalProperties": false,
"required": ["feeBase", "feeReference", "ledgerHash", "ledgerTimestamp",
"reserveBase", "reserveIncrement", "transactionCount",
"ledgerVersion", "validatedLedgerVersions"]
}

View File

@@ -4,7 +4,7 @@
"type": "object", "type": "object",
"properties": { "properties": {
"result": {"type": "string"}, "result": {"type": "string"},
"timestamp": {"type": "string"}, "timestamp": {"type": "string", "format": "date-time"},
"fee": {"$ref": "value"}, "fee": {"$ref": "value"},
"balanceChanges": { "balanceChanges": {
"type": "object", "type": "object",

View File

@@ -2,6 +2,8 @@
'use strict'; 'use strict';
const _ = require('lodash'); const _ = require('lodash');
const util = require('util');
const EventEmitter = require('events').EventEmitter;
const common = require('./common'); const common = require('./common');
const server = require('./server/server'); const server = require('./server/server');
const connect = server.connect; const connect = server.connect;
@@ -34,11 +36,19 @@ const getLedger = require('./ledger/ledger');
function RippleAPI(options: {}) { function RippleAPI(options: {}) {
common.validate.remoteOptions(options); common.validate.remoteOptions(options);
if (EventEmitter instanceof Function) { // always true, needed for flow
EventEmitter.call(this);
}
const _options = _.assign({}, options, {automatic_resubmission: false}); const _options = _.assign({}, options, {automatic_resubmission: false});
this.remote = new common.core.Remote(_options); this.remote = new common.core.Remote(_options);
this.remote.on('ledger_closed', message => {
this.emit('ledgerClosed', server.formatLedgerClose(message));
});
} }
RippleAPI.prototype = { util.inherits(RippleAPI, EventEmitter);
_.assign(RippleAPI.prototype, {
connect, connect,
disconnect, disconnect,
isConnected, isConnected,
@@ -67,7 +77,7 @@ RippleAPI.prototype = {
generateAddress, generateAddress,
errors errors
}; });
// these are exposed only for use by unit tests; they are not part of the API // these are exposed only for use by unit tests; they are not part of the API
RippleAPI._PRIVATE = { RippleAPI._PRIVATE = {

View File

@@ -87,11 +87,30 @@ function getServerInfo(): Promise<GetServerInfoResponse> {
return common.promisify(getServerInfoAsync.bind(this))(); return common.promisify(getServerInfoAsync.bind(this))();
} }
function rippleTimeToISO8601(rippleTime: string): string {
return new Date(common.core.utils.toTimestamp(rippleTime)).toISOString();
}
function formatLedgerClose(ledgerClose: Object): Object {
return {
feeBase: ledgerClose.fee_base,
feeReference: ledgerClose.fee_ref,
ledgerHash: ledgerClose.ledger_hash,
ledgerVersion: ledgerClose.ledger_index,
ledgerTimestamp: rippleTimeToISO8601(ledgerClose.ledger_time),
reserveBase: ledgerClose.reserve_base,
reserveIncrement: ledgerClose.reserve_inc,
transactionCount: ledgerClose.txn_count,
validatedLedgerVersions: ledgerClose.validated_ledgers
};
}
module.exports = { module.exports = {
connect, connect,
disconnect, disconnect,
isConnected, isConnected,
getServerInfo, getServerInfo,
getFee, getFee,
getLedgerVersion getLedgerVersion,
formatLedgerClose
}; };

View File

@@ -786,6 +786,13 @@ describe('RippleAPI', function() {
}); });
it('ledgerClosed', function(done) {
this.api.on('ledgerClosed', message => {
checkResult(responses.ledgerClosed, 'ledgerClosed', message);
done();
});
this.api.remote.getServer().emit('message', ledgerClosed);
});
}); });
describe('RippleAPI - offline', function() { describe('RippleAPI - offline', function() {

View File

@@ -52,5 +52,6 @@ module.exports = {
complex: require('./prepare-trustline.json') complex: require('./prepare-trustline.json')
}, },
sign: require('./sign.json'), sign: require('./sign.json'),
submit: require('./submit.json') submit: require('./submit.json'),
ledgerClosed: require('./ledger-closed.json')
}; };

View File

@@ -0,0 +1,11 @@
{
"feeBase": 10,
"feeReference": 10,
"ledgerVersion": 14804627,
"ledgerHash": "9141FA171F2C0CE63E609466AF728FF66C12F7ACD4B4B50B0947A7F3409D593A",
"ledgerTimestamp": "2015-07-23T05:50:40.000Z",
"reserveBase": 20000000,
"reserveIncrement": 5000000,
"transactionCount": 19,
"validatedLedgerVersions": "13983423-14804627"
}