@mendeley/api
Advanced tools
Comparing version 6.1.0 to 6.1.1
'use strict'; | ||
var noop = require('./noop'); | ||
module.exports = function authenticatedFlow(token) { | ||
return { | ||
authenticate: function() { | ||
throw new Error('Cannot authenticate'); | ||
}, | ||
getToken: function() { | ||
return token; | ||
} | ||
}, | ||
refreshToken: noop | ||
}; | ||
}; |
@@ -18,3 +18,6 @@ 'use strict'; | ||
onAccessToken: noop, | ||
onNotAuthenticated: noop | ||
onNotAuthenticated: function() { | ||
// Client credentials auth flow only refreshes | ||
throw new Error('Cannot authenticate'); | ||
} | ||
}, options); | ||
@@ -27,28 +30,28 @@ | ||
return { | ||
authenticate: settings.onNotAuthenticated, | ||
getToken: function () { | ||
return settings.accessToken; | ||
}, | ||
refreshToken: function () { | ||
return axios.post(settings.tokenUrl, formUrlEncoded({ | ||
'grant_type': 'client_credentials', | ||
'client_id': settings.clientId, | ||
'client_secret': settings.clientSecret, | ||
'redirect_uri': settings.redirectUri, | ||
'scope': settings.scope | ||
})) | ||
.then(function (result) { | ||
/*jshint camelcase: false */ | ||
var expiresIn = result.data.expires_in * 1000; | ||
authenticate: settings.onNotAuthenticated, | ||
getToken: function () { | ||
return settings.accessToken; | ||
}, | ||
refreshToken: function () { | ||
return axios.post(settings.tokenUrl, formUrlEncoded({ | ||
'grant_type': 'client_credentials', | ||
'client_id': settings.clientId, | ||
'client_secret': settings.clientSecret, | ||
'redirect_uri': settings.redirectUri, | ||
'scope': settings.scope | ||
})) | ||
.then(function (result) { | ||
/*jshint camelcase: false */ | ||
var expiresIn = result.data.expires_in * 1000; | ||
settings.accessToken = result.data.access_token; | ||
settings.onAccessToken(settings.accessToken, expiresIn); | ||
settings.accessToken = result.data.access_token; | ||
settings.onAccessToken(settings.accessToken, expiresIn); | ||
return { | ||
accessToken: settings.accessToken, | ||
expiresIn: expiresIn | ||
}; | ||
}); | ||
} | ||
return { | ||
accessToken: settings.accessToken, | ||
expiresIn: expiresIn | ||
}; | ||
}); | ||
} | ||
}; | ||
}; |
'use strict'; | ||
var noop = require('./noop'); | ||
function wrap (auth) { | ||
if (!auth.authenticate) { | ||
auth.authenticate = noop; | ||
} | ||
if (!auth.getToken) { | ||
auth.getToken = noop; | ||
} | ||
if (!auth.refreshToken) { | ||
auth.refreshToken = noop; | ||
} | ||
return auth; | ||
} | ||
module.exports = { | ||
implicitGrantFlow: wrap(require('./implicit-grant-flow')), | ||
authCodeFlow: wrap(require('./auth-code-flow')), | ||
authenticatedFlow: wrap(require('./authenticated-flow')), | ||
clientCredentialsFlow: wrap(require('./client-credentials-flow')), | ||
refreshTokenFlow: wrap(require('./refresh-token-flow')) | ||
implicitGrantFlow: require('./implicit-grant-flow'), | ||
authCodeFlow: require('./auth-code-flow'), | ||
authenticatedFlow: require('./authenticated-flow'), | ||
clientCredentialsFlow: require('./client-credentials-flow'), | ||
refreshTokenFlow: require('./refresh-token-flow') | ||
}; |
@@ -62,3 +62,3 @@ 'use strict'; | ||
function onFail(error) { | ||
if(!error.response) { | ||
if (!error.response) { | ||
throw error; | ||
@@ -130,2 +130,11 @@ } | ||
var promise = refresh | ||
// If fails then we need to re-authenticate | ||
.catch(function(refreshError) { | ||
try { | ||
this.settings.authFlow.authenticate(); | ||
} catch(authenticationError) { | ||
// If authenticate throws, we want to propagate the refresh error | ||
throw refreshError; | ||
} | ||
}.bind(this)) | ||
// If OK update the access token and re-send the request | ||
@@ -138,10 +147,2 @@ .then(function() { | ||
return this.send(); | ||
}.bind(this)) | ||
// If fails then we need to re-authenticate | ||
.catch(function(response) { | ||
if (response.status === 401) { | ||
return this.settings.authFlow.authenticate(); | ||
} | ||
throw response; | ||
}.bind(this)); | ||
@@ -148,0 +149,0 @@ |
{ | ||
"name": "@mendeley/api", | ||
"version": "6.1.0", | ||
"version": "6.1.1", | ||
"description": "Mendeley API JavaScript SDK", | ||
@@ -5,0 +5,0 @@ "directories": { |
@@ -28,3 +28,3 @@ 'use strict'; | ||
getToken: function() { return fakeToken; }, | ||
authenticate: function() { return false; }, | ||
authenticate: function() {}, | ||
refreshToken: function () { return false; } | ||
@@ -39,3 +39,3 @@ }; | ||
getToken: function() { return fakeToken; }, | ||
authenticate: function() { return false; }, | ||
authenticate: function() { throw new Error('Cannot authenticate'); }, | ||
refreshToken: function() { | ||
@@ -54,3 +54,3 @@ fakeToken = 'auth-refreshed'; | ||
getToken: function() { return fakeToken; }, | ||
authenticate: function() { return false; }, | ||
authenticate: function() {}, | ||
refreshToken: function() { | ||
@@ -57,0 +57,0 @@ return new Bluebird(function (resolve) { |
@@ -92,6 +92,6 @@ 'use strict'; | ||
var ajaxSpy = spyOn(axios, 'request').and.callFake(fun); | ||
var authRefreshSpy = spyOn(mockAuthInterface, 'refreshToken').and.returnValue(Bluebird.reject({ status: 401 })); | ||
var authRefreshSpy = spyOn(mockAuthInterface, 'refreshToken').and.returnValue(Bluebird.reject({ status: 500 })); | ||
var authAuthenticateSpy = spyOn(mockAuthInterface, 'authenticate').and.callThrough(); | ||
myRequest.send().then(function() { | ||
myRequest.send().catch(function() { | ||
expect(ajaxSpy.calls.count()).toEqual(1); | ||
@@ -147,2 +147,15 @@ expect(authRefreshSpy.calls.count()).toEqual(1); | ||
}); | ||
it('should propagate the refresh error if authenticate throws', function(done) { | ||
var refreshError = new Error('refresh error'); | ||
var mockAuthInterface = mockAuth.mockAuthCodeFlow(); | ||
var myRequest = request.create({ method: 'get' }, { authFlow: mockAuthInterface }); | ||
spyOn(axios, 'request').and.returnValue(Bluebird.reject({ response: { status: 401 } })); | ||
spyOn(mockAuthInterface, 'refreshToken').and.returnValue(Bluebird.reject(refreshError)); | ||
myRequest.send().catch(function(caughtError) { | ||
expect(refreshError).toEqual(caughtError); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
@@ -149,0 +162,0 @@ |
1495480
14851