New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@mendeley/api

Package Overview
Dependencies
Maintainers
2
Versions
40
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mendeley/api - npm Package Compare versions

Comparing version 6.1.0 to 6.1.1

8

lib/auth/authenticated-flow.js
'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
};
};

51

lib/auth/client-credentials-flow.js

@@ -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 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc