All files / lib/client/strategies login.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 78                                                                                                                                                           
/**
 * @name login
 * @memberof strategies
 * @private
 */
import { merge } from 'ramda'
 
import session from '../../resources/session'
 
const buildSessionAuth = ({
  session_id: sessionId,
  impersonation_key: impersonationKey,
}, options) => merge(options, {
  body: {
    session_id: sessionId,
    impersonation_key: impersonationKey,
  },
})
 
/**
 * Creates a session in the server
 * and returns a Promise with the
 * pertinent object.
 * Allows setting the environment
 * to live passing `environment: "live"`.
 *
 * @param {any} { email, password, recaptchaToken, environment }
 * @returns {Promise} Resolves to an object
 *                    containing a body with
 *                    the desired `session_id`
 * @private
 */
function execute ({
  email,
  password,
  recaptchaToken,
  token,
  impersonationKey,
  environment,
  options,
  visitorID,
}) {
  const headers = environment === 'live'
    ? { 'X-Live': 1 }
    : {}
 
  if (visitorID) {
    headers.visitorID = visitorID
  }
 
  const opts = merge(options, {
    headers,
  })
 
  return session.create(opts, email, password, recaptchaToken, token)
    .then(sessionInfo => ({
      options: buildSessionAuth(merge(sessionInfo, {
        impersonation_key: impersonationKey,
      }), opts),
      authentication: sessionInfo,
    }))
}
 
/**
 * 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 }