@dbg-riskit/angular-auth
Version:
90 lines • 11.7 kB
JavaScript
import { __decorate } from "tslib";
import { Injectable } from '@angular/core';
import { LocalStorage } from '@dbg-riskit/common';
import { JwtHelper } from './jwt.helper';
import * as i0 from "@angular/core";
import * as i1 from "@dbg-riskit/common";
export class AuthStorageService {
constructor(logger) {
this.logger = logger;
}
syncTime() {
const now = Math.floor((new Date().valueOf()) / 1000);
const computeDiff = (token, currDiff = 0) => {
if (token) {
const tokenData = JwtHelper.decodeToken(token);
if (tokenData.iat) {
const diff = tokenData.iat - now;
if (Math.abs(diff) > Math.abs(currDiff)) {
return diff;
}
}
}
return currDiff;
};
this._timeSyncDiff = computeDiff(this.idToken);
this._timeSyncDiff = computeDiff(this.accessToken, this._timeSyncDiff);
this._timeSyncDiff = computeDiff(this.refreshToken, this._timeSyncDiff);
this._timeSyncDiff = Math.floor(this._timeSyncDiff || 0);
}
get exp() {
const computeExpiration = (token, date = null) => {
if (token) {
const tokenExp = JwtHelper.getTokenExpirationDate(token);
if (date == null || tokenExp == null) {
return tokenExp;
}
if (date > tokenExp) {
return tokenExp;
}
}
return date;
};
let exp = computeExpiration(this.idToken);
exp = computeExpiration(this.accessToken, exp);
return computeExpiration(this.refreshToken, exp);
}
get refresh_in() {
const exp = this.exp;
const now = new Date();
if (!exp) {
return 1;
}
const syncDiff = this._timeSyncDiff || 0;
const expFromNow = Math.floor((exp.valueOf() - now.valueOf()) / 1000) - syncDiff;
const refreshIn = expFromNow - 60; // Refresh at least a minute before
this.logger.info(`Tokens will refresh in ${refreshIn}s.`);
return refreshIn > 0 ? (refreshIn * 1000) : 1;
}
clear() {
this.idToken = null;
this.accessToken = null;
this.refreshToken = null;
this._timeSyncDiff = null;
this.nonce = null;
}
}
AuthStorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: AuthStorageService, deps: [{ token: i1.Logger }], target: i0.ɵɵFactoryTarget.Injectable });
AuthStorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: AuthStorageService });
__decorate([
LocalStorage('id_token', 'auth')
], AuthStorageService.prototype, "idToken", void 0);
__decorate([
LocalStorage('access_token', 'auth')
], AuthStorageService.prototype, "accessToken", void 0);
__decorate([
LocalStorage('refresh_token', 'auth')
], AuthStorageService.prototype, "refreshToken", void 0);
__decorate([
LocalStorage('sync_diff', 'auth')
], AuthStorageService.prototype, "_timeSyncDiff", void 0);
__decorate([
LocalStorage('nonce', 'auth')
], AuthStorageService.prototype, "nonce", void 0);
__decorate([
LocalStorage('req_path', 'auth')
], AuthStorageService.prototype, "authRequestedPath", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: AuthStorageService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.Logger }]; }, propDecorators: { idToken: [], accessToken: [], refreshToken: [], _timeSyncDiff: [], nonce: [], authRequestedPath: [] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWF1dGgvc3JjL2xpYi9hdXRoLnN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsWUFBWSxFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBRS9ELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7OztBQUd2QyxNQUFNLE9BQU8sa0JBQWtCO0lBb0IzQixZQUFvQyxNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNsRCxDQUFDO0lBRU0sUUFBUTtRQUNYLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFvQixFQUFFLFFBQVEsR0FBRyxDQUFDLEVBQVUsRUFBRTtZQUMvRCxJQUFJLEtBQUssRUFBRTtnQkFDUCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2YsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7b0JBQ2pDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNyQyxPQUFPLElBQUksQ0FBQztxQkFDZjtpQkFDSjthQUNKO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENB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LENBQUM7aURBQ0Q7QUFHN0I7SUFEQyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQzs2REFDUTsyRkFsQmhDLGtCQUFrQjtrQkFEOUIsVUFBVTs2RkFJQSxPQUFPLE1BR1AsV0FBVyxNQUdYLFlBQVksTUFHWCxhQUFhLE1BR2QsS0FBSyxNQUdMLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TG9jYWxTdG9yYWdlLCBMb2dnZXIsIE1heWJlfSBmcm9tICdAZGJnLXJpc2tpdC9jb21tb24nO1xuXG5pbXBvcnQge0p3dEhlbHBlcn0gZnJvbSAnLi9qd3QuaGVscGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhTdG9yYWdlU2VydmljZSB7XG5cbiAgICBATG9jYWxTdG9yYWdlKCdpZF90b2tlbicsICdhdXRoJylcbiAgICBwdWJsaWMgaWRUb2tlbj86IHN0cmluZyB8IG51bGw7XG5cbiAgICBATG9jYWxTdG9yYWdlKCdhY2Nlc3NfdG9rZW4nLCAnYXV0aCcpXG4gICAgcHVibGljIGFjY2Vzc1Rva2VuPzogc3RyaW5nIHwgbnVsbDtcblxuICAgIEBMb2NhbFN0b3JhZ2UoJ3JlZnJlc2hfdG9rZW4nLCAnYXV0aCcpXG4gICAgcHVibGljIHJlZnJlc2hUb2tlbj86IHN0cmluZyB8IG51bGw7XG5cbiAgICBATG9jYWxTdG9yYWdlKCdzeW5jX2RpZmYnLCAnYXV0aCcpXG4gICAgcHJpdmF0ZSBfdGltZVN5bmNEaWZmPzogbnVtYmVyIHwgbnVsbDtcblxuICAgIEBMb2NhbFN0b3JhZ2UoJ25vbmNlJywgJ2F1dGgnKVxuICAgIHB1YmxpYyBub25jZT86IHN0cmluZyB8IG51bGw7XG5cbiAgICBATG9jYWxTdG9yYWdlKCdyZXFfcGF0aCcsICdhdXRoJylcbiAgICBwdWJsaWMgYXV0aFJlcXVlc3RlZFBhdGg/OiBzdHJpbmcgfCBudWxsO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXIpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3luY1RpbWUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoKG5ldyBEYXRlKCkudmFsdWVPZigpKSAvIDEwMDApO1xuICAgICAgICBjb25zdCBjb21wdXRlRGlmZiA9ICh0b2tlbjogTWF5YmU8c3RyaW5nPiwgY3VyckRpZmYgPSAwKTogbnVtYmVyID0+IHtcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuRGF0YSA9IEp3dEhlbHBlci5kZWNvZGVUb2tlbih0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuRGF0YS5pYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IHRva2VuRGF0YS5pYXQgLSBub3c7XG4gICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhkaWZmKSA+IE1hdGguYWJzKGN1cnJEaWZmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VyckRpZmY7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fdGltZVN5bmNEaWZmID0gY29tcHV0ZURpZmYodGhpcy5pZFRva2VuKTtcbiAgICAgICAgdGhpcy5fdGltZVN5bmNEaWZmID0gY29tcHV0ZURpZmYodGhpcy5hY2Nlc3NUb2tlbiwgdGhpcy5fdGltZVN5bmNEaWZmKTtcbiAgICAgICAgdGhpcy5fdGltZVN5bmNEaWZmID0gY29tcHV0ZURpZmYodGhpcy5yZWZyZXNoVG9rZW4sIHRoaXMuX3RpbWVTeW5jRGlmZik7XG4gICAgICAgIHRoaXMuX3RpbWVTeW5jRGlmZiA9IE1hdGguZmxvb3IodGhpcy5fdGltZVN5bmNEaWZmIHx8IDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGV4cCgpOiBEYXRlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVFeHBpcmF0aW9uID0gKHRva2VuOiBNYXliZTxzdHJpbmc+LCBkYXRlOiBEYXRlIHwgbnVsbCA9IG51bGwpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbkV4cCA9IEp3dEhlbHBlci5nZXRUb2tlbkV4cGlyYXRpb25EYXRlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZSA9PSBudWxsIHx8IHRva2VuRXhwID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuRXhwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkYXRlID4gdG9rZW5FeHApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuRXhwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBleHAgPSBjb21wdXRlRXhwaXJhdGlvbih0aGlzLmlkVG9rZW4pO1xuICAgICAgICBleHAgPSBjb21wdXRlRXhwaXJhdGlvbih0aGlzLmFjY2Vzc1Rva2VuLCBleHApO1xuICAgICAgICByZXR1cm4gY29tcHV0ZUV4cGlyYXRpb24odGhpcy5yZWZyZXNoVG9rZW4sIGV4cCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWZyZXNoX2luKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGV4cCA9IHRoaXMuZXhwO1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBpZiAoIWV4cCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzeW5jRGlmZiA9IHRoaXMuX3RpbWVTeW5jRGlmZiB8fCAwO1xuXG4gICAgICAgIGNvbnN0IGV4cEZyb21Ob3cgPSBNYXRoLmZsb29yKChleHAudmFsdWVPZigpIC0gbm93LnZhbHVlT2YoKSkgLyAxMDAwKSAtIHN5bmNEaWZmO1xuICAgICAgICBjb25zdCByZWZyZXNoSW4gPSBleHBGcm9tTm93IC0gNjA7IC8vIFJlZnJlc2ggYXQgbGVhc3QgYSBtaW51dGUgYmVmb3JlXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oYFRva2VucyB3aWxsIHJlZnJlc2ggaW4gJHtyZWZyZXNoSW59cy5gKTtcblxuICAgICAgICByZXR1cm4gcmVmcmVzaEluID4gMCA/IChyZWZyZXNoSW4gKiAxMDAwKSA6IDE7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmlkVG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLl90aW1lU3luY0RpZmYgPSBudWxsO1xuICAgICAgICB0aGlzLm5vbmNlID0gbnVsbDtcbiAgICB9XG59XG4iXX0=