UNPKG

react-devise-facebook-encore

Version:

A simple package to interact with Facebook LogIn API

214 lines (182 loc) 5.93 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.destroyUser = exports.editUser = exports.updateUser = exports.resetPassword = exports.requestResetPassword = exports.requestReconfirm = exports.confirm = exports.logout = exports.providerLogin = exports.login = exports.signUp = undefined; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _api = require('./api'); var _errors = require('../errors'); var _authTokenStore = require('./authTokenStore'); var _index = require('../config/index'); var ROUTES = { login: { method: 'POST', path: 'sign_in' }, signUp: { method: 'POST', path: null }, confirm: { method: 'GET', path: 'confirmation' }, resetPassword: { method: 'POST', path: 'password' }, changePassword: { method: 'PATCH', path: 'password' }, editRegistration: { method: 'GET', path: 'edit' }, updateRegistration: { method: 'PATCH', path: null }, destroyRegistration: { method: 'DELETE', path: null }, requestReconfirm: { method: 'POST', path: 'confirmation' } }; var ensureValid = function ensureValid(response) { if (response.status === 422) { return response.json().then(function (_ref) { var errors = _ref.errors; throw new _errors.ValidationError(errors); }); } return response; }; var fetch = function fetch(route, data) { var _getConfig = (0, _index.getConfig)(), _getConfig$apiHost = _getConfig.apiHost, apiHost = _getConfig$apiHost === undefined ? '' : _getConfig$apiHost, apiResourceName = _getConfig.apiResourceName; // Render uri with any params, and remove those params from the data payload. var uri = [apiHost, apiResourceName, route.path].join('/'); Object.keys(data).forEach(function (param) { var regex = new RegExp('/:' + param + '(/|$)', 'g'); if (uri.match(regex)) { uri = uri.replace(regex, '/' + data[param]); delete data[param]; } }); return (0, _api.fetchJSON)(uri, { method: route.method, data: data }); }; var fetchWithUserForm = function fetchWithUserForm(route, data) { // eslint-disable-line camelcase return fetch(route, { user: data }).then(ensureValid); }; var tryLoggedIn = function tryLoggedIn(response, dispatch) { var auth = response.headers.get('Authorization'); if (auth) { var _auth$split = auth.split(' '), _auth$split2 = _slicedToArray(_auth$split, 2), _ = _auth$split2[0], authToken = _auth$split2[1]; // eslint-disable-line no-unused-vars if (authToken) { (0, _authTokenStore.setAuthToken)(authToken); dispatch({ type: 'LOGGED_IN', payload: authToken }); } } return response; }; var signUp = function signUp(data, dispatch) { return fetchWithUserForm(ROUTES.signUp, data).then(function (response) { return tryLoggedIn(response, dispatch); }); }; var doLogin = function doLogin(data, dispatch, _ref2) { var route = _ref2.route, fetchFunc = _ref2.fetchFunc; dispatch({ type: 'LOGGING_IN' }); return fetchFunc(route, data).then(function (response) { if (response.status === 401) { dispatch({ type: 'LOGIN_FAILED' }); throw new _errors.UnauthorizedError(); } return tryLogin(response, dispatch); }); }; var login = function login(data, dispatch) { return doLogin(data, dispatch, { route: ROUTES.login, fetchFunc: fetchWithUserForm }); }; var providerLogin = function providerLogin(data, dispatch, providerRoute) { return doLogin(data, dispatch, { route: providerRoute, fetchFunc: fetch }); }; var confirm = function confirm(token) { return fetch(ROUTES.confirm, { confirmation_token: token // eslint-disable-line camelcase }); }; var requestReconfirm = function requestReconfirm(data) { return fetchWithUserForm(ROUTES.requestReconfirm, data); }; var requestResetPassword = function requestResetPassword(data) { return fetchWithUserForm(ROUTES.resetPassword, data); }; var resetPassword = function resetPassword(data) { return fetchWithUserForm(ROUTES.changePassword, data); }; var editUser = function editUser() { return fetch(ROUTES.editRegistration); }; var updateUser = function updateUser(data, dispatch) { return fetchWithUserForm(ROUTES.updateRegistration, data).then(function (response) { if (response.status === 401) { throw new _errors.UnauthorizedError(); } return tryLoggedIn(response, dispatch); }); }; var logout = function logout(dispatch) { (0, _authTokenStore.removeAuthToken)(); dispatch({ type: 'LOG_OUT' }); }; var destroyUser = function destroyUser(data, dispatch) { return fetchWithUserForm(ROUTES.destroyRegistration, data).then(function (response) { if (response.status === 401) { throw new _errors.UnauthorizedError(); } return logout(dispatch); }); }; exports.signUp = signUp; exports.login = login; exports.providerLogin = providerLogin; exports.logout = logout; exports.confirm = confirm; exports.requestReconfirm = requestReconfirm; exports.requestResetPassword = requestResetPassword; exports.resetPassword = resetPassword; exports.updateUser = updateUser; exports.editUser = editUser; exports.destroyUser = destroyUser;