From 323e402e0cff66d5453ec7571ca2203759d34d38 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Tue, 22 Sep 2015 06:55:51 -0700 Subject: [PATCH 1/7] Add requestGatewayBalances() to core --- src/core/remote.js | 23 +++++++++++++++++++++++ test/remote-test.js | 16 ++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/core/remote.js b/src/core/remote.js index 7268c7ad..fff2fb92 100644 --- a/src/core/remote.js +++ b/src/core/remote.js @@ -2280,6 +2280,29 @@ Remote.prototype.requestConnect = function(ip, port, callback) { return request; }; +Remote.prototype.requestGatewayBalances = function(options, callback) { + assert(_.isObject(options), 'Options missing'); + assert(options.account, 'Account missing'); + + const request = new Request(this, 'gateway_balances'); + + request.message.account = UInt160.json_rewrite(options.account); + + if (!_.isUndefined(options.hotwallet)) { + request.message.hotwallet = options.hotwallet; + } + if (!_.isUndefined(options.strict)) { + request.message.strict = options.strict; + } + if (!_.isUndefined(options.ledger)) { + request.selectLedger(options.ledger); + } + + request.callback(callback); + + return request; +}; + /** * Create a Transaction * diff --git a/test/remote-test.js b/test/remote-test.js index f44c91e2..81ae697c 100644 --- a/test/remote-test.js +++ b/test/remote-test.js @@ -1966,6 +1966,22 @@ describe('Remote', function() { }); }); + it.only('Construct gateway_balances request', function() { + const request = remote.requestGatewayBalances({ + account: 'rGr9PjmVe7MqEXTSbd3njhgJc2s5vpHV54', + hotwallet: 'rwxBjBC9fPzyQ9GgPZw6YYLNeRTSx5', + strict: true + }); + + assert.deepEqual(request.message, { + command: 'gateway_balances', + id: undefined, + account: 'rGr9PjmVe7MqEXTSbd3njhgJc2s5vpHV54', + hotwallet: 'rwxBjBC9fPzyQ9GgPZw6YYLNeRTSx5', + strict: true + }); + }); + it('Construct Payment transaction', function() { const tx = remote.createTransaction('Payment', { account: TX_JSON.Account, From 806a4e823f7543cd5989850dbf7c61ba201522c5 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Tue, 22 Sep 2015 07:59:27 -0700 Subject: [PATCH 2/7] Add getBalanceSheet() to RippleAPI --- src/api/common/schema-validator.js | 2 + .../common/schemas/balance-sheet-options.json | 15 ++++ src/api/common/schemas/get-balance-sheet.json | 67 ++++++++++++++++++ src/api/common/validate.js | 1 + src/api/index.js | 2 + src/api/ledger/balance-sheet.js | 69 +++++++++++++++++++ test/api-test.js | 6 +- .../api/responses/get-balance-sheet.json | 68 ++++++++++++++++++ test/fixtures/api/responses/index.js | 1 + test/fixtures/api/rippled/balance-sheet.json | 52 ++++++++++++++ test/fixtures/api/rippled/index.js | 1 + test/mock-rippled.js | 4 ++ test/remote-test.js | 2 +- 13 files changed, 288 insertions(+), 2 deletions(-) create mode 100644 src/api/common/schemas/balance-sheet-options.json create mode 100644 src/api/common/schemas/get-balance-sheet.json create mode 100644 src/api/ledger/balance-sheet.js create mode 100644 test/fixtures/api/responses/get-balance-sheet.json create mode 100644 test/fixtures/api/rippled/balance-sheet.json diff --git a/src/api/common/schema-validator.js b/src/api/common/schema-validator.js index db4f99db..0f16470c 100644 --- a/src/api/common/schema-validator.js +++ b/src/api/common/schema-validator.js @@ -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'), diff --git a/src/api/common/schemas/balance-sheet-options.json b/src/api/common/schemas/balance-sheet-options.json new file mode 100644 index 00000000..85a8547c --- /dev/null +++ b/src/api/common/schemas/balance-sheet-options.json @@ -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 +} diff --git a/src/api/common/schemas/get-balance-sheet.json b/src/api/common/schemas/get-balance-sheet.json new file mode 100644 index 00000000..bca25cfb --- /dev/null +++ b/src/api/common/schemas/get-balance-sheet.json @@ -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 +} diff --git a/src/api/common/validate.js b/src/api/common/validate.js index 3c700080..ce5f2d2e 100644 --- a/src/api/common/validate.js +++ b/src/api/common/validate.js @@ -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'), diff --git a/src/api/index.js b/src/api/index.js index 0fc6ee5c..d5a6b983 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -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, diff --git a/src/api/ledger/balance-sheet.js b/src/api/ledger/balance-sheet.js new file mode 100644 index 00000000..626c71ef --- /dev/null +++ b/src/api/ledger/balance-sheet.js @@ -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; diff --git a/test/api-test.js b/test/api-test.js index 16a8fc6a..d14ebd36 100644 --- a/test/api-test.js +++ b/test/api-test.js @@ -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( diff --git a/test/fixtures/api/responses/get-balance-sheet.json b/test/fixtures/api/responses/get-balance-sheet.json new file mode 100644 index 00000000..d5d8473c --- /dev/null +++ b/test/fixtures/api/responses/get-balance-sheet.json @@ -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" + } + ] +} diff --git a/test/fixtures/api/responses/index.js b/test/fixtures/api/responses/index.js index 5080660a..0770fd6f 100644 --- a/test/fixtures/api/responses/index.js +++ b/test/fixtures/api/responses/index.js @@ -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: { diff --git a/test/fixtures/api/rippled/balance-sheet.json b/test/fixtures/api/rippled/balance-sheet.json new file mode 100644 index 00000000..26b5518d --- /dev/null +++ b/test/fixtures/api/rippled/balance-sheet.json @@ -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 + } +} diff --git a/test/fixtures/api/rippled/index.js b/test/fixtures/api/rippled/index.js index fdac6f4e..b9c66381 100644 --- a/test/fixtures/api/rippled/index.js +++ b/test/fixtures/api/rippled/index.js @@ -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'), diff --git a/test/mock-rippled.js b/test/mock-rippled.js index 3db74eb6..b50796b6 100644 --- a/test/mock-rippled.js +++ b/test/mock-rippled.js @@ -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; }; diff --git a/test/remote-test.js b/test/remote-test.js index 81ae697c..4307cf5c 100644 --- a/test/remote-test.js +++ b/test/remote-test.js @@ -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', From 772f79ae21371e137095e90ae7e3a72f812e2244 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Mon, 5 Oct 2015 12:16:25 -0700 Subject: [PATCH 3/7] Update schema --- src/api/common/schemas/get-balance-sheet.json | 22 +++++++++---------- src/api/ledger/balance-sheet.js | 21 +++++------------- test/api-test.js | 2 +- 3 files changed, 18 insertions(+), 27 deletions(-) diff --git a/src/api/common/schemas/get-balance-sheet.json b/src/api/common/schemas/get-balance-sheet.json index bca25cfb..5e3a9a21 100644 --- a/src/api/common/schemas/get-balance-sheet.json +++ b/src/api/common/schemas/get-balance-sheet.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "title": "get-balance-sheet", + "title": "getBalanceSheet", "description": "getBalanceSheet response", "type": "object", "properties": { @@ -8,17 +8,17 @@ "type": "array", "items": { "type": "object", + "required": ["counterparty", "balances"], + "additionalProperties": false, "properties": { - "required": ["counterparty", "balances"], - "additionalProperties": false, "counterparty": {"$ref": "address"}, "balances": { "type": "array", "items": { "type": "object", + "required": ["currency", "value"], + "additionalProperties": false, "properties": { - "required": ["currency", "value"], - "additionalProperties": false, "currency": {"$ref": "currency"}, "value": {"$ref": "value"} } @@ -31,17 +31,17 @@ "type": "array", "items": { "type": "object", + "required": ["counterparty", "assets"], + "additionalProperties": false, "properties": { - "required": ["counterparty", "assets"], - "additionalProperties": false, "counterparty": {"$ref": "address"}, "assets": { "type": "array", "items": { "type": "object", + "required": ["currency", "value"], + "additionalProperties": false, "properties": { - "required": ["currency", "value"], - "additionalProperties": false, "currency": {"$ref": "currency"}, "value": {"$ref": "value"} } @@ -54,9 +54,9 @@ "type": "array", "items": { "type": "object", + "required": ["currency", "value"], + "additionalProperties": false, "properties": { - "required": ["currency", "value"], - "additionalProperties": false, "currency": {"$ref": "currency"}, "value": {"$ref": "value"} } diff --git a/src/api/ledger/balance-sheet.js b/src/api/ledger/balance-sheet.js index 626c71ef..8709dec3 100644 --- a/src/api/ledger/balance-sheet.js +++ b/src/api/ledger/balance-sheet.js @@ -10,25 +10,16 @@ function formatBalanceSheet({balances, obligations, assets}) { const result = {}; if (!_.isUndefined(balances)) { - result.balances = Object.keys(balances).map((k) => { - return { - counterparty: k, - balances: balances[k] - }; - }); + result.balances = _.map(balances, (balances, counterparty) => + ({counterparty, balances})); } if (!_.isUndefined(assets)) { - result.assets = Object.keys(assets).map((k) => { - return { - counterparty: k, - assets: assets[k] - }; - }); + result.assets = _.map(assets, (assets, counterparty) => + ({counterparty, assets})); } if (!_.isUndefined(obligations)) { - result.obligations = Object.keys(obligations).map((k) => { - return {currency: k, value: obligations[k]}; - }); + result.obligations = _.map(obligations, (value, currency) => + ({currency, value})); } return result; diff --git a/test/api-test.js b/test/api-test.js index d14ebd36..53fc4370 100644 --- a/test/api-test.js +++ b/test/api-test.js @@ -203,7 +203,7 @@ describe('RippleAPI', function() { it('getBalanceSheet', function() { return this.api.getBalanceSheet(address).then( - _.partial(checkResult, responses.getBalanceSheet, undefined)); + _.partial(checkResult, responses.getBalanceSheet, 'getBalanceSheet')); }); describe('getTransaction', () => { From 78eeb4032266fe2f75a4043ff2cc9432a3be94a6 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Mon, 5 Oct 2015 12:20:15 -0700 Subject: [PATCH 4/7] Change rippled test fixture name --- .../api/rippled/{balance-sheet.json => gateway-balances.json} | 0 test/fixtures/api/rippled/index.js | 2 +- test/mock-rippled.js | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename test/fixtures/api/rippled/{balance-sheet.json => gateway-balances.json} (100%) diff --git a/test/fixtures/api/rippled/balance-sheet.json b/test/fixtures/api/rippled/gateway-balances.json similarity index 100% rename from test/fixtures/api/rippled/balance-sheet.json rename to test/fixtures/api/rippled/gateway-balances.json diff --git a/test/fixtures/api/rippled/index.js b/test/fixtures/api/rippled/index.js index b9c66381..a8ca70e4 100644 --- a/test/fixtures/api/rippled/index.js +++ b/test/fixtures/api/rippled/index.js @@ -16,7 +16,7 @@ module.exports = { }, account_offers: require('./account-offers'), account_tx: require('./account-tx'), - balance_sheet: require('./balance-sheet'), + gateway_balances: require('./gateway-balances'), book_offers: require('./book-offers'), server_info: require('./server-info'), server_info_error: require('./server-info-error'), diff --git a/test/mock-rippled.js b/test/mock-rippled.js index b50796b6..ce5abc0c 100644 --- a/test/mock-rippled.js +++ b/test/mock-rippled.js @@ -284,7 +284,7 @@ module.exports = function(port) { }); mock.on('request_gateway_balances', function(request, conn) { - conn.send(createResponse(request, fixtures.balance_sheet)); + conn.send(createResponse(request, fixtures.gateway_balances)); }); return mock; From 607777f2a316a79809d3b62eb9c36630abff9013 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Mon, 5 Oct 2015 12:30:41 -0700 Subject: [PATCH 5/7] Lint --- src/api/ledger/balance-sheet.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/api/ledger/balance-sheet.js b/src/api/ledger/balance-sheet.js index 8709dec3..54d75176 100644 --- a/src/api/ledger/balance-sheet.js +++ b/src/api/ledger/balance-sheet.js @@ -6,19 +6,19 @@ const validate = utils.common.validate; const composeAsync = utils.common.composeAsync; const convertErrors = utils.common.convertErrors; -function formatBalanceSheet({balances, obligations, assets}) { +function formatBalanceSheet(balanceSheet) { const result = {}; - if (!_.isUndefined(balances)) { - result.balances = _.map(balances, (balances, counterparty) => + if (!_.isUndefined(balanceSheet.balances)) { + result.balances = _.map(balanceSheet.balances, (balances, counterparty) => ({counterparty, balances})); } - if (!_.isUndefined(assets)) { - result.assets = _.map(assets, (assets, counterparty) => + if (!_.isUndefined(balanceSheet.assets)) { + result.assets = _.map(balanceSheet.assets, (assets, counterparty) => ({counterparty, assets})); } - if (!_.isUndefined(obligations)) { - result.obligations = _.map(obligations, (value, currency) => + if (!_.isUndefined(balanceSheet.obligations)) { + result.obligations = _.map(balanceSheet.obligations, (value, currency) => ({currency, value})); } From ff2ac6c3cda0dfe97fe45c51351978cf0b68e3e6 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Mon, 5 Oct 2015 13:09:04 -0700 Subject: [PATCH 6/7] Format balancesheet schema --- src/api/common/schemas/get-balance-sheet.json | 32 ++------- src/api/ledger/balance-sheet.js | 16 +++-- .../api/responses/get-balance-sheet.json | 70 ++++++++----------- 3 files changed, 46 insertions(+), 72 deletions(-) diff --git a/src/api/common/schemas/get-balance-sheet.json b/src/api/common/schemas/get-balance-sheet.json index 5e3a9a21..f8b3e934 100644 --- a/src/api/common/schemas/get-balance-sheet.json +++ b/src/api/common/schemas/get-balance-sheet.json @@ -8,22 +8,12 @@ "type": "array", "items": { "type": "object", - "required": ["counterparty", "balances"], + "required": ["counterparty", "currency", "value"], "additionalProperties": false, "properties": { "counterparty": {"$ref": "address"}, - "balances": { - "type": "array", - "items": { - "type": "object", - "required": ["currency", "value"], - "additionalProperties": false, - "properties": { - "currency": {"$ref": "currency"}, - "value": {"$ref": "value"} - } - } - } + "currency": {"$ref": "currency"}, + "value": {"$ref": "value"} } } }, @@ -31,22 +21,12 @@ "type": "array", "items": { "type": "object", - "required": ["counterparty", "assets"], + "required": ["counterparty", "currency", "value"], "additionalProperties": false, "properties": { "counterparty": {"$ref": "address"}, - "assets": { - "type": "array", - "items": { - "type": "object", - "required": ["currency", "value"], - "additionalProperties": false, - "properties": { - "currency": {"$ref": "currency"}, - "value": {"$ref": "value"} - } - } - } + "currency": {"$ref": "currency"}, + "value": {"$ref": "value"} } } }, diff --git a/src/api/ledger/balance-sheet.js b/src/api/ledger/balance-sheet.js index 54d75176..608ae508 100644 --- a/src/api/ledger/balance-sheet.js +++ b/src/api/ledger/balance-sheet.js @@ -10,12 +10,20 @@ function formatBalanceSheet(balanceSheet) { const result = {}; if (!_.isUndefined(balanceSheet.balances)) { - result.balances = _.map(balanceSheet.balances, (balances, counterparty) => - ({counterparty, balances})); + result.balances = []; + _.forEach(balanceSheet.balances, (balances, counterparty) => { + _.forEach(balances, (balance) => { + result.balances.push(Object.assign({counterparty}, balance)); + }); + }); } if (!_.isUndefined(balanceSheet.assets)) { - result.assets = _.map(balanceSheet.assets, (assets, counterparty) => - ({counterparty, assets})); + result.assets = []; + _.forEach(balanceSheet.assets, (assets, counterparty) => { + _.forEach(assets, (balance) => { + result.assets.push(Object.assign({counterparty}, balance)); + }); + }); } if (!_.isUndefined(balanceSheet.obligations)) { result.obligations = _.map(balanceSheet.obligations, (value, currency) => diff --git a/test/fixtures/api/responses/get-balance-sheet.json b/test/fixtures/api/responses/get-balance-sheet.json index d5d8473c..650f07c3 100644 --- a/test/fixtures/api/responses/get-balance-sheet.json +++ b/test/fixtures/api/responses/get-balance-sheet.json @@ -1,51 +1,37 @@ { "balances": [ { - "counterparty": "rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ", - "balances": [ - { - "currency": "EUR", - "value": "29826.1965999999" - }, - { - "currency": "USD", - "value": "10.0" - } - ] - }, - { - "counterparty": "ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt", - "balances": [ - { - "currency": "USD", - "value": "13857.70416" - } - ] - } + "counterparty": "rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ", + "currency": "EUR", + "value": "29826.1965999999" + }, + { + "counterparty": "rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ", + "currency": "USD", + "value": "10.0" + }, + { + "counterparty": "ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt", + "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" - } - ] - } + "counterparty": "r9F6wk8HkXrgYWoJ7fsv4VrUBVoqDVtzkH", + "currency": "BTC", + "value": "5444166510000000e-26" + }, + { + "counterparty": "r9F6wk8HkXrgYWoJ7fsv4VrUBVoqDVtzkH", + "currency": "USD", + "value": "100.0" + }, + { + "counterparty": "rwmUaXsWtXU4Z843xSYwgt1is97bgY8yj6", + "currency": "BTC", + "value": "8700000000000000e-30" + } ], "obligations": [ { From 64baef431df9b1ee0a5a9f7b4b0f4187f9746583 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Mon, 5 Oct 2015 13:37:55 -0700 Subject: [PATCH 7/7] Use amount schema --- src/api/common/schemas/get-balance-sheet.json | 22 ++----------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/src/api/common/schemas/get-balance-sheet.json b/src/api/common/schemas/get-balance-sheet.json index f8b3e934..5d74494a 100644 --- a/src/api/common/schemas/get-balance-sheet.json +++ b/src/api/common/schemas/get-balance-sheet.json @@ -6,29 +6,11 @@ "properties": { "balances": { "type": "array", - "items": { - "type": "object", - "required": ["counterparty", "currency", "value"], - "additionalProperties": false, - "properties": { - "counterparty": {"$ref": "address"}, - "currency": {"$ref": "currency"}, - "value": {"$ref": "value"} - } - } + "items": {"$ref": "amount"} }, "assets": { "type": "array", - "items": { - "type": "object", - "required": ["counterparty", "currency", "value"], - "additionalProperties": false, - "properties": { - "counterparty": {"$ref": "address"}, - "currency": {"$ref": "currency"}, - "value": {"$ref": "value"} - } - } + "items": {"$ref": "amount"} }, "obligations": { "type": "array",