All files / lib/client/strategies sessionId.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 69 70 71 72 73 74 75 76 77                                                                                                                                                         
/**
 * @name sessionId
 * @memberof strategies
 * @private
 */
import { reject, resolve } from 'bluebird'
import { merge } from 'ramda'
import transactions from '../../resources/transactions'
 
/**
 * Creates an object with
 * the `session_id` from
 * the supplied `options` param
 *
 * @param {any} options
 * @returns {Object} an object containing
 *                   a body property with
 *                   the desired `session_id`
 * @private
 */
function execute ({
  session_id: sessionId,
  environment,
  impersonationKey,
  options,
  skipAuthentication,
  visitorID,
}) {
  const headers = environment === 'live'
    ? { 'X-Live': 1 }
    : {}
 
  if (visitorID) {
    headers.visitorID = visitorID
  }
 
  const body = {
    session_id: sessionId,
  }
 
  if (impersonationKey) {
    body.impersonation_key = impersonationKey
  }
 
  const opts = merge(options, {
    body,
    headers,
  })
 
  return transactions.calculateInstallmentsAmount(
    opts, { amount: 1, interest_rate: 100 }
  )
    .catch(error => (skipAuthentication ? resolve(opts) : reject(error)))
    .catch({ name: 'ApiError' }, () => reject(new Error('You must supply a valid session id')))
    .then(() => ({
      authentication: { session_id: sessionId },
      options: opts,
    }))
}
 
/**
 * 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,
}