Add getBalanceSheet() to RippleAPI

This commit is contained in:
wltsmrz
2015-09-22 07:59:27 -07:00
parent 323e402e0c
commit 806a4e823f
13 changed files with 288 additions and 2 deletions

View File

@@ -31,6 +31,8 @@ function loadSchemas() {
require('./schemas/currency.json'),
require('./schemas/get-account-info.json'),
require('./schemas/get-balances.json'),
require('./schemas/get-balance-sheet'),
require('./schemas/balance-sheet-options.json'),
require('./schemas/get-ledger.json'),
require('./schemas/get-orderbook.json'),
require('./schemas/get-orders.json'),

View File

@@ -0,0 +1,15 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "balance-sheet-options",
"description": "Options for getBalanceSheet",
"type": "object",
"properties": {
"excludeAddresses": {
"type": "array",
"items": {"$ref": "address"},
"uniqueItems": true
},
"ledgerVersion": {"$ref": "ledgerVersion"}
},
"additionalProperties": false
}

View File

@@ -0,0 +1,67 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "get-balance-sheet",
"description": "getBalanceSheet response",
"type": "object",
"properties": {
"balances": {
"type": "array",
"items": {
"type": "object",
"properties": {
"required": ["counterparty", "balances"],
"additionalProperties": false,
"counterparty": {"$ref": "address"},
"balances": {
"type": "array",
"items": {
"type": "object",
"properties": {
"required": ["currency", "value"],
"additionalProperties": false,
"currency": {"$ref": "currency"},
"value": {"$ref": "value"}
}
}
}
}
}
},
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"required": ["counterparty", "assets"],
"additionalProperties": false,
"counterparty": {"$ref": "address"},
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"required": ["currency", "value"],
"additionalProperties": false,
"currency": {"$ref": "currency"},
"value": {"$ref": "value"}
}
}
}
}
}
},
"obligations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"required": ["currency", "value"],
"additionalProperties": false,
"currency": {"$ref": "currency"},
"value": {"$ref": "value"}
}
}
}
},
"additionalProperties": false
}

View File

@@ -82,6 +82,7 @@ module.exports = {
getAccountInfoOptions: _.partial(validateOptions, 'settings-options'),
getTrustlinesOptions: _.partial(validateOptions, 'trustlines-options'),
getBalancesOptions: _.partial(validateOptions, 'trustlines-options'),
getBalanceSheetOptions: _.partial(validateOptions, 'balance-sheet-options'),
getOrdersOptions: _.partial(validateOptions, 'orders-options'),
getOrderbookOptions: _.partial(validateOptions, 'orders-options'),
getTransactionOptions: _.partial(validateOptions, 'transaction-options'),

View File

@@ -16,6 +16,7 @@ const getTransaction = require('./ledger/transaction');
const getTransactions = require('./ledger/transactions');
const getTrustlines = require('./ledger/trustlines');
const getBalances = require('./ledger/balances');
const getBalanceSheet = require('./ledger/balance-sheet');
const getPaths = require('./ledger/pathfind');
const getOrders = require('./ledger/orders');
const getOrderbook = require('./ledger/orderbook');
@@ -66,6 +67,7 @@ _.assign(RippleAPI.prototype, {
getTransactions,
getTrustlines,
getBalances,
getBalanceSheet,
getPaths,
getOrders,
getOrderbook,

View File

@@ -0,0 +1,69 @@
'use strict';
const _ = require('lodash');
const utils = require('./utils');
const validate = utils.common.validate;
const composeAsync = utils.common.composeAsync;
const convertErrors = utils.common.convertErrors;
function formatBalanceSheet({balances, obligations, assets}) {
const result = {};
if (!_.isUndefined(balances)) {
result.balances = Object.keys(balances).map((k) => {
return {
counterparty: k,
balances: balances[k]
};
});
}
if (!_.isUndefined(assets)) {
result.assets = Object.keys(assets).map((k) => {
return {
counterparty: k,
assets: assets[k]
};
});
}
if (!_.isUndefined(obligations)) {
result.obligations = Object.keys(obligations).map((k) => {
return {currency: k, value: obligations[k]};
});
}
return result;
}
function getBalanceSheetAsync(address, options, callback) {
validate.address(address);
validate.getBalanceSheetOptions(options);
const requestOptions = Object.assign({}, {
account: address,
strict: true,
hotwallet: options.excludeAddresses,
ledger: options.ledgerVersion
});
const requestCallback = composeAsync(
formatBalanceSheet, convertErrors(callback));
this.remote.getLedgerSequence((err, ledgerVersion) => {
if (err) {
callback(err);
return;
}
if (_.isUndefined(requestOptions.ledger)) {
requestOptions.ledger = ledgerVersion;
}
this.remote.requestGatewayBalances(requestOptions, requestCallback);
});
}
function getBalanceSheet(address: string, options = {}) {
return utils.promisify(getBalanceSheetAsync).call(this, address, options);
}
module.exports = getBalanceSheet;

View File

@@ -29,7 +29,6 @@ const orderbook = {
};
function checkResult(expected, schemaName, response) {
// console.log(JSON.stringify(response, null, 2));
assert.deepEqual(response, expected);
if (schemaName) {
schemaValidator.schemaValidate(schemaName, response);
@@ -202,6 +201,11 @@ describe('RippleAPI', function() {
_.partial(checkResult, responses.getBalances, 'getBalances'));
});
it('getBalanceSheet', function() {
return this.api.getBalanceSheet(address).then(
_.partial(checkResult, responses.getBalanceSheet, undefined));
});
describe('getTransaction', () => {
it('getTransaction - payment', function() {
return this.api.getTransaction(hashes.VALID_TRANSACTION_HASH).then(

View File

@@ -0,0 +1,68 @@
{
"balances": [
{
"counterparty": "rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ",
"balances": [
{
"currency": "EUR",
"value": "29826.1965999999"
},
{
"currency": "USD",
"value": "10.0"
}
]
},
{
"counterparty": "ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt",
"balances": [
{
"currency": "USD",
"value": "13857.70416"
}
]
}
],
"assets": [
{
"counterparty": "r9F6wk8HkXrgYWoJ7fsv4VrUBVoqDVtzkH",
"assets": [
{
"currency": "BTC",
"value": "5444166510000000e-26"
},
{
"currency": "USD",
"value": "100.0"
}
]
},
{
"counterparty": "rwmUaXsWtXU4Z843xSYwgt1is97bgY8yj6",
"assets": [
{
"currency": "BTC",
"value": "8700000000000000e-30"
}
]
}
],
"obligations": [
{
"currency": "BTC",
"value": "5908.324927635318"
},
{
"currency": "EUR",
"value": "992471.7419793958"
},
{
"currency": "GBP",
"value": "4991.38706013193"
},
{
"currency": "USD",
"value": "1997134.20229482"
}
]
}

View File

@@ -4,6 +4,7 @@ module.exports = {
generateAddress: require('./generate-address.json'),
getAccountInfo: require('./get-account-info.json'),
getBalances: require('./get-balances.json'),
getBalanceSheet: require('./get-balance-sheet.json'),
getOrderbook: require('./get-orderbook.json'),
getOrders: require('./get-orders.json'),
getPaths: {

View File

@@ -0,0 +1,52 @@
{
"id": 0,
"status": "success",
"type": "response",
"result": {
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"assets": {
"r9F6wk8HkXrgYWoJ7fsv4VrUBVoqDVtzkH": [
{
"currency": "BTC",
"value": "5444166510000000e-26"
},
{
"currency": "USD",
"value": "100.0"
}
],
"rwmUaXsWtXU4Z843xSYwgt1is97bgY8yj6": [
{
"currency": "BTC",
"value": "8700000000000000e-30"
}
]
},
"balances": {
"rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ": [
{
"currency": "EUR",
"value": "29826.1965999999"
},
{
"currency": "USD",
"value": "10.0"
}
],
"ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt": [
{
"currency": "USD",
"value": "13857.70416"
}
]
},
"obligations": {
"BTC": "5908.324927635318",
"EUR": "992471.7419793958",
"GBP": "4991.38706013193",
"USD": "1997134.20229482"
},
"ledger_current_index": 9592219,
"validated": true
}
}

View File

@@ -16,6 +16,7 @@ module.exports = {
},
account_offers: require('./account-offers'),
account_tx: require('./account-tx'),
balance_sheet: require('./balance-sheet'),
book_offers: require('./book-offers'),
server_info: require('./server-info'),
server_info_error: require('./server-info-error'),

View File

@@ -283,5 +283,9 @@ module.exports = function(port) {
setTimeout(() => conn.send(response), 20);
});
mock.on('request_gateway_balances', function(request, conn) {
conn.send(createResponse(request, fixtures.balance_sheet));
});
return mock;
};

View File

@@ -1966,7 +1966,7 @@ describe('Remote', function() {
});
});
it.only('Construct gateway_balances request', function() {
it('Construct gateway_balances request', function() {
const request = remote.requestGatewayBalances({
account: 'rGr9PjmVe7MqEXTSbd3njhgJc2s5vpHV54',
hotwallet: 'rwxBjBC9fPzyQ9GgPZw6YYLNeRTSx5',