Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@serverless/utils

Package Overview
Dependencies
Maintainers
1
Versions
102
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@serverless/utils - npm Package Compare versions

Comparing version 6.8.1 to 6.8.2

41

auth/resolve-token.js
'use strict';
const _ = require('lodash');
const limit = require('ext/promise/limit').bind(Promise);
const jwtDecode = require('jwt-decode');

@@ -22,20 +23,25 @@ const fetch = require('node-fetch');

module.exports = async () => {
log.debug('cached data: %o, cached expires %d', data, idTokenExpiresAt);
if (!data.idToken) {
Object.assign(data, configUtils.get('auth'));
if (data.idToken) {
const idTokenData = jwtDecode(data.idToken);
log.debug('id token data: %o', idTokenData);
idTokenExpiresAt = idTokenData.exp * 1000;
}
const resolveTokenFromConfig = () => {
Object.assign(data, configUtils.get('auth'));
log.debug('resolved data from config: %o', data);
if (data.idToken) {
const idTokenData = jwtDecode(data.idToken);
idTokenExpiresAt = idTokenData.exp * 1000;
log.debug('id token: %o, expires %d', idTokenData, idTokenExpiresAt);
}
};
module.exports = limit(1, async function self() {
log.debug('start with cached data: %o, expires %d', data, idTokenExpiresAt);
if (!data.idToken) resolveTokenFromConfig();
if (data.idToken) {
if (idTokenExpiresAt > Date.now() + 500) {
log.debug('return valid token');
log.debug('valid token, return');
return data.idToken;
}
log.debug('token expired');
log.debug('token expired, clear, retrieve a new one');
configUtils.delete('auth.idToken');
idTokenExpiresAt = null;
delete data.idToken;
}

@@ -69,2 +75,8 @@ if (!data.refreshToken) Object.assign(data, configUtils.get('auth'));

if (response.status < 500) {
if (response.status === 401) {
// Possible race condition when two simultaneous processes are authenticating.
// Attempt to read auth data written by the other process and rely on it
resolveTokenFromConfig();
if (data.idToken) return self();
}
logout();

@@ -103,9 +115,12 @@ delete data.refreshToken;

}
data.idToken = idToken;
data.refreshToken = responseObject.refreshToken;
log.debug('new data: %o', data);
const idTokenData = jwtDecode(data.idToken);
log.debug('id token data: %o', idTokenData);
idTokenExpiresAt = idTokenData.exp * 1000;
log.debug('id token: %o, expires %d', idTokenData, idTokenExpiresAt);
configUtils.set({ auth: { idToken, refreshToken: responseObject.refreshToken } });
return idToken;
};
});

@@ -5,2 +5,14 @@ # Changelog

### [6.8.2](https://github.com/serverless/utils/compare/v6.8.1...v6.8.2) (2022-11-02)
### Bug Fixes
- **Auth:**
- Ensure no overlapping auth calls ([#192](https://github.com/serverless/utils/issues/192)) ([9b3376a](https://github.com/serverless/utils/commit/9b3376a4176f92f75457945d304b0db95107322b)) ([Mariusz Nowak](https://github.com/medikoo))
- Handle parallel processes race condition case ([#192](https://github.com/serverless/utils/issues/192)) ([0ac94af](https://github.com/serverless/utils/commit/0ac94af43edd13abffd96298108c8a4acf30aabe)) ([Mariusz Nowak](https://github.com/medikoo))
### Maintenance Improvements
- **Auth:** Improve debug logs ([#192](https://github.com/serverless/utils/issues/192)) ([f92091d](https://github.com/serverless/utils/commit/f92091d2c599efd433a7d396bdf316a16085a3ff))([Mariusz Nowak](https://github.com/medikoo))
### [6.8.1](https://github.com/serverless/utils/compare/v6.8.0...v6.8.1) (2022-10-26)

@@ -7,0 +19,0 @@

{
"name": "@serverless/utils",
"version": "6.8.1",
"version": "6.8.2",
"description": "Serverless CLI utilities",

@@ -5,0 +5,0 @@ "repository": "serverless/utils",

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