@serverless/utils
Advanced tools
Comparing version 6.8.1 to 6.8.2
'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", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
199827
3801