All files / lib/client/strategies api.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 56 57 58 59 60 61 62 63 64 65 66 67 68                                                                                                                                       
/**
 * @name api
 * @memberof strategies
 * @private
 */
import { dissocPath, merge, path } from 'ramda'
import paymentLinks from '../../resources/paymentLinks'
 
const getErrorMessage = path(['response', 'errors', '0', 'message'])
/**
 * Creates an object with
 * the `api_key` from
 * the supplied `options` param
 *
 * @param {any} options
 * @returns {Object} an object containing
 *                   a body property with
 *                   the desired `api_key
 * @private
 */
function execute (opts) {
  const { api_key: apiKey, options } = opts
  const body = {
    body: {
      api_key: apiKey,
      count: 1,
    },
  }
  if (options && options.baseURL) {
    body.baseURL = options.baseURL
  }
  return paymentLinks.all(body)
    .catch((error) => {
      if (opts.skipAuthentication) { return }
      if (getErrorMessage(error) === 'api_key inválida') {
        throw new Error('You must supply a valid API key')
      }
      if (error.name === 'ApiError') {
        throw error
      }
 
      // eslint-disable-next-line no-console
      console.warn(`Warning: Could not verify key. Pagar.me may be offline ${error.name}`)
    })
    .then(() => merge(dissocPath(['body', 'count'], body), opts.options))
    .then(requestOpts => ({
      authentication: { api_key: apiKey },
      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,
}