2017-09-02 22:07:05 +00:00
"use strict" ;
var _ _awaiter = ( this && this . _ _awaiter ) || function ( thisArg , _arguments , P , generator ) {
return new ( P || ( P = Promise ) ) ( function ( resolve , reject ) {
function fulfilled ( value ) { try { step ( generator . next ( value ) ) ; } catch ( e ) { reject ( e ) ; } }
function rejected ( value ) { try { step ( generator [ "throw" ] ( value ) ) ; } catch ( e ) { reject ( e ) ; } }
function step ( result ) { result . done ? resolve ( result . value ) : new P ( function ( resolve ) { resolve ( result . value ) ; } ) . then ( fulfilled , rejected ) ; }
step ( ( generator = generator . apply ( thisArg , _arguments || [ ] ) ) . next ( ) ) ;
} ) ;
} ;
var _ _generator = ( this && this . _ _generator ) || function ( thisArg , body ) {
var _ = { label : 0 , sent : function ( ) { if ( t [ 0 ] & 1 ) throw t [ 1 ] ; return t [ 1 ] ; } , trys : [ ] , ops : [ ] } , f , y , t , g ;
return g = { next : verb ( 0 ) , "throw" : verb ( 1 ) , "return" : verb ( 2 ) } , typeof Symbol === "function" && ( g [ Symbol . iterator ] = function ( ) { return this ; } ) , g ;
function verb ( n ) { return function ( v ) { return step ( [ n , v ] ) ; } ; }
function step ( op ) {
if ( f ) throw new TypeError ( "Generator is already executing." ) ;
while ( _ ) try {
if ( f = 1 , y && ( t = y [ op [ 0 ] & 2 ? "return" : op [ 0 ] ? "throw" : "next" ] ) && ! ( t = t . call ( y , op [ 1 ] ) ) . done ) return t ;
if ( y = 0 , t ) op = [ 0 , t . value ] ;
switch ( op [ 0 ] ) {
case 0 : case 1 : t = op ; break ;
case 4 : _ . label ++ ; return { value : op [ 1 ] , done : false } ;
case 5 : _ . label ++ ; y = op [ 1 ] ; op = [ 0 ] ; continue ;
case 7 : op = _ . ops . pop ( ) ; _ . trys . pop ( ) ; continue ;
default :
if ( ! ( t = _ . trys , t = t . length > 0 && t [ t . length - 1 ] ) && ( op [ 0 ] === 6 || op [ 0 ] === 2 ) ) { _ = 0 ; continue ; }
if ( op [ 0 ] === 3 && ( ! t || ( op [ 1 ] > t [ 0 ] && op [ 1 ] < t [ 3 ] ) ) ) { _ . label = op [ 1 ] ; break ; }
if ( op [ 0 ] === 6 && _ . label < t [ 1 ] ) { _ . label = t [ 1 ] ; t = op ; break ; }
if ( t && _ . label < t [ 2 ] ) { _ . label = t [ 2 ] ; _ . ops . push ( op ) ; break ; }
if ( t [ 2 ] ) _ . ops . pop ( ) ;
_ . trys . pop ( ) ; continue ;
}
op = body . call ( thisArg , _ ) ;
} catch ( e ) { op = [ 6 , e ] ; y = 0 ; } finally { f = t = 0 ; }
if ( op [ 0 ] & 5 ) throw op [ 1 ] ; return { value : op [ 0 ] ? op [ 1 ] : void 0 , done : true } ;
}
} ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
var axios _1 = require ( "axios" ) ;
var types _1 = require ( "./types" ) ;
var auth _1 = require ( "./services/auth" ) ; // <- maybe this is where you pass in the platform paramter, specifying if it is for a browser or for React Native
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Pure Redux actions:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exports . registrationRequestSent = function ( ) { return ( {
type : types _1 . REGISTRATION _REQUEST _SENT ,
} ) ; } ;
exports . registrationRequestSucceeded = function ( userAttributes ) { return ( {
type : types _1 . REGISTRATION _REQUEST _SUCCEEDED ,
payload : {
userAttributes : userAttributes ,
} ,
} ) ; } ;
exports . registrationRequestFailed = function ( ) { return ( {
type : types _1 . REGISTRATION _REQUEST _FAILED ,
} ) ; } ;
exports . verifyTokenRequestSent = function ( ) { return ( {
type : types _1 . VERIFY _TOKEN _REQUEST _SENT ,
} ) ; } ;
exports . verifyTokenRequestSucceeded = function ( userAttributes ) { return ( {
type : types _1 . VERIFY _TOKEN _REQUEST _SUCCEEDED ,
payload : {
userAttributes : userAttributes ,
} ,
} ) ; } ;
exports . verifyTokenRequestFailed = function ( ) { return ( {
type : types _1 . VERIFY _TOKEN _REQUEST _FAILED ,
} ) ; } ;
exports . signInRequestSent = function ( ) { return ( {
type : types _1 . SIGNIN _REQUEST _SENT ,
} ) ; } ;
exports . signInRequestSucceeded = function ( userAttributes ) { return ( {
type : types _1 . SIGNIN _REQUEST _SUCCEEDED ,
payload : {
userAttributes : userAttributes ,
} ,
} ) ; } ;
exports . signInRequestFailed = function ( ) { return ( {
type : types _1 . SIGNIN _REQUEST _FAILED ,
} ) ; } ;
exports . signOutRequestSent = function ( ) { return ( {
type : types _1 . SIGNOUT _REQUEST _SENT ,
} ) ; } ;
exports . signOutRequestSucceeded = function ( ) { return ( {
type : types _1 . SIGNOUT _REQUEST _SUCCEEDED ,
} ) ; } ;
exports . signOutRequestFailed = function ( ) { return ( {
type : types _1 . SIGNOUT _REQUEST _FAILED ,
} ) ; } ;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Async Redux Thunk actions:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2017-09-04 00:20:23 +00:00
// what is the second argument here? it needs to contain configs for (1) userRegistrationDetails, (2) userAttributes, (3) maybe even the authUrl... just make it a simple one-argument function
// we'll also want the userAttributes to pertain to the end-user's initial state and heaven forbid reducers
// actually, userSignInCredentials, userSignOutCredentials, and verificationParams are always the same as per devise token auth
// const config = {
// authUrl: 'http://url.com',
// userAttributes: {
// firstName: 'name' // <- key is how the frontend knows it, value is how the backend knows it
// },
// userRegistrationAttributes: { <- this is for keys/vals IN ADDITION TO email, password and passwordConfirmation
// firstName: 'name'
// },
// }
2017-09-04 01:03:46 +00:00
// extract this service somewhere and unit test it:
2017-09-04 00:20:23 +00:00
var invertHash = function ( hash ) {
var newHash = { } ;
for ( var key in hash ) {
var val = hash [ key ] ;
newHash [ val ] = key ;
}
return newHash ;
} ;
2017-09-04 01:03:46 +00:00
// extract this service somewhere and unit test it:
var getUserAttributesFromResponse = function ( userAttributes , response ) {
var invertedUserAttributes = invertHash ( userAttributes ) ;
var userAttributesBackendKeys = Object . keys ( invertedUserAttributes ) ;
var userAttributesToReturn = { } ;
Object . keys ( response . data . data ) . forEach ( function ( key ) {
if ( userAttributesBackendKeys . indexOf ( key ) !== - 1 ) {
userAttributesToReturn [ invertedUserAttributes [ key ] ] = response . data . data [ key ] ;
}
} ) ;
return userAttributesToReturn ;
} ;
2017-09-04 00:20:23 +00:00
var generateAuthActions = function ( config ) {
var authUrl = config . authUrl , userAttributes = config . userAttributes , userRegistrationAttributes = config . userRegistrationAttributes ;
2017-09-02 22:07:05 +00:00
var registerUser = function ( userRegistrationDetails ) { return function ( dispatch ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
2017-09-04 01:03:46 +00:00
var email , password , passwordConfirmation , data , response , userAttributesToSave , error _1 ;
2017-09-02 22:07:05 +00:00
return _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 :
dispatch ( exports . registrationRequestSent ( ) ) ;
2017-09-04 00:20:23 +00:00
email = userRegistrationDetails . email , password = userRegistrationDetails . password , passwordConfirmation = userRegistrationDetails . passwordConfirmation ;
data = {
email : email ,
password : password ,
password _confirmation : passwordConfirmation ,
} ;
Object . keys ( userRegistrationAttributes ) . forEach ( function ( key ) {
var backendKey = userRegistrationAttributes [ key ] ;
data [ backendKey ] = userRegistrationDetails [ key ] ;
} ) ;
2017-09-02 22:07:05 +00:00
_a . label = 1 ;
case 1 :
_a . trys . push ( [ 1 , 3 , , 4 ] ) ;
return [ 4 /*yield*/ , axios _1 . default ( {
method : 'POST' ,
url : authUrl ,
2017-09-04 00:20:23 +00:00
data : data ,
2017-09-02 22:07:05 +00:00
} ) ] ;
case 2 :
2017-09-04 01:03:46 +00:00
response = _a . sent ( ) ;
auth _1 . setAuthHeaders ( response . headers ) ;
2017-09-04 00:20:23 +00:00
// Have to check what type of platform it is, depending on the key provided by the end-user... like "browser", "iphone", or "android", etc.:
2017-09-04 01:03:46 +00:00
auth _1 . persistAuthHeadersInLocalStorage ( response . headers ) ;
userAttributesToSave = getUserAttributesFromResponse ( userAttributes , response ) ;
dispatch ( exports . registrationRequestSucceeded ( userAttributesToSave ) ) ; // <- need to make this reducer more flexible
2017-09-02 22:07:05 +00:00
return [ 3 /*break*/ , 4 ] ;
case 3 :
error _1 = _a . sent ( ) ;
dispatch ( exports . registrationRequestFailed ( ) ) ;
throw error _1 ;
case 4 : return [ 2 /*return*/ ] ;
}
} ) ;
} ) ;
} ; } ;
var verifyToken = function ( verificationParams ) { return function ( dispatch ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
2017-09-04 01:03:46 +00:00
var response , userAttributesToSave , error _2 ;
2017-09-02 22:07:05 +00:00
return _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 :
dispatch ( exports . verifyTokenRequestSent ( ) ) ;
_a . label = 1 ;
case 1 :
_a . trys . push ( [ 1 , 3 , , 4 ] ) ;
return [ 4 /*yield*/ , axios _1 . default ( {
method : 'GET' ,
url : authUrl + "/validate_token" ,
params : verificationParams ,
} ) ] ;
case 2 :
response = _a . sent ( ) ;
auth _1 . setAuthHeaders ( response . headers ) ;
2017-09-04 01:03:46 +00:00
// Have to check what type of platform it is, depending on the key provided by the end-user... like "browser", "iphone", or "android", etc.:
2017-09-02 22:07:05 +00:00
auth _1 . persistAuthHeadersInLocalStorage ( response . headers ) ;
2017-09-04 01:03:46 +00:00
userAttributesToSave = getUserAttributesFromResponse ( userAttributes , response ) ;
dispatch ( exports . verifyTokenRequestSucceeded ( userAttributesToSave ) ) ;
2017-09-02 22:07:05 +00:00
return [ 3 /*break*/ , 4 ] ;
case 3 :
error _2 = _a . sent ( ) ;
dispatch ( exports . verifyTokenRequestFailed ( ) ) ;
return [ 3 /*break*/ , 4 ] ;
case 4 : return [ 2 /*return*/ ] ;
}
} ) ;
} ) ;
} ; } ;
var signInUser = function ( userSignInCredentials ) { return function ( dispatch ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
2017-09-04 01:03:46 +00:00
var email , password , response , userAttributesToSave , error _3 ;
2017-09-02 22:07:05 +00:00
return _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 :
dispatch ( exports . signInRequestSent ( ) ) ;
email = userSignInCredentials . email , password = userSignInCredentials . password ;
_a . label = 1 ;
case 1 :
_a . trys . push ( [ 1 , 3 , , 4 ] ) ;
return [ 4 /*yield*/ , axios _1 . default ( {
method : 'POST' ,
url : authUrl + "/sign_in" ,
data : {
email : email ,
password : password ,
} ,
} ) ] ;
case 2 :
response = _a . sent ( ) ;
auth _1 . setAuthHeaders ( response . headers ) ;
2017-09-04 01:03:46 +00:00
// Have to check what type of platform it is, depending on the key provided by the end-user... like "browser", "iphone", or "android", etc.:
2017-09-02 22:07:05 +00:00
auth _1 . persistAuthHeadersInLocalStorage ( response . headers ) ;
2017-09-04 01:03:46 +00:00
userAttributesToSave = getUserAttributesFromResponse ( userAttributes , response ) ;
dispatch ( exports . signInRequestSucceeded ( userAttributesToSave ) ) ;
2017-09-02 22:07:05 +00:00
return [ 3 /*break*/ , 4 ] ;
case 3 :
error _3 = _a . sent ( ) ;
dispatch ( exports . signInRequestFailed ( ) ) ;
throw error _3 ;
case 4 : return [ 2 /*return*/ ] ;
}
} ) ;
} ) ;
} ; } ;
var signOutUser = function ( userSignOutCredentials ) { return function ( dispatch ) {
return _ _awaiter ( this , void 0 , void 0 , function ( ) {
var error _4 ;
return _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 :
dispatch ( exports . signOutRequestSent ( ) ) ;
_a . label = 1 ;
case 1 :
_a . trys . push ( [ 1 , 3 , , 4 ] ) ;
return [ 4 /*yield*/ , axios _1 . default ( {
method : 'DELETE' ,
url : authUrl + "/sign_out" ,
data : userSignOutCredentials ,
} ) ] ;
case 2 :
_a . sent ( ) ;
auth _1 . deleteAuthHeaders ( ) ;
2017-09-04 01:03:46 +00:00
// Have to check what type of platform it is, depending on the key provided by the end-user... like "browser", "iphone", or "android", etc.:
2017-09-02 22:07:05 +00:00
auth _1 . deleteAuthHeadersFromLocalStorage ( ) ;
dispatch ( exports . signOutRequestSucceeded ( ) ) ;
return [ 3 /*break*/ , 4 ] ;
case 3 :
error _4 = _a . sent ( ) ;
dispatch ( exports . signOutRequestFailed ( ) ) ;
throw error _4 ;
case 4 : return [ 2 /*return*/ ] ;
}
} ) ;
} ) ;
} ; } ;
2017-09-04 01:03:46 +00:00
var verifyCredentials = function ( store ) {
// Gotta check what the platform is:
if ( localStorage . getItem ( 'access-token' ) ) {
var verificationParams = {
'access-token' : localStorage . getItem ( 'access-token' ) ,
client : localStorage . getItem ( 'client' ) ,
uid : localStorage . getItem ( 'uid' ) ,
} ;
store . dispatch ( verifyToken ( verificationParams ) ) ;
}
} ;
2017-09-02 22:07:05 +00:00
return {
registerUser : registerUser ,
verifyToken : verifyToken ,
signInUser : signInUser ,
signOutUser : signOutUser ,
2017-09-04 01:03:46 +00:00
verifyCredentials : verifyCredentials ,
2017-09-02 22:07:05 +00:00
} ;
} ;
2017-09-03 13:50:52 +00:00
exports . default = generateAuthActions ;
2017-09-02 22:07:05 +00:00
//# sourceMappingURL=actions.js.map