react-oauth2-code-pkce
Version:
Provider agnostic react package for OAuth2 Authorization Code flow with PKCE
35 lines (34 loc) • 1.58 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.epochAtSecondsFromNow = exports.FALLBACK_EXPIRE_TIME = void 0;
exports.epochTimeIsPast = epochTimeIsPast;
exports.getRefreshExpiresIn = getRefreshExpiresIn;
exports.FALLBACK_EXPIRE_TIME = 600; // 10minutes
// Returns epoch time (in seconds) for when the token will expire
// 'secondsFromNow' should always be an integer, but some auth providers has decided that whole numbers should be strings...
const epochAtSecondsFromNow = (secondsFromNow) => Math.round(Date.now() / 1000 + Number(secondsFromNow));
exports.epochAtSecondsFromNow = epochAtSecondsFromNow;
/**
* Check if the Access Token has expired.
* Will return True if the token has expired, OR there is less than 30 seconds until it expires.
*/
function epochTimeIsPast(timestamp) {
const now = Math.round(Date.now()) / 1000;
const nowWithBuffer = now + 30;
return nowWithBuffer >= timestamp;
}
const refreshExpireKeys = [
'refresh_expires_in', // KeyCloak
'refresh_token_expires_in', // Azure AD
];
function getRefreshExpiresIn(tokenExpiresIn, response) {
for (const key of refreshExpireKeys) {
if (key in response)
return response[key];
}
// If the response has a refresh_token, but no expire_time. Assume it's at least 10m longer than access_token's expire
if (response.refresh_token)
return tokenExpiresIn + exports.FALLBACK_EXPIRE_TIME;
// The token response had no refresh_token. Set refresh_expire equals to access_token expire
return tokenExpiresIn;
}
;