mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-12-06 17:27:59 +00:00
Add getBalanceSheet() to RippleAPI
This commit is contained in:
@@ -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'),
|
||||
|
||||
15
src/api/common/schemas/balance-sheet-options.json
Normal file
15
src/api/common/schemas/balance-sheet-options.json
Normal 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
|
||||
}
|
||||
67
src/api/common/schemas/get-balance-sheet.json
Normal file
67
src/api/common/schemas/get-balance-sheet.json
Normal 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
|
||||
}
|
||||
@@ -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'),
|
||||
|
||||
@@ -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,
|
||||
|
||||
69
src/api/ledger/balance-sheet.js
Normal file
69
src/api/ledger/balance-sheet.js
Normal 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;
|
||||
@@ -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(
|
||||
|
||||
68
test/fixtures/api/responses/get-balance-sheet.json
vendored
Normal file
68
test/fixtures/api/responses/get-balance-sheet.json
vendored
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
1
test/fixtures/api/responses/index.js
vendored
1
test/fixtures/api/responses/index.js
vendored
@@ -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: {
|
||||
|
||||
52
test/fixtures/api/rippled/balance-sheet.json
vendored
Normal file
52
test/fixtures/api/rippled/balance-sheet.json
vendored
Normal 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
|
||||
}
|
||||
}
|
||||
1
test/fixtures/api/rippled/index.js
vendored
1
test/fixtures/api/rippled/index.js
vendored
@@ -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'),
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user