oidc-client
Version:
OpenID Connect (OIDC) & OAuth2 client library
74 lines (61 loc) • 2.82 kB
JavaScript
// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
import { Log } from './Log.js';
import { Timer } from './Timer.js';
const DefaultAccessTokenExpiringNotificationTime = 60; // seconds
export class AccessTokenEvents {
constructor({
accessTokenExpiringNotificationTime = DefaultAccessTokenExpiringNotificationTime,
accessTokenExpiringTimer = new Timer("Access token expiring"),
accessTokenExpiredTimer = new Timer("Access token expired")
} = {}) {
this._accessTokenExpiringNotificationTime = accessTokenExpiringNotificationTime;
this._accessTokenExpiring = accessTokenExpiringTimer;
this._accessTokenExpired = accessTokenExpiredTimer;
}
load(container) {
// only register events if there's an access token and it has an expiration
if (container.access_token && container.expires_in !== undefined) {
let duration = container.expires_in;
Log.debug("AccessTokenEvents.load: access token present, remaining duration:", duration);
if (duration > 0) {
// only register expiring if we still have time
let expiring = duration - this._accessTokenExpiringNotificationTime;
if (expiring <= 0){
expiring = 1;
}
Log.debug("AccessTokenEvents.load: registering expiring timer in:", expiring);
this._accessTokenExpiring.init(expiring);
}
else {
Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration.");
this._accessTokenExpiring.cancel();
}
// if it's negative, it will still fire
let expired = duration + 1;
Log.debug("AccessTokenEvents.load: registering expired timer in:", expired);
this._accessTokenExpired.init(expired);
}
else {
this._accessTokenExpiring.cancel();
this._accessTokenExpired.cancel();
}
}
unload() {
Log.debug("AccessTokenEvents.unload: canceling existing access token timers");
this._accessTokenExpiring.cancel();
this._accessTokenExpired.cancel();
}
addAccessTokenExpiring(cb) {
this._accessTokenExpiring.addHandler(cb);
}
removeAccessTokenExpiring(cb) {
this._accessTokenExpiring.removeHandler(cb);
}
addAccessTokenExpired(cb) {
this._accessTokenExpired.addHandler(cb);
}
removeAccessTokenExpired(cb) {
this._accessTokenExpired.removeHandler(cb);
}
}