UNPKG

coinpayment-2.0

Version:

CoinPayments is a cloud wallet solution that offers an easy way to integrate a checkout system for numerous cryptocurrencies. Coinpayments now also offers coin conversion via Shapeshift.io.

72 lines (62 loc) 1.85 kB
import CoinpaymentsError from '../error' import schema from '../config/schema' const OR_OPERATOR = `|`; export default { getSchema: function(cmd) { return schema[cmd]; }, assertPayload: function(data) { const cmd = data.cmd; const payload = Object.assign({}, data); delete payload.cmd; if (!cmd) return new CoinpaymentsError(`No method passed`); const cmdSchema = this.getSchema(cmd); if (cmdSchema === undefined) return new CoinpaymentsError(`No such method ${cmd}`); let error = `Missing parameters: `; let isError = false; if (cmd === `create_mass_withdrawal`) { isError = !this.validateMassWithDrawal(payload); if (isError) { error = `Invalid mass withdrawal payload`; } return { isError, error }; } for (const key in cmdSchema) { if (isError) break; const rule = cmdSchema[key]; if (rule.indexOf(OR_OPERATOR) === -1) { isError = !this.hasOne(rule, payload); } else { isError = !this.xor(rule.split(OR_OPERATOR), payload); } if (isError) { error += `${rule}, `; } } if (isError) { error = new CoinpaymentsError(error.slice(0, -2)); } return { isError, error }; }, validateMassWithDrawal(payload) { const regex = /wd\[wd[0-9]*\]\[(amount|address|currency|dest_tag)\]/; for (const key in payload) { if (!regex.test(key)) return false; } return true; }, hasOne: function(rule, payload) { return payload[rule] !== undefined; }, xor: function(rules, payload) { let flag = false; for (const rule in rules) { if (payload[rules[rule]] !== undefined) { if (flag) return false; flag = true; } } return flag; } };