ripple/ripple-rest

View on GitHub
api/settings.js

Summary

Maintainability
A
35 mins
Test Coverage
/* eslint-disable valid-jsdoc */
'use strict';
var _ = require('lodash');
var utils = require('./lib/utils');
var TxToRestConverter = require('./lib/tx-to-rest-converter.js');
var validate = require('./lib/validate');
var createSettingsTransaction =
  require('./transaction').createSettingsTransaction;
var constants = require('./lib/constants');
var transact = require('./transact');

function parseFieldsFromResponse(responseBody, fields) {
  var parsedBody = {};

  for (var fieldName in fields) {
    var field = fields[fieldName];
    var value = responseBody[fieldName] || '';
    if (field.encoding === 'hex' && !field.length) {
      value = new Buffer(value, 'hex').toString('ascii');
    }
    parsedBody[field.name] = value;
  }

  return parsedBody;
}

/**
 * Retrieves account settings for a given account
 *
 * @url
 * @param {String} request.params.account
 *
 */
function getSettings(account, callback) {
  validate.address(account);

  this.remote.requestAccountInfo({account: account}, function(error, info) {
    if (error) {
      return callback(error);
    }

    var data = info.account_data;
    var settings = {
      account: data.Account,
      transfer_rate: '0'
    };

    // Attach account flags
    _.extend(settings, TxToRestConverter.parseFlagsFromResponse(data.Flags,
      constants.AccountRootFlags));

    // Attach account fields
    _.extend(settings, parseFieldsFromResponse(data,
      constants.AccountRootFields));

    settings.transaction_sequence = String(settings.transaction_sequence);

    callback(null, {settings: settings});
  });
}

/**
 * Change account settings
 *
 * @body
 * @param {Settings} request.body.settings
 * @param {String} request.body.secret
 *
 * @query
 * @param {String "true"|"false"} request.query.validated Used to force request
 *     to wait until rippled has finished validating the submitted transaction
 *
 */
function changeSettings(account, settings, secret, options, callback) {
  var transaction = createSettingsTransaction(account, settings);
  var converter = _.partial(
    TxToRestConverter.parseSettingsResponseFromTx, settings);
  transact(transaction, this, secret, options, converter, callback);
}

module.exports = {
  get: getSettings,
  change: utils.wrapCatch(changeSettings)
};