mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-22 13:15:49 +00:00
79 lines
2.8 KiB
JavaScript
79 lines
2.8 KiB
JavaScript
/* @flow */
|
|
'use strict';
|
|
const _ = require('lodash');
|
|
const core = require('./utils').core;
|
|
const ValidationError = require('./errors').ValidationError;
|
|
const schemaValidate = require('./schema-validator').schemaValidate;
|
|
|
|
function error(text) {
|
|
return new ValidationError(text);
|
|
}
|
|
|
|
function validateAddressAndSecret(obj: {address: string, secret: string}): void {
|
|
const address = obj.address;
|
|
const secret = obj.secret;
|
|
schemaValidate('address', address);
|
|
if (!secret) {
|
|
throw error('Parameter missing: secret');
|
|
}
|
|
if (!core.Seed.from_json(secret).is_valid()) {
|
|
throw error('secret is invalid');
|
|
}
|
|
}
|
|
|
|
function validateSecret(secret: string): void {
|
|
if (!secret) {
|
|
throw error('Parameter missing: secret');
|
|
}
|
|
if (typeof secret !== 'string' || secret[0] !== 's') {
|
|
throw error('Invalid parameter');
|
|
}
|
|
|
|
const seed = new core.Seed().parse_base58(secret);
|
|
if (!seed.is_valid()) {
|
|
throw error('invalid seed');
|
|
}
|
|
}
|
|
|
|
function validateLedgerRange(options) {
|
|
if (!_.isUndefined(options.minLedgerVersion)
|
|
&& !_.isUndefined(options.maxLedgerVersion)) {
|
|
if (Number(options.minLedgerVersion) > Number(options.maxLedgerVersion)) {
|
|
throw error('minLedgerVersion must not be greater than maxLedgerVersion');
|
|
}
|
|
}
|
|
}
|
|
|
|
function validateOptions(schema, options) {
|
|
schemaValidate(schema, options);
|
|
validateLedgerRange(options);
|
|
}
|
|
|
|
module.exports = {
|
|
address: _.partial(schemaValidate, 'address'),
|
|
addressAndSecret: validateAddressAndSecret,
|
|
secret: validateSecret,
|
|
currency: _.partial(schemaValidate, 'currency'),
|
|
identifier: _.partial(schemaValidate, 'hash256'),
|
|
ledgerVersion: _.partial(schemaValidate, 'ledgerVersion'),
|
|
sequence: _.partial(schemaValidate, 'sequence'),
|
|
order: _.partial(schemaValidate, 'order'),
|
|
orderbook: _.partial(schemaValidate, 'orderbook'),
|
|
payment: _.partial(schemaValidate, 'payment'),
|
|
pathfind: _.partial(schemaValidate, 'pathfind'),
|
|
settings: _.partial(schemaValidate, 'settings'),
|
|
trustline: _.partial(schemaValidate, 'trustline'),
|
|
txJSON: _.partial(schemaValidate, 'tx'),
|
|
blob: _.partial(schemaValidate, 'blob'),
|
|
getTransactionsOptions: _.partial(validateOptions, 'transactions-options'),
|
|
getSettingsOptions: _.partial(validateOptions, 'settings-options'),
|
|
getAccountInfoOptions: _.partial(validateOptions, 'settings-options'),
|
|
getTrustlinesOptions: _.partial(validateOptions, 'trustlines-options'),
|
|
getBalancesOptions: _.partial(validateOptions, 'trustlines-options'),
|
|
getOrdersOptions: _.partial(validateOptions, 'orders-options'),
|
|
getOrderbookOptions: _.partial(validateOptions, 'orders-options'),
|
|
getTransactionOptions: _.partial(validateOptions, 'transaction-options'),
|
|
options: _.partial(validateOptions, 'options'),
|
|
instructions: _.partial(schemaValidate, 'instructions')
|
|
};
|