All files / lib/client/strategies encryption.js

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55                                                                                                             
/**
 * @name encryption
 * @memberof strategies
 * @private
 */
import { reject, resolve } from 'bluebird'
import { merge } from 'ramda'
import transactions from '../../resources/transactions'
 
/**
 * Creates an object with
 * the `encryption_key` from
 * the supplied `options` param
 *
 * @param {any} options
 * @returns {Object} an object containing
 *                   a body property with
 *                   the desired `encryption_key`
 * @private
 */
function execute (opts) {
  const { encryption_key: encryptionKey, options } = opts
  const payload = merge({
    body: {
      encryption_key: encryptionKey,
    },
  }, options && options.baseURL ? { baseURL: options.baseURL } : {})
 
  return transactions.calculateInstallmentsAmount(payload, { amount: 1, interest_rate: 100 })
    .catch(error => (opts.skipAuthentication ? resolve(opts.options) : reject(error)))
    .catch(err => err.name === 'ApiError', () => reject(new Error('You must supply a valid encryption key')))
    .then(merge(payload))
    .then(requestOpts => ({
      authentication: { encryption_key: encryptionKey },
      options: requestOpts,
    }))
}
 
/**
 * Returns the supplied parameter with
 * the `execute` function added to it.
 *
 * @param {any} options
 * @returns {Object} The `options` parameter
 *                   with `execute` add to it
 * @private
 */
function build (options) {
  return merge(options, { execute: execute.bind(null, options) })
}
 
export default {
  build,
}