@progress-chef/platform-http-interceptor 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LocalStorageService, StorageKeys } from '@progress-chef/platform-storage-service';
|
|
2
|
-
import { catchError, throwError } from 'rxjs';
|
|
2
|
+
import { catchError, throwError, timer } from 'rxjs';
|
|
3
3
|
import { Injectable } from '@angular/core';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/router";
|
|
@@ -13,13 +13,8 @@ export class HttpAuthInterceptor {
|
|
|
13
13
|
this.authTokenSet = new Set();
|
|
14
14
|
this.isSessionExpired = false;
|
|
15
15
|
}
|
|
16
|
-
// private currentBaseUrlFromLocalStorage: string = 'currentServerBaseUrl';
|
|
17
|
-
// private refreshTokenExpireTimeStorageKey: string = 'refreshTokenExpireTime';
|
|
18
16
|
intercept(request, next) {
|
|
19
|
-
|
|
20
|
-
if (getRefreshTokenHalfTime) {
|
|
21
|
-
this.manageTokenRefresh();
|
|
22
|
-
}
|
|
17
|
+
this.triggerRefreshTokenTimer();
|
|
23
18
|
let authToken = LocalStorageService.getItem(StorageKeys.AUTH_TOKEN);
|
|
24
19
|
let authReq = request;
|
|
25
20
|
if (authToken) {
|
|
@@ -72,101 +67,17 @@ export class HttpAuthInterceptor {
|
|
|
72
67
|
return throwError(() => error);
|
|
73
68
|
}));
|
|
74
69
|
}
|
|
75
|
-
manageRefreshTokenExpireTime() {
|
|
76
|
-
const newExpireTime = this.getExpireAtTime();
|
|
77
|
-
const { halfwayTimeString } = this.handleCalulateHalfTime(newExpireTime);
|
|
78
|
-
LocalStorageService.setItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME, halfwayTimeString);
|
|
79
|
-
}
|
|
80
|
-
manageTokenRefresh() {
|
|
81
|
-
const { isHalfTimeGreater } = this.checkHalfTimeIsGreater();
|
|
82
|
-
if (isHalfTimeGreater) {
|
|
83
|
-
this.refreshToken();
|
|
84
|
-
this.manageRefreshTokenExpireTime();
|
|
85
|
-
// const newExpireTime = this.getExpireAtTime()
|
|
86
|
-
// const { halfwayTimeString } = this.handleCalulateHalfTime(newExpireTime)
|
|
87
|
-
// localStorage.setItem(this.refreshTokenExpireTimeStorageKey, halfwayTimeString)
|
|
88
|
-
// LocalStorageService.setItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME, halfwayTimeString)
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
70
|
refreshToken() {
|
|
92
|
-
// const baseUrl: string = localStorage.getItem(this.currentBaseUrlFromLocalStorage) as string;
|
|
93
71
|
const baseUrl = LocalStorageService.getItem(StorageKeys.CURRENT_SERVER_BASE_URL);
|
|
94
72
|
if (!baseUrl)
|
|
95
73
|
throw new Error('The backend or server base URL is missing in Local Storage');
|
|
96
74
|
this.refreshTokenService.refreshToken({ platformServiceApiBaseUrls: baseUrl });
|
|
97
75
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}, 2000);
|
|
104
|
-
console.log('======= check is token availabe --------', isIdentityToken);
|
|
105
|
-
if (!isIdentityToken)
|
|
106
|
-
throw new Error('identity token is missing in the local storage');
|
|
107
|
-
const { expireAt } = isIdentityToken;
|
|
108
|
-
const date = new Date(expireAt * 1000);
|
|
109
|
-
const hours = date.getUTCHours().toString().padStart(2, '0');
|
|
110
|
-
const minutes = date.getUTCMinutes().toString().padStart(2, '0');
|
|
111
|
-
const seconds = date.getUTCSeconds().toString().padStart(2, '0');
|
|
112
|
-
const latestRefreshTokenExpireTime = `${hours}:${minutes}:${seconds}`; //10:00:00
|
|
113
|
-
return latestRefreshTokenExpireTime;
|
|
114
|
-
}
|
|
115
|
-
getCurrentTime() {
|
|
116
|
-
const now = new Date();
|
|
117
|
-
const options = { timeZone: 'Asia/Kolkata' };
|
|
118
|
-
const formattedTime = now.toLocaleString('en-IN', { hour12: true, ...options });
|
|
119
|
-
const [time, period] = formattedTime.split(', ')[1].split(' ');
|
|
120
|
-
const [hours, minutes, seconds] = time.split(':').map(Number);
|
|
121
|
-
return { hours, minutes, seconds, period };
|
|
122
|
-
}
|
|
123
|
-
timeToSeconds(hours, minutes, seconds) {
|
|
124
|
-
return hours * 3600 + minutes * 60 + seconds;
|
|
125
|
-
}
|
|
126
|
-
secondsToTimeString(seconds) {
|
|
127
|
-
const hours = Math.floor(seconds / 3600) % 12 || 12;
|
|
128
|
-
const minutes = Math.floor((seconds % 3600) / 60);
|
|
129
|
-
const secondsPart = seconds % 60;
|
|
130
|
-
return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secondsPart.toString().padStart(2, '0')}`;
|
|
131
|
-
}
|
|
132
|
-
handleCalulateHalfTime(expireTime, isHalfTime = false) {
|
|
133
|
-
const [expireHours, expireMinutes, expireSeconds] = expireTime.split(':').map(Number);
|
|
134
|
-
const { hours: currentHours, minutes: currentMinutes, seconds: currentSeconds, period: currentPeriod } = this.getCurrentTime();
|
|
135
|
-
const expireTimeInSeconds = this.timeToSeconds(expireHours, expireMinutes, expireSeconds);
|
|
136
|
-
const currentTimeInSeconds = this.timeToSeconds(currentHours, currentMinutes, currentSeconds);
|
|
137
|
-
let halfwayTimeInSeconds;
|
|
138
|
-
if (isHalfTime) {
|
|
139
|
-
halfwayTimeInSeconds = expireTimeInSeconds + currentTimeInSeconds;
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
halfwayTimeInSeconds = Math.floor((expireTimeInSeconds + currentTimeInSeconds) / 2);
|
|
143
|
-
}
|
|
144
|
-
if (halfwayTimeInSeconds < 0) {
|
|
145
|
-
halfwayTimeInSeconds += 12 * 3600;
|
|
146
|
-
}
|
|
147
|
-
else if (halfwayTimeInSeconds >= 12 * 3600) {
|
|
148
|
-
halfwayTimeInSeconds -= 12 * 3600;
|
|
149
|
-
}
|
|
150
|
-
const halfwayTimeString = this.secondsToTimeString(halfwayTimeInSeconds);
|
|
151
|
-
let isHalfTimeGreater = false;
|
|
152
|
-
if (halfwayTimeString.endsWith('AM') && expireTime.endsWith('PM')) {
|
|
153
|
-
isHalfTimeGreater = false;
|
|
154
|
-
}
|
|
155
|
-
else if (halfwayTimeString.endsWith('PM') && expireTime.endsWith('AM')) {
|
|
156
|
-
isHalfTimeGreater = true;
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
isHalfTimeGreater = halfwayTimeString > expireTime;
|
|
160
|
-
}
|
|
161
|
-
return { halfwayTimeString, isHalfTimeGreater };
|
|
162
|
-
}
|
|
163
|
-
checkHalfTimeIsGreater() {
|
|
164
|
-
// const getRefreshTokenHalfTime: string = localStorage.getItem(this.refreshTokenExpireTimeStorageKey) as string;
|
|
165
|
-
const getRefreshTokenHalfTime = LocalStorageService.getItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME);
|
|
166
|
-
if (!getRefreshTokenHalfTime)
|
|
167
|
-
throw new Error('Refresh token half time is missing');
|
|
168
|
-
const { isHalfTimeGreater, halfwayTimeString } = this.handleCalulateHalfTime(getRefreshTokenHalfTime, true);
|
|
169
|
-
return { isHalfTimeGreater, halfwayTimeString };
|
|
76
|
+
triggerRefreshTokenTimer() {
|
|
77
|
+
const refreshTokenTime = 20 * 1000;
|
|
78
|
+
timer(0, refreshTokenTime).subscribe(() => {
|
|
79
|
+
this.refreshToken();
|
|
80
|
+
});
|
|
170
81
|
}
|
|
171
82
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HttpAuthInterceptor, deps: [{ token: i1.Router }, { token: i2.ToastNotificationService }, { token: i3.RefreshTokenService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
172
83
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HttpAuthInterceptor, providedIn: 'root' }); }
|
|
@@ -177,4 +88,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
177
88
|
providedIn: 'root'
|
|
178
89
|
}]
|
|
179
90
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.ToastNotificationService }, { type: i3.RefreshTokenService }]; } });
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hdXRoLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGxhdGZvcm0taHR0cC1pbnRlcmNlcHRvci9zcmMvbGliL2h0dHAtYXV0aC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0YsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFNM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUc5QixZQUNVLE1BQWMsRUFDZCx3QkFBa0QsRUFDbEQsbUJBQXdDO1FBRnhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFMbEQsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQUtyQixDQUFDO0lBRUwsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSxTQUFTLENBQUMsT0FBNkIsRUFBRSxJQUFpQjtRQUV4RCxNQUFNLHVCQUF1QixHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUN0RyxJQUFJLHVCQUF1QixFQUFFO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO1FBRUQsSUFBSSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdEIsSUFBSSxTQUFTLEVBQUU7WUFDYixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUss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QkFBaUIsR0FBRyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7U0FDcEQ7UUFFRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLGlIQUFpSDtRQUNqSCxNQUFNLHVCQUF1QixHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUN0RyxJQUFJLENBQUMsdUJBQXVCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUNsRCxDQUFDOytHQWhMVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUhsQixNQUFNOzs0RkFHUCxtQkFBbUI7a0JBSi9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFJlcXVlc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuLy8gaW1wb3J0IHsgUmVmcmVzaFRva2VuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Rpc3QvcGxhdGZvcm0tcmVmcmVzaC10b2tlbi1zZXJ2aWNlL2luZGV4JztcbmltcG9ydCB7IFJlZnJlc2hUb2tlblNlcnZpY2UgfSBmcm9tICdAcHJvZ3Jlc3MtY2hlZi9wbGF0Zm9ybS1yZWZyZXNoLXRva2VuLXNlcnZpY2UnXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9hc3ROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQHByb2dyZXNzLWNoZWYvcGxhdGZvcm0tc2hhcmVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSwgU3RvcmFnZUtleXMgfSBmcm9tICdAcHJvZ3Jlc3MtY2hlZi9wbGF0Zm9ybS1zdG9yYWdlLXNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcblxuZXhwb3J0IGNsYXNzIEh0dHBBdXRoSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBhdXRoVG9rZW5TZXQgPSBuZXcgU2V0KCk7XG4gIGlzU2Vzc2lvbkV4cGlyZWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHRvYXN0Tm90aWZpY2F0aW9uU2VydmljZTogVG9hc3ROb3RpZmljYXRpb25TZXJ2aWNlLCBcbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlblNlcnZpY2U6IFJlZnJlc2hUb2tlblNlcnZpY2UsXG4gICkgeyB9XG5cbiAgLy8gcHJpdmF0ZSBjdXJyZW50QmFzZVVybEZyb21Mb2NhbFN0b3JhZ2U6IHN0cmluZyA9ICdjdXJyZW50U2VydmVyQmFzZVVybCc7XG4gIC8vIHByaXZhdGUgcmVmcmVzaFRva2VuRXhwaXJlVGltZVN0b3JhZ2VLZXk6IHN0cmluZyA9ICdyZWZyZXNoVG9rZW5FeHBpcmVUaW1lJztcbiAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG5cbiAgICBjb25zdCBnZXRSZWZyZXNoVG9rZW5IYWxmVGltZSA9IExvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5SRUZSRVNIX1RPS0VOX0hBTEZfRVhQUkVfVElNRSlcbiAgICBpZiAoZ2V0UmVmcmVzaFRva2VuSGFsZlRpbWUpIHtcbiAgICAgIHRoaXMubWFuYWdlVG9rZW5SZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgbGV0IGF1dGhUb2tlbiA9IExvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5BVVRIX1RPS0VOKTtcbiAgICBsZXQgYXV0aFJlcSA9IHJlcXVlc3Q7XG4gICAgaWYgKGF1dGhUb2tlbikge1xuICAgICAgYXV0aFJlcSA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2F1dGhUb2tlbn1gXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAoIXRoaXMuYXV0aFRva2VuU2V0LmhhcyhhdXRoVG9rZW4pKSB7XG4gICAgICAgIHRoaXMuaXNTZXNzaW9uRXhwaXJlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5hdXRoVG9rZW5TZXQuYWRkKGF1dGhUb2tlbik7XG4gICAgfVxuICAgIHJldHVybiBuZXh0LmhhbmRsZShhdXRoUmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIGNvbnN0IGxvZ2luVHlwZSA9IExvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5MT0dJTl9UWVBFKTtcbiAgICAgICAgICBpZiAobG9naW5UeXBlID09PSAnc2FtbCcgfHwgbG9naW5UeXBlID09PSAnb2F1dGgnKSB7XG4gICAgICAgICAgICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oU3RvcmFnZUtleXMuVVNFUl9OQU1FKTtcbiAgICAgICAgICAgIExvY2FsU3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbShTdG9yYWdlS2V5cy5JU19SRU1FTUJFUl9NRSk7IFxuICAgICAgICAgIH1cbiAgICAgICAgICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oU3RvcmFnZUtleXMuSVNfVVNFUl9PUkdfQU5EX1JPTEVfU0VULCBmYWxzZSk7XG4gICAgICAgICAgTG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLklTX1VTRVJfQVVUSEVOVElDQVRFRCwgZmFsc2UpO1xuICAgICAgICAgIExvY2FsU3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbShTdG9yYWdlS2V5cy5BVVRIX1RPS0VOKTtcbiAgICAgICAgICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oU3RvcmFnZUtleXMuTE9HSU5fVFlQRSk7XG4gICAgICAgICAgTG9jYWxTdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKFN0b3JhZ2VLZXlzLklERU5USVRZX1RPS0VOKTtcbiAgICAgICAgICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oU3RvcmFnZUtleXMuVVNFUl9PUkdfQU5EX1JPTEVfVE9LRU4pO1xuICAgICAgICAgIC8vIGNhbGwgbG9nb3V0IGFjdGlvblxuICAgICAgICAgIGlmICghdGhpcy5pc1Nlc3Npb25FeHBpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0Tm90aWZpY2F0aW9uU2VydmljZS5zaG93VG9hc3ROb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBjb250ZW50OiAnVGhlIHNlc3Npb24gaGFzIGVuZGVkLidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pc1Nlc3Npb25FeHBpcmVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSAwIHx8IGVycm9yLnN0YXR1cyA9PT0gNTA0KSB7XG4gICAgICAgICAgdGhpcy50b2FzdE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd1RvYXN0Tm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IGBVbmFibGUgdG8gcmVhY2ggc2VydmVyLiBQbGVhc2UgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgICB0eXBlOiB7IHN0eWxlOiAnZXJyb3InLCBpY29uOiB0cnVlIH0sXG4gICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgICAgdGhpcy50b2FzdE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd1RvYXN0Tm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IGBTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgICAgdHlwZTogeyBzdHlsZTogJ2Vycm9yJywgaWNvbjogdHJ1ZSB9LFxuICAgICAgICAgICAgY2xvc2FibGU6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbWFuYWdlUmVmcmVzaFRva2VuRXhwaXJlVGltZSgpIHtcbiAgICBjb25zdCBuZXdFeHBpcmVUaW1lID0gdGhpcy5nZXRFeHBpcmVBdFRpbWUoKVxuICAgIGNvbnN0IHsgaGFsZndheVRpbWVTdHJpbmcgfSA9IHRoaXMuaGFuZGxlQ2FsdWxhdGVIYWxmVGltZShuZXdFeHBpcmVUaW1lKVxuICAgIExvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5SRUZSRVNIX1RPS0VOX0hBTEZfRVhQUkVfVElNRSwgaGFsZndheVRpbWVTdHJpbmcpXG4gIH1cblxuICBtYW5hZ2VUb2tlblJlZnJlc2goKSB7XG4gICAgY29uc3QgeyBpc0hhbGZUaW1lR3JlYXRlciB9ID0gdGhpcy5jaGVja0hhbGZUaW1lSXNHcmVhdGVyKCk7XG4gICAgaWYgKGlzSGFsZlRpbWVHcmVhdGVyKSB7XG4gICAgICB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgICAgdGhpcy5tYW5hZ2VSZWZyZXNoVG9rZW5FeHBpcmVUaW1lKCk7XG4gICAgICAvLyBjb25zdCBuZXdFeHBpcmVUaW1lID0gdGhpcy5nZXRFeHBpcmVBdFRpbWUoKVxuICAgICAgLy8gY29uc3QgeyBoYWxmd2F5VGltZVN0cmluZyB9ID0gdGhpcy5oYW5kbGVDYWx1bGF0ZUhhbGZUaW1lKG5ld0V4cGlyZVRpbWUpXG4gICAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnJlZnJlc2hUb2tlbkV4cGlyZVRpbWVTdG9yYWdlS2V5LCBoYWxmd2F5VGltZVN0cmluZylcbiAgICAgIC8vIExvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5SRUZSRVNIX1RPS0VOX0hBTEZfRVhQUkVfVElNRSwgaGFsZndheVRpbWVTdHJpbmcpXG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaFRva2VuKCkge1xuICAgIC8vIGNvbnN0IGJhc2VVcmw6IHN0cmluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY3VycmVudEJhc2VVcmxGcm9tTG9jYWxTdG9yYWdlKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgYmFzZVVybCA9IExvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5DVVJSRU5UX1NFUlZFUl9CQVNFX1VSTCk7XG4gICAgaWYgKCFiYXNlVXJsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBiYWNrZW5kIG9yIHNlcnZlciBiYXNlIFVSTCBpcyBtaXNzaW5nIGluIExvY2FsIFN0b3JhZ2UnKTtcbiAgICB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UucmVmcmVzaFRva2VuKHsgcGxhdGZvcm1TZXJ2aWNlQXBpQmFzZVVybHM6IGJhc2VVcmwgfSk7XG4gIH1cblxuICBnZXRFeHBpcmVBdFRpbWUoKSB7XG4gICAgbGV0IGlzSWRlbnRpdHlUb2tlbjtcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgaXNJZGVudGl0eVRva2VuID0gTG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKFN0b3JhZ2VLZXlzLklERU5USVRZX1RPS0VOKTtcbiAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLWdldHRpbmcgZmlyc3QgdGltZSB0b2tlbicsIGlzSWRlbnRpdHlUb2tlbilcbiAgICB9LCAyMDAwKVxuICAgIGNvbnNvbGUubG9nKCc9PT09PT09IGNoZWNrIGlzIHRva2VuIGF2YWlsYWJlIC0tLS0tLS0tJywgaXNJZGVudGl0eVRva2VuKSAgXG4gICAgaWYgKCFpc0lkZW50aXR5VG9rZW4pIHRocm93IG5ldyBFcnJvcignaWRlbnRpdHkgdG9rZW4gaXMgbWlzc2luZyBpbiB0aGUgbG9jYWwgc3RvcmFnZScpO1xuICAgIGNvbnN0IHsgZXhwaXJlQXQgfSA9IGlzSWRlbnRpdHlUb2tlbjtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZXhwaXJlQXQgKiAxMDAwKTtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBzZWNvbmRzID0gZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGxhdGVzdFJlZnJlc2hUb2tlbkV4cGlyZVRpbWUgPSBgJHtob3Vyc306JHttaW51dGVzfToke3NlY29uZHN9YDsgLy8xMDowMDowMFxuICAgIHJldHVybiBsYXRlc3RSZWZyZXNoVG9rZW5FeHBpcmVUaW1lO1xuICB9XG5cbiAgZ2V0Q3VycmVudFRpbWUoKSB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBvcHRpb25zID0geyB0aW1lWm9uZTogJ0FzaWEvS29sa2F0YScgfTtcbiAgICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gbm93LnRvTG9jYWxlU3RyaW5nKCdlbi1JTicsIHsgaG91cjEyOiB0cnVlLCAuLi5vcHRpb25zIH0pO1xuICAgIGNvbnN0IFt0aW1lLCBwZXJpb2RdID0gZm9ybWF0dGVkVGltZS5zcGxpdCgnLCAnKVsxXS5zcGxpdCgnICcpO1xuICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XG4gICAgcmV0dXJuIHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIHBlcmlvZCB9O1xuICB9XG5cbiAgdGltZVRvU2Vjb25kcyhob3VyczogbnVtYmVyLCBtaW51dGVzOiBudW1iZXIsIHNlY29uZHM6IG51bWJlcikge1xuICAgIHJldHVybiBob3VycyAqIDM2MDAgKyBtaW51dGVzICogNjAgKyBzZWNvbmRzO1xuICB9XG5cbiAgc2Vjb25kc1RvVGltZVN0cmluZyhzZWNvbmRzOiBudW1iZXIpIHtcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApICUgMTIgfHwgMTI7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHNlY29uZHMgJSAzNjAwKSAvIDYwKTtcbiAgICBjb25zdCBzZWNvbmRzUGFydCA9IHNlY29uZHMgJSA2MDtcbiAgICByZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3NlY29uZHNQYXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICB9XG5cbiAgaGFuZGxlQ2FsdWxhdGVIYWxmVGltZShleHBpcmVUaW1lOiBzdHJpbmcsIGlzSGFsZlRpbWU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IFtleHBpcmVIb3VycywgZXhwaXJlTWludXRlcywgZXhwaXJlU2Vjb25kc10gPSBleHBpcmVUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XG4gICAgY29uc3QgeyBob3VyczogY3VycmVudEhvdXJzLCBtaW51dGVzOiBjdXJyZW50TWludXRlcywgc2Vjb25kczogY3VycmVudFNlY29uZHMsIHBlcmlvZDogY3VycmVudFBlcmlvZCB9ID0gdGhpcy5nZXRDdXJyZW50VGltZSgpO1xuXG4gICAgY29uc3QgZXhwaXJlVGltZUluU2Vjb25kcyA9IHRoaXMudGltZVRvU2Vjb25kcyhleHBpcmVIb3VycywgZXhwaXJlTWludXRlcywgZXhwaXJlU2Vjb25kcyk7XG4gICAgY29uc3QgY3VycmVudFRpbWVJblNlY29uZHMgPSB0aGlzLnRpbWVUb1NlY29uZHMoY3VycmVudEhvdXJzLCBjdXJyZW50TWludXRlcywgY3VycmVudFNlY29uZHMpO1xuXG4gICAgbGV0IGhhbGZ3YXlUaW1lSW5TZWNvbmRzOiBudW1iZXI7XG4gICAgaWYgKGlzSGFsZlRpbWUpIHtcbiAgICAgIGhhbGZ3YXlUaW1lSW5TZWNvbmRzID0gZXhwaXJlVGltZUluU2Vjb25kcyArIGN1cnJlbnRUaW1lSW5TZWNvbmRzO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYWxmd2F5VGltZUluU2Vjb25kcyA9IE1hdGguZmxvb3IoKGV4cGlyZVRpbWVJblNlY29uZHMgKyBjdXJyZW50VGltZUluU2Vjb25kcykgLyAyKTtcbiAgICB9XG5cbiAgICBpZiAoaGFsZndheVRpbWVJblNlY29uZHMgPCAwKSB7XG4gICAgICBoYWxmd2F5VGltZUluU2Vjb25kcyArPSAxMiAqIDM2MDA7XG4gICAgfSBlbHNlIGlmIChoYWxmd2F5VGltZUluU2Vjb25kcyA+PSAxMiAqIDM2MDApIHtcbiAgICAgIGhhbGZ3YXlUaW1lSW5TZWNvbmRzIC09IDEyICogMzYwMDtcbiAgICB9XG5cbiAgICBjb25zdCBoYWxmd2F5VGltZVN0cmluZyA9IHRoaXMuc2Vjb25kc1RvVGltZVN0cmluZyhoYWxmd2F5VGltZUluU2Vjb25kcyk7XG5cbiAgICBsZXQgaXNIYWxmVGltZUdyZWF0ZXIgPSBmYWxzZTtcbiAgICBpZiAoaGFsZndheVRpbWVTdHJpbmcuZW5kc1dpdGgoJ0FNJykgJiYgZXhwaXJlVGltZS5lbmRzV2l0aCgnUE0nKSkge1xuICAgICAgaXNIYWxmVGltZUdyZWF0ZXIgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGhhbGZ3YXlUaW1lU3RyaW5nLmVuZHNXaXRoKCdQTScpICYmIGV4cGlyZVRpbWUuZW5kc1dpdGgoJ0FNJykpIHtcbiAgICAgIGlzSGFsZlRpbWVHcmVhdGVyID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNIYWxmVGltZUdyZWF0ZXIgPSBoYWxmd2F5VGltZVN0cmluZyA+IGV4cGlyZVRpbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgaGFsZndheVRpbWVTdHJpbmcsIGlzSGFsZlRpbWVHcmVhdGVyIH07XG4gIH1cblxuICBjaGVja0hhbGZUaW1lSXNHcmVhdGVyKCkge1xuICAgIC8vIGNvbnN0IGdldFJlZnJlc2hUb2tlbkhhbGZUaW1lOiBzdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnJlZnJlc2hUb2tlbkV4cGlyZVRpbWVTdG9yYWdlS2V5KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgZ2V0UmVmcmVzaFRva2VuSGFsZlRpbWUgPSBMb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU3RvcmFnZUtleXMuUkVGUkVTSF9UT0tFTl9IQUxGX0VYUFJFX1RJTUUpXG4gICAgaWYgKCFnZXRSZWZyZXNoVG9rZW5IYWxmVGltZSkgdGhyb3cgbmV3IEVycm9yKCdSZWZyZXNoIHRva2VuIGhhbGYgdGltZSBpcyBtaXNzaW5nJyk7XG4gICAgY29uc3QgeyBpc0hhbGZUaW1lR3JlYXRlciwgaGFsZndheVRpbWVTdHJpbmcgfSA9IHRoaXMuaGFuZGxlQ2FsdWxhdGVIYWxmVGltZShnZXRSZWZyZXNoVG9rZW5IYWxmVGltZSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHsgaXNIYWxmVGltZUdyZWF0ZXIsIGhhbGZ3YXlUaW1lU3RyaW5nIH07XG4gIH1cbn1cbiJdfQ==
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hdXRoLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGxhdGZvcm0taHR0cC1pbnRlcmNlcHRvci9zcmMvbGliL2h0dHAtYXV0aC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0YsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBTTNDLE1BQU0sT0FBTyxtQkFBbUI7SUFHOUIsWUFDVSxNQUFjLEVBQ2Qsd0JBQWtELEVBQ2xELG1CQUF3QztRQUZ4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBTGxELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFLckIsQ0FBQztJQUVMLFNBQVMsQ0FBQyxPQUE2QixFQUFFLElBQWlCO1FBQ3hELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksU0FBUyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEUsSUFBSSxPQUFPLEdBQUksT0FBTyxDQUFDO1FBQ3ZCLElBQUksU0FBUyxFQUFFO1lBQ2IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3RCLFVBQVUsRUFBRTtvQkFDVixhQUFhLEVBQUUsVUFBVSxTQUFTLEVBQUU7aUJBQ3JDO2FBQ0YsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxD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LDBCQUEwQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixNQUFNLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDbkMsS0FBSyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzsrR0E5RVUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FIbEIsTUFBTTs7NEZBR1AsbUJBQW1CO2tCQUovQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwSW50ZXJjZXB0b3IsXG4gIEh0dHBSZXF1ZXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFJlZnJlc2hUb2tlblNlcnZpY2UgfSBmcm9tICdAcHJvZ3Jlc3MtY2hlZi9wbGF0Zm9ybS1yZWZyZXNoLXRva2VuLXNlcnZpY2UnXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9hc3ROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQHByb2dyZXNzLWNoZWYvcGxhdGZvcm0tc2hhcmVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSwgU3RvcmFnZUtleXMgfSBmcm9tICdAcHJvZ3Jlc3MtY2hlZi9wbGF0Zm9ybS1zdG9yYWdlLXNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBIdHRwQXV0aEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgYXV0aFRva2VuU2V0ID0gbmV3IFNldCgpO1xuICBpc1Nlc3Npb25FeHBpcmVkID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSB0b2FzdE5vdGlmaWNhdGlvblNlcnZpY2U6IFRvYXN0Tm90aWZpY2F0aW9uU2VydmljZSwgXG4gICAgcHJpdmF0ZSByZWZyZXNoVG9rZW5TZXJ2aWNlOiBSZWZyZXNoVG9rZW5TZXJ2aWNlLFxuICApIHsgfVxuXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xuICAgIHRoaXMudHJpZ2dlclJlZnJlc2hUb2tlblRpbWVyKCk7XG4gICAgbGV0IGF1dGhUb2tlbiA9IExvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5BVVRIX1RPS0VOKTtcbiAgICBsZXQgYXV0aFJlcSA9ICByZXF1ZXN0O1xuICAgIGlmIChhdXRoVG9rZW4pIHtcbiAgICAgIGF1dGhSZXEgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthdXRoVG9rZW59YFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKCF0aGlzLmF1dGhUb2tlblNldC5oYXMoYXV0aFRva2VuKSkge1xuICAgICAgICB0aGlzLmlzU2Vzc2lvbkV4cGlyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXV0aFRva2VuU2V0LmFkZChhdXRoVG9rZW4pO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dC5oYW5kbGUoYXV0aFJlcSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICBjb25zdCBsb2dpblR5cGUgPSBMb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU3RvcmFnZUtleXMuTE9HSU5fVFlQRSk7XG4gICAgICAgICAgaWYgKGxvZ2luVHlwZSA9PT0gJ3NhbWwnIHx8IGxvZ2luVHlwZSA9PT0gJ29hdXRoJykge1xuICAgICAgICAgICAgTG9jYWxTdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKFN0b3JhZ2VLZXlzLlVTRVJfTkFNRSk7XG4gICAgICAgICAgICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oU3RvcmFnZUtleXMuSVNfUkVNRU1CRVJfTUUpOyBcbiAgICAgICAgICB9XG4gICAgICAgICAgTG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLklTX1VTRVJfT1JHX0FORF9ST0xFX1NFVCwgZmFsc2UpO1xuICAgICAgICAgIExvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5JU19VU0VSX0FVVEhFTlRJQ0FURUQsIGZhbHNlKTtcbiAgICAgICAgICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oU3RvcmFnZUtleXMuQVVUSF9UT0tFTik7XG4gICAgICAgICAgTG9jYWxTdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKFN0b3JhZ2VLZXlzLkxPR0lOX1RZUEUpO1xuICAgICAgICAgIExvY2FsU3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbShTdG9yYWdlS2V5cy5JREVOVElUWV9UT0tFTik7XG4gICAgICAgICAgTG9jYWxTdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKFN0b3JhZ2VLZXlzLlVTRVJfT1JHX0FORF9ST0xFX1RPS0VOKTtcbiAgICAgICAgICAvLyBjYWxsIGxvZ291dCBhY3Rpb25cbiAgICAgICAgICBpZiAoIXRoaXMuaXNTZXNzaW9uRXhwaXJlZCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd1RvYXN0Tm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgY29udGVudDogJ1RoZSBzZXNzaW9uIGhhcyBlbmRlZC4nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuaXNTZXNzaW9uRXhwaXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gMCB8fCBlcnJvci5zdGF0dXMgPT09IDUwNCkge1xuICAgICAgICAgIHRoaXMudG9hc3ROb3RpZmljYXRpb25TZXJ2aWNlLnNob3dUb2FzdE5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBjb250ZW50OiBgVW5hYmxlIHRvIHJlYWNoIHNlcnZlci4gUGxlYXNlIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgICAgdHlwZTogeyBzdHlsZTogJ2Vycm9yJywgaWNvbjogdHJ1ZSB9LFxuICAgICAgICAgICAgY2xvc2FibGU6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkge1xuICAgICAgICAgIHRoaXMudG9hc3ROb3RpZmljYXRpb25TZXJ2aWNlLnNob3dUb2FzdE5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBjb250ZW50OiBgU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSB0cnkgYWdhaW4uYCxcbiAgICAgICAgICAgIHR5cGU6IHsgc3R5bGU6ICdlcnJvcicsIGljb246IHRydWUgfSxcbiAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJlZnJlc2hUb2tlbigpIHtcbiAgICBjb25zdCBiYXNlVXJsID0gTG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKFN0b3JhZ2VLZXlzLkNVUlJFTlRfU0VSVkVSX0JBU0VfVVJMKTtcbiAgICBpZiAoIWJhc2VVcmwpIHRocm93IG5ldyBFcnJvcignVGhlIGJhY2tlbmQgb3Igc2VydmVyIGJhc2UgVVJMIGlzIG1pc3NpbmcgaW4gTG9jYWwgU3RvcmFnZScpO1xuICAgIHRoaXMucmVmcmVzaFRva2VuU2VydmljZS5yZWZyZXNoVG9rZW4oeyBwbGF0Zm9ybVNlcnZpY2VBcGlCYXNlVXJsczogYmFzZVVybCB9KTtcbiAgfVxuXG4gIHRyaWdnZXJSZWZyZXNoVG9rZW5UaW1lcigpIHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW5UaW1lID0gMjAgKiAxMDAwO1xuICAgIHRpbWVyKDAsIHJlZnJlc2hUb2tlblRpbWUpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgIH0pXG4gIH1cblxuICAvLyBhc3luYyBtYW5hZ2VSZWZyZXNoVG9rZW5FeHBpcmVUaW1lKCkge1xuICAvLyAgIGNvbnN0IG5ld0V4cGlyZVRpbWUgPSBhd2FpdCB0aGlzLmdldEV4cGlyZUF0VGltZSgpXG4gIC8vICAgY29uc3QgeyBoYWxmd2F5VGltZVN0cmluZyB9ID0gdGhpcy5oYW5kbGVDYWx1bGF0ZUhhbGZUaW1lKG5ld0V4cGlyZVRpbWUpXG4gIC8vICAgTG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLlJFRlJFU0hfVE9LRU5fSEFMRl9FWFBSRV9USU1FLCBoYWxmd2F5VGltZVN0cmluZylcbiAgLy8gfVxuXG4gIC8vIG1hbmFnZVRva2VuUmVmcmVzaCgpIHtcbiAgLy8gICBjb25zdCB7IGlzSGFsZlRpbWVHcmVhdGVyIH0gPSB0aGlzLmNoZWNrSGFsZlRpbWVJc0dyZWF0ZXIoKTtcbiAgLy8gICBpZiAoaXNIYWxmVGltZUdyZWF0ZXIpIHtcbiAgLy8gICAgIHRoaXMucmVmcmVzaFRva2VuKCk7XG4gIC8vICAgICB0aGlzLm1hbmFnZVJlZnJlc2hUb2tlbkV4cGlyZVRpbWUoKTtcbiAgLy8gICAgIC8vIGNvbnN0IG5ld0V4cGlyZVRpbWUgPSB0aGlzLmdldEV4cGlyZUF0VGltZSgpXG4gIC8vICAgICAvLyBjb25zdCB7IGhhbGZ3YXlUaW1lU3RyaW5nIH0gPSB0aGlzLmhhbmRsZUNhbHVsYXRlSGFsZlRpbWUobmV3RXhwaXJlVGltZSlcbiAgLy8gICAgIC8vIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMucmVmcmVzaFRva2VuRXhwaXJlVGltZVN0b3JhZ2VLZXksIGhhbGZ3YXlUaW1lU3RyaW5nKVxuICAvLyAgICAgLy8gTG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLlJFRlJFU0hfVE9LRU5fSEFMRl9FWFBSRV9USU1FLCBoYWxmd2F5VGltZVN0cmluZylcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBhc3luYyBnZXRFeHBpcmVBdFRpbWUoKSB7XG4gIC8vICAgYXdhaXQgdGhpcy5kZWxheSgyMDAwKVxuICAvLyAgIGxldCBpc0lkZW50aXR5VG9rZW4gPSBMb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU3RvcmFnZUtleXMuSURFTlRJVFlfVE9LRU4pO1xuICAvLyAgIGNvbnNvbGUubG9nKCc9PT09PT09IGNoZWNrIGlzIHRva2VuIGF2YWlsYWJlIC0tLS0tLS0tJywgaXNJZGVudGl0eVRva2VuKSAgXG4gIC8vICAgaWYgKCFpc0lkZW50aXR5VG9rZW4pIHRocm93IG5ldyBFcnJvcignaWRlbnRpdHkgdG9rZW4gaXMgbWlzc2luZyBpbiB0aGUgbG9jYWwgc3RvcmFnZScpO1xuICAvLyAgIGNvbnN0IHsgZXhwaXJlQXQgfSA9IGlzSWRlbnRpdHlUb2tlbjtcbiAgLy8gICBjb25zdCBkYXRlID0gbmV3IERhdGUoZXhwaXJlQXQgKiAxMDAwKTtcbiAgLy8gICBjb25zdCBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIC8vICAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgLy8gICBjb25zdCBzZWNvbmRzID0gZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAvLyAgIGNvbnN0IGxhdGVzdFJlZnJlc2hUb2tlbkV4cGlyZVRpbWUgPSBgJHtob3Vyc306JHttaW51dGVzfToke3NlY29uZHN9YDsgLy8xMDowMDowMFxuICAvLyAgIHJldHVybiBsYXRlc3RSZWZyZXNoVG9rZW5FeHBpcmVUaW1lO1xuICAvLyB9XG5cbiAgLy8gZ2V0Q3VycmVudFRpbWUoKSB7XG4gIC8vICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgLy8gICBjb25zdCBvcHRpb25zID0geyB0aW1lWm9uZTogJ0FzaWEvS29sa2F0YScgfTtcbiAgLy8gICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gbm93LnRvTG9jYWxlU3RyaW5nKCdlbi1JTicsIHsgaG91cjEyOiB0cnVlLCAuLi5vcHRpb25zIH0pO1xuICAvLyAgIGNvbnN0IFt0aW1lLCBwZXJpb2RdID0gZm9ybWF0dGVkVGltZS5zcGxpdCgnLCAnKVsxXS5zcGxpdCgnICcpO1xuICAvLyAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XG4gIC8vICAgcmV0dXJuIHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIHBlcmlvZCB9O1xuICAvLyB9XG5cbiAgLy8gdGltZVRvU2Vjb25kcyhob3VyczogbnVtYmVyLCBtaW51dGVzOiBudW1iZXIsIHNlY29uZHM6IG51bWJlcikge1xuICAvLyAgIHJldHVybiBob3VycyAqIDM2MDAgKyBtaW51dGVzICogNjAgKyBzZWNvbmRzO1xuICAvLyB9XG5cbiAgLy8gc2Vjb25kc1RvVGltZVN0cmluZyhzZWNvbmRzOiBudW1iZXIpIHtcbiAgLy8gICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApICUgMTIgfHwgMTI7XG4gIC8vICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHNlY29uZHMgJSAzNjAwKSAvIDYwKTtcbiAgLy8gICBjb25zdCBzZWNvbmRzUGFydCA9IHNlY29uZHMgJSA2MDtcbiAgLy8gICByZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3NlY29uZHNQYXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAvLyB9XG5cbiAgLy8gaGFuZGxlQ2FsdWxhdGVIYWxmVGltZShleHBpcmVUaW1lOiBzdHJpbmcsIGlzSGFsZlRpbWU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAvLyAgIGNvbnN0IFtleHBpcmVIb3VycywgZXhwaXJlTWludXRlcywgZXhwaXJlU2Vjb25kc10gPSBleHBpcmVUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XG4gIC8vICAgY29uc3QgeyBob3VyczogY3VycmVudEhvdXJzLCBtaW51dGVzOiBjdXJyZW50TWludXRlcywgc2Vjb25kczogY3VycmVudFNlY29uZHMsIHBlcmlvZDogY3VycmVudFBlcmlvZCB9ID0gdGhpcy5nZXRDdXJyZW50VGltZSgpO1xuXG4gIC8vICAgY29uc3QgZXhwaXJlVGltZUluU2Vjb25kcyA9IHRoaXMudGltZVRvU2Vjb25kcyhleHBpcmVIb3VycywgZXhwaXJlTWludXRlcywgZXhwaXJlU2Vjb25kcyk7XG4gIC8vICAgY29uc3QgY3VycmVudFRpbWVJblNlY29uZHMgPSB0aGlzLnRpbWVUb1NlY29uZHMoY3VycmVudEhvdXJzLCBjdXJyZW50TWludXRlcywgY3VycmVudFNlY29uZHMpO1xuXG4gIC8vICAgbGV0IGhhbGZ3YXlUaW1lSW5TZWNvbmRzOiBudW1iZXI7XG4gIC8vICAgaWYgKGlzSGFsZlRpbWUpIHtcbiAgLy8gICAgIGhhbGZ3YXlUaW1lSW5TZWNvbmRzID0gZXhwaXJlVGltZUluU2Vjb25kcyArIGN1cnJlbnRUaW1lSW5TZWNvbmRzO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBoYWxmd2F5VGltZUluU2Vjb25kcyA9IE1hdGguZmxvb3IoKGV4cGlyZVRpbWVJblNlY29uZHMgKyBjdXJyZW50VGltZUluU2Vjb25kcykgLyAyKTtcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAoaGFsZndheVRpbWVJblNlY29uZHMgPCAwKSB7XG4gIC8vICAgICBoYWxmd2F5VGltZUluU2Vjb25kcyArPSAxMiAqIDM2MDA7XG4gIC8vICAgfSBlbHNlIGlmIChoYWxmd2F5VGltZUluU2Vjb25kcyA+PSAxMiAqIDM2MDApIHtcbiAgLy8gICAgIGhhbGZ3YXlUaW1lSW5TZWNvbmRzIC09IDEyICogMzYwMDtcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zdCBoYWxmd2F5VGltZVN0cmluZyA9IHRoaXMuc2Vjb25kc1RvVGltZVN0cmluZyhoYWxmd2F5VGltZUluU2Vjb25kcyk7XG5cbiAgLy8gICBsZXQgaXNIYWxmVGltZUdyZWF0ZXIgPSBmYWxzZTtcbiAgLy8gICBpZiAoaGFsZndheVRpbWVTdHJpbmcuZW5kc1dpdGgoJ0FNJykgJiYgZXhwaXJlVGltZS5lbmRzV2l0aCgnUE0nKSkge1xuICAvLyAgICAgaXNIYWxmVGltZUdyZWF0ZXIgPSBmYWxzZTtcbiAgLy8gICB9IGVsc2UgaWYgKGhhbGZ3YXlUaW1lU3RyaW5nLmVuZHNXaXRoKCdQTScpICYmIGV4cGlyZVRpbWUuZW5kc1dpdGgoJ0FNJykpIHtcbiAgLy8gICAgIGlzSGFsZlRpbWVHcmVhdGVyID0gdHJ1ZTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgaXNIYWxmVGltZUdyZWF0ZXIgPSBoYWxmd2F5VGltZVN0cmluZyA+IGV4cGlyZVRpbWU7XG4gIC8vICAgfVxuXG4gIC8vICAgcmV0dXJuIHsgaGFsZndheVRpbWVTdHJpbmcsIGlzSGFsZlRpbWVHcmVhdGVyIH07XG4gIC8vIH1cblxuICAvLyBjaGVja0hhbGZUaW1lSXNHcmVhdGVyKCkge1xuICAvLyAgIC8vIGNvbnN0IGdldFJlZnJlc2hUb2tlbkhhbGZUaW1lOiBzdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnJlZnJlc2hUb2tlbkV4cGlyZVRpbWVTdG9yYWdlS2V5KSBhcyBzdHJpbmc7XG4gIC8vICAgY29uc3QgZ2V0UmVmcmVzaFRva2VuSGFsZlRpbWUgPSBMb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU3RvcmFnZUtleXMuUkVGUkVTSF9UT0tFTl9IQUxGX0VYUFJFX1RJTUUpXG4gIC8vICAgaWYgKCFnZXRSZWZyZXNoVG9rZW5IYWxmVGltZSkgdGhyb3cgbmV3IEVycm9yKCdSZWZyZXNoIHRva2VuIGhhbGYgdGltZSBpcyBtaXNzaW5nJyk7XG4gIC8vICAgY29uc3QgeyBpc0hhbGZUaW1lR3JlYXRlciwgaGFsZndheVRpbWVTdHJpbmcgfSA9IHRoaXMuaGFuZGxlQ2FsdWxhdGVIYWxmVGltZShnZXRSZWZyZXNoVG9rZW5IYWxmVGltZSwgdHJ1ZSk7XG4gIC8vICAgcmV0dXJuIHsgaXNIYWxmVGltZUdyZWF0ZXIsIGhhbGZ3YXlUaW1lU3RyaW5nIH07XG4gIC8vIH1cblxuICAvLyBkZWxheShtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICAvLyB9XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LocalStorageService, StorageKeys } from '@progress-chef/platform-storage-service';
|
|
2
|
-
import { catchError, throwError } from 'rxjs';
|
|
2
|
+
import { catchError, throwError, timer } from 'rxjs';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { Injectable } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/router';
|
|
@@ -14,13 +14,8 @@ class HttpAuthInterceptor {
|
|
|
14
14
|
this.authTokenSet = new Set();
|
|
15
15
|
this.isSessionExpired = false;
|
|
16
16
|
}
|
|
17
|
-
// private currentBaseUrlFromLocalStorage: string = 'currentServerBaseUrl';
|
|
18
|
-
// private refreshTokenExpireTimeStorageKey: string = 'refreshTokenExpireTime';
|
|
19
17
|
intercept(request, next) {
|
|
20
|
-
|
|
21
|
-
if (getRefreshTokenHalfTime) {
|
|
22
|
-
this.manageTokenRefresh();
|
|
23
|
-
}
|
|
18
|
+
this.triggerRefreshTokenTimer();
|
|
24
19
|
let authToken = LocalStorageService.getItem(StorageKeys.AUTH_TOKEN);
|
|
25
20
|
let authReq = request;
|
|
26
21
|
if (authToken) {
|
|
@@ -73,101 +68,17 @@ class HttpAuthInterceptor {
|
|
|
73
68
|
return throwError(() => error);
|
|
74
69
|
}));
|
|
75
70
|
}
|
|
76
|
-
manageRefreshTokenExpireTime() {
|
|
77
|
-
const newExpireTime = this.getExpireAtTime();
|
|
78
|
-
const { halfwayTimeString } = this.handleCalulateHalfTime(newExpireTime);
|
|
79
|
-
LocalStorageService.setItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME, halfwayTimeString);
|
|
80
|
-
}
|
|
81
|
-
manageTokenRefresh() {
|
|
82
|
-
const { isHalfTimeGreater } = this.checkHalfTimeIsGreater();
|
|
83
|
-
if (isHalfTimeGreater) {
|
|
84
|
-
this.refreshToken();
|
|
85
|
-
this.manageRefreshTokenExpireTime();
|
|
86
|
-
// const newExpireTime = this.getExpireAtTime()
|
|
87
|
-
// const { halfwayTimeString } = this.handleCalulateHalfTime(newExpireTime)
|
|
88
|
-
// localStorage.setItem(this.refreshTokenExpireTimeStorageKey, halfwayTimeString)
|
|
89
|
-
// LocalStorageService.setItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME, halfwayTimeString)
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
71
|
refreshToken() {
|
|
93
|
-
// const baseUrl: string = localStorage.getItem(this.currentBaseUrlFromLocalStorage) as string;
|
|
94
72
|
const baseUrl = LocalStorageService.getItem(StorageKeys.CURRENT_SERVER_BASE_URL);
|
|
95
73
|
if (!baseUrl)
|
|
96
74
|
throw new Error('The backend or server base URL is missing in Local Storage');
|
|
97
75
|
this.refreshTokenService.refreshToken({ platformServiceApiBaseUrls: baseUrl });
|
|
98
76
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}, 2000);
|
|
105
|
-
console.log('======= check is token availabe --------', isIdentityToken);
|
|
106
|
-
if (!isIdentityToken)
|
|
107
|
-
throw new Error('identity token is missing in the local storage');
|
|
108
|
-
const { expireAt } = isIdentityToken;
|
|
109
|
-
const date = new Date(expireAt * 1000);
|
|
110
|
-
const hours = date.getUTCHours().toString().padStart(2, '0');
|
|
111
|
-
const minutes = date.getUTCMinutes().toString().padStart(2, '0');
|
|
112
|
-
const seconds = date.getUTCSeconds().toString().padStart(2, '0');
|
|
113
|
-
const latestRefreshTokenExpireTime = `${hours}:${minutes}:${seconds}`; //10:00:00
|
|
114
|
-
return latestRefreshTokenExpireTime;
|
|
115
|
-
}
|
|
116
|
-
getCurrentTime() {
|
|
117
|
-
const now = new Date();
|
|
118
|
-
const options = { timeZone: 'Asia/Kolkata' };
|
|
119
|
-
const formattedTime = now.toLocaleString('en-IN', { hour12: true, ...options });
|
|
120
|
-
const [time, period] = formattedTime.split(', ')[1].split(' ');
|
|
121
|
-
const [hours, minutes, seconds] = time.split(':').map(Number);
|
|
122
|
-
return { hours, minutes, seconds, period };
|
|
123
|
-
}
|
|
124
|
-
timeToSeconds(hours, minutes, seconds) {
|
|
125
|
-
return hours * 3600 + minutes * 60 + seconds;
|
|
126
|
-
}
|
|
127
|
-
secondsToTimeString(seconds) {
|
|
128
|
-
const hours = Math.floor(seconds / 3600) % 12 || 12;
|
|
129
|
-
const minutes = Math.floor((seconds % 3600) / 60);
|
|
130
|
-
const secondsPart = seconds % 60;
|
|
131
|
-
return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secondsPart.toString().padStart(2, '0')}`;
|
|
132
|
-
}
|
|
133
|
-
handleCalulateHalfTime(expireTime, isHalfTime = false) {
|
|
134
|
-
const [expireHours, expireMinutes, expireSeconds] = expireTime.split(':').map(Number);
|
|
135
|
-
const { hours: currentHours, minutes: currentMinutes, seconds: currentSeconds, period: currentPeriod } = this.getCurrentTime();
|
|
136
|
-
const expireTimeInSeconds = this.timeToSeconds(expireHours, expireMinutes, expireSeconds);
|
|
137
|
-
const currentTimeInSeconds = this.timeToSeconds(currentHours, currentMinutes, currentSeconds);
|
|
138
|
-
let halfwayTimeInSeconds;
|
|
139
|
-
if (isHalfTime) {
|
|
140
|
-
halfwayTimeInSeconds = expireTimeInSeconds + currentTimeInSeconds;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
halfwayTimeInSeconds = Math.floor((expireTimeInSeconds + currentTimeInSeconds) / 2);
|
|
144
|
-
}
|
|
145
|
-
if (halfwayTimeInSeconds < 0) {
|
|
146
|
-
halfwayTimeInSeconds += 12 * 3600;
|
|
147
|
-
}
|
|
148
|
-
else if (halfwayTimeInSeconds >= 12 * 3600) {
|
|
149
|
-
halfwayTimeInSeconds -= 12 * 3600;
|
|
150
|
-
}
|
|
151
|
-
const halfwayTimeString = this.secondsToTimeString(halfwayTimeInSeconds);
|
|
152
|
-
let isHalfTimeGreater = false;
|
|
153
|
-
if (halfwayTimeString.endsWith('AM') && expireTime.endsWith('PM')) {
|
|
154
|
-
isHalfTimeGreater = false;
|
|
155
|
-
}
|
|
156
|
-
else if (halfwayTimeString.endsWith('PM') && expireTime.endsWith('AM')) {
|
|
157
|
-
isHalfTimeGreater = true;
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
isHalfTimeGreater = halfwayTimeString > expireTime;
|
|
161
|
-
}
|
|
162
|
-
return { halfwayTimeString, isHalfTimeGreater };
|
|
163
|
-
}
|
|
164
|
-
checkHalfTimeIsGreater() {
|
|
165
|
-
// const getRefreshTokenHalfTime: string = localStorage.getItem(this.refreshTokenExpireTimeStorageKey) as string;
|
|
166
|
-
const getRefreshTokenHalfTime = LocalStorageService.getItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME);
|
|
167
|
-
if (!getRefreshTokenHalfTime)
|
|
168
|
-
throw new Error('Refresh token half time is missing');
|
|
169
|
-
const { isHalfTimeGreater, halfwayTimeString } = this.handleCalulateHalfTime(getRefreshTokenHalfTime, true);
|
|
170
|
-
return { isHalfTimeGreater, halfwayTimeString };
|
|
77
|
+
triggerRefreshTokenTimer() {
|
|
78
|
+
const refreshTokenTime = 20 * 1000;
|
|
79
|
+
timer(0, refreshTokenTime).subscribe(() => {
|
|
80
|
+
this.refreshToken();
|
|
81
|
+
});
|
|
171
82
|
}
|
|
172
83
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HttpAuthInterceptor, deps: [{ token: i1.Router }, { token: i2.ToastNotificationService }, { token: i3.RefreshTokenService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
173
84
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HttpAuthInterceptor, providedIn: 'root' }); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-chef-platform-http-interceptor.mjs","sources":["../../../projects/platform-http-interceptor/src/lib/http-auth.interceptor.ts","../../../projects/platform-http-interceptor/src/public-api.ts","../../../projects/platform-http-interceptor/src/progress-chef-platform-http-interceptor.ts"],"sourcesContent":["import {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest\n} from '@angular/common/http';\n// import { RefreshTokenService } from '../../../../dist/platform-refresh-token-service/index';\nimport { RefreshTokenService } from '@progress-chef/platform-refresh-token-service'\nimport { Router } from '@angular/router';\nimport { ToastNotificationService } from '@progress-chef/platform-shared-components';\nimport { LocalStorageService, StorageKeys } from '@progress-chef/platform-storage-service';\nimport { Observable, catchError, throwError } from 'rxjs';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class HttpAuthInterceptor implements HttpInterceptor {\n authTokenSet = new Set();\n isSessionExpired = false;\n constructor(\n private router: Router,\n private toastNotificationService: ToastNotificationService, \n private refreshTokenService: RefreshTokenService,\n ) { }\n\n // private currentBaseUrlFromLocalStorage: string = 'currentServerBaseUrl';\n // private refreshTokenExpireTimeStorageKey: string = 'refreshTokenExpireTime';\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n\n const getRefreshTokenHalfTime = LocalStorageService.getItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME)\n if (getRefreshTokenHalfTime) {\n this.manageTokenRefresh();\n }\n\n let authToken = LocalStorageService.getItem(StorageKeys.AUTH_TOKEN);\n let authReq = request;\n if (authToken) {\n authReq = request.clone({\n setHeaders: {\n Authorization: `Bearer ${authToken}`\n }\n })\n if (!this.authTokenSet.has(authToken)) {\n this.isSessionExpired = false;\n }\n this.authTokenSet.add(authToken);\n }\n return next.handle(authReq).pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.status === 401) {\n const loginType = LocalStorageService.getItem(StorageKeys.LOGIN_TYPE);\n if (loginType === 'saml' || loginType === 'oauth') {\n LocalStorageService.removeItem(StorageKeys.USER_NAME);\n LocalStorageService.removeItem(StorageKeys.IS_REMEMBER_ME); \n }\n LocalStorageService.setItem(StorageKeys.IS_USER_ORG_AND_ROLE_SET, false);\n LocalStorageService.setItem(StorageKeys.IS_USER_AUTHENTICATED, false);\n LocalStorageService.removeItem(StorageKeys.AUTH_TOKEN);\n LocalStorageService.removeItem(StorageKeys.LOGIN_TYPE);\n LocalStorageService.removeItem(StorageKeys.IDENTITY_TOKEN);\n LocalStorageService.removeItem(StorageKeys.USER_ORG_AND_ROLE_TOKEN);\n // call logout action\n if (!this.isSessionExpired) {\n this.toastNotificationService.showToastNotification({\n content: 'The session has ended.'\n });\n this.isSessionExpired = true;\n }\n \n this.router.navigate(['/login'])\n }\n if (error.status === 0 || error.status === 504) {\n this.toastNotificationService.showToastNotification({\n content: `Unable to reach server. Please try again.`,\n type: { style: 'error', icon: true },\n closable: true\n })\n }\n if (error.status === 500) {\n this.toastNotificationService.showToastNotification({\n content: `Something went wrong. Please try again.`,\n type: { style: 'error', icon: true },\n closable: true\n })\n }\n return throwError(() => error)\n })\n );\n }\n\n manageRefreshTokenExpireTime() {\n const newExpireTime = this.getExpireAtTime()\n const { halfwayTimeString } = this.handleCalulateHalfTime(newExpireTime)\n LocalStorageService.setItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME, halfwayTimeString)\n }\n\n manageTokenRefresh() {\n const { isHalfTimeGreater } = this.checkHalfTimeIsGreater();\n if (isHalfTimeGreater) {\n this.refreshToken();\n this.manageRefreshTokenExpireTime();\n // const newExpireTime = this.getExpireAtTime()\n // const { halfwayTimeString } = this.handleCalulateHalfTime(newExpireTime)\n // localStorage.setItem(this.refreshTokenExpireTimeStorageKey, halfwayTimeString)\n // LocalStorageService.setItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME, halfwayTimeString)\n }\n }\n\n refreshToken() {\n // const baseUrl: string = localStorage.getItem(this.currentBaseUrlFromLocalStorage) as string;\n const baseUrl = LocalStorageService.getItem(StorageKeys.CURRENT_SERVER_BASE_URL);\n if (!baseUrl) throw new Error('The backend or server base URL is missing in Local Storage');\n this.refreshTokenService.refreshToken({ platformServiceApiBaseUrls: baseUrl });\n }\n\n getExpireAtTime() {\n let isIdentityToken;\n setTimeout(()=> {\n isIdentityToken = LocalStorageService.getItem(StorageKeys.IDENTITY_TOKEN);\n console.log('--------------getting first time token', isIdentityToken)\n }, 2000)\n console.log('======= check is token availabe --------', isIdentityToken) \n if (!isIdentityToken) throw new Error('identity token is missing in the local storage');\n const { expireAt } = isIdentityToken;\n const date = new Date(expireAt * 1000);\n const hours = date.getUTCHours().toString().padStart(2, '0');\n const minutes = date.getUTCMinutes().toString().padStart(2, '0');\n const seconds = date.getUTCSeconds().toString().padStart(2, '0');\n const latestRefreshTokenExpireTime = `${hours}:${minutes}:${seconds}`; //10:00:00\n return latestRefreshTokenExpireTime;\n }\n\n getCurrentTime() {\n const now = new Date();\n const options = { timeZone: 'Asia/Kolkata' };\n const formattedTime = now.toLocaleString('en-IN', { hour12: true, ...options });\n const [time, period] = formattedTime.split(', ')[1].split(' ');\n const [hours, minutes, seconds] = time.split(':').map(Number);\n return { hours, minutes, seconds, period };\n }\n\n timeToSeconds(hours: number, minutes: number, seconds: number) {\n return hours * 3600 + minutes * 60 + seconds;\n }\n\n secondsToTimeString(seconds: number) {\n const hours = Math.floor(seconds / 3600) % 12 || 12;\n const minutes = Math.floor((seconds % 3600) / 60);\n const secondsPart = seconds % 60;\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secondsPart.toString().padStart(2, '0')}`;\n }\n\n handleCalulateHalfTime(expireTime: string, isHalfTime: boolean = false) {\n const [expireHours, expireMinutes, expireSeconds] = expireTime.split(':').map(Number);\n const { hours: currentHours, minutes: currentMinutes, seconds: currentSeconds, period: currentPeriod } = this.getCurrentTime();\n\n const expireTimeInSeconds = this.timeToSeconds(expireHours, expireMinutes, expireSeconds);\n const currentTimeInSeconds = this.timeToSeconds(currentHours, currentMinutes, currentSeconds);\n\n let halfwayTimeInSeconds: number;\n if (isHalfTime) {\n halfwayTimeInSeconds = expireTimeInSeconds + currentTimeInSeconds;\n } else {\n halfwayTimeInSeconds = Math.floor((expireTimeInSeconds + currentTimeInSeconds) / 2);\n }\n\n if (halfwayTimeInSeconds < 0) {\n halfwayTimeInSeconds += 12 * 3600;\n } else if (halfwayTimeInSeconds >= 12 * 3600) {\n halfwayTimeInSeconds -= 12 * 3600;\n }\n\n const halfwayTimeString = this.secondsToTimeString(halfwayTimeInSeconds);\n\n let isHalfTimeGreater = false;\n if (halfwayTimeString.endsWith('AM') && expireTime.endsWith('PM')) {\n isHalfTimeGreater = false;\n } else if (halfwayTimeString.endsWith('PM') && expireTime.endsWith('AM')) {\n isHalfTimeGreater = true;\n } else {\n isHalfTimeGreater = halfwayTimeString > expireTime;\n }\n\n return { halfwayTimeString, isHalfTimeGreater };\n }\n\n checkHalfTimeIsGreater() {\n // const getRefreshTokenHalfTime: string = localStorage.getItem(this.refreshTokenExpireTimeStorageKey) as string;\n const getRefreshTokenHalfTime = LocalStorageService.getItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME)\n if (!getRefreshTokenHalfTime) throw new Error('Refresh token half time is missing');\n const { isHalfTimeGreater, halfwayTimeString } = this.handleCalulateHalfTime(getRefreshTokenHalfTime, true);\n return { isHalfTimeGreater, halfwayTimeString };\n }\n}\n","/*\n * Public API Surface of platform-http-interceptor\n */\n\nexport * from './lib/http-auth.interceptor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAmBa,mBAAmB,CAAA;AAG9B,IAAA,WAAA,CACU,MAAc,EACd,wBAAkD,EAClD,mBAAwC,EAAA;QAFxC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAA0B;QAClD,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AALlD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;KAKpB;;;IAIL,SAAS,CAAC,OAA6B,EAAE,IAAiB,EAAA;QAExD,MAAM,uBAAuB,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAA;AACtG,QAAA,IAAI,uBAAuB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3B,SAAA;QAED,IAAI,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AACtB,gBAAA,UAAU,EAAE;oBACV,aAAa,EAAE,CAAU,OAAA,EAAA,SAAS,CAAE,CAAA;AACrC,iBAAA;AACF,aAAA,CAAC,CAAA;YACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC/B,aAAA;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9B,UAAU,CAAC,CAAC,KAAwB,KAAI;AACtC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;gBACxB,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACtE,gBAAA,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE;AACjD,oBAAA,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACtD,oBAAA,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAC5D,iBAAA;gBACD,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBACzE,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;AACtE,gBAAA,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACvD,gBAAA,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACvD,gBAAA,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAC3D,gBAAA,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;;AAEpE,gBAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,oBAAA,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC;AAClD,wBAAA,OAAO,EAAE,wBAAwB;AAClC,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,iBAAA;gBAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;AACjC,aAAA;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;AAC9C,gBAAA,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC;AAClD,oBAAA,OAAO,EAAE,CAA2C,yCAAA,CAAA;oBACpD,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;AACpC,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA,CAAC,CAAA;AACH,aAAA;AACD,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;AACxB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC;AAClD,oBAAA,OAAO,EAAE,CAAyC,uCAAA,CAAA;oBAClD,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;AACpC,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA,CAAC,CAAA;AACH,aAAA;AACD,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,CAAA;SAC/B,CAAC,CACH,CAAC;KACH;IAED,4BAA4B,GAAA;AAC1B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC5C,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAA;QACxE,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,6BAA6B,EAAE,iBAAiB,CAAC,CAAA;KAC1F;IAED,kBAAkB,GAAA;QAChB,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC5D,QAAA,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,4BAA4B,EAAE,CAAC;;;;;AAKrC,SAAA;KACF;IAED,YAAY,GAAA;;QAEV,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5F,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,CAAC;KAChF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,eAAe,CAAC;QACpB,UAAU,CAAC,MAAI;YACb,eAAe,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAC1E,YAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,eAAe,CAAC,CAAA;SACvE,EAAE,IAAI,CAAC,CAAA;AACR,QAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,eAAe,CAAC,CAAA;AACxE,QAAA,IAAI,CAAC,eAAe;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACxF,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACjE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,4BAA4B,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAC;AACtE,QAAA,OAAO,4BAA4B,CAAC;KACrC;IAED,cAAc,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AACvB,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AAC7C,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/D,QAAA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;KAC5C;AAED,IAAA,aAAa,CAAC,KAAa,EAAE,OAAe,EAAE,OAAe,EAAA;QAC3D,OAAO,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC;KAC9C;AAED,IAAA,mBAAmB,CAAC,OAAe,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AACpD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;AAClD,QAAA,MAAM,WAAW,GAAG,OAAO,GAAG,EAAE,CAAC;AACjC,QAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;KACjI;AAED,IAAA,sBAAsB,CAAC,UAAkB,EAAE,UAAA,GAAsB,KAAK,EAAA;AACpE,QAAA,MAAM,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtF,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAE/H,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAC1F,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AAE9F,QAAA,IAAI,oBAA4B,CAAC;AACjC,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,oBAAoB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AACnE,SAAA;AAAM,aAAA;AACL,YAAA,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,GAAG,oBAAoB,IAAI,CAAC,CAAC,CAAC;AACrF,SAAA;QAED,IAAI,oBAAoB,GAAG,CAAC,EAAE;AAC5B,YAAA,oBAAoB,IAAI,EAAE,GAAG,IAAI,CAAC;AACnC,SAAA;AAAM,aAAA,IAAI,oBAAoB,IAAI,EAAE,GAAG,IAAI,EAAE;AAC5C,YAAA,oBAAoB,IAAI,EAAE,GAAG,IAAI,CAAC;AACnC,SAAA;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;QAEzE,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAC9B,QAAA,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACjE,iBAAiB,GAAG,KAAK,CAAC;AAC3B,SAAA;AAAM,aAAA,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxE,iBAAiB,GAAG,IAAI,CAAC;AAC1B,SAAA;AAAM,aAAA;AACL,YAAA,iBAAiB,GAAG,iBAAiB,GAAG,UAAU,CAAC;AACpD,SAAA;AAED,QAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;KACjD;IAED,sBAAsB,GAAA;;QAEpB,MAAM,uBAAuB,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAA;AACtG,QAAA,IAAI,CAAC,uBAAuB;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACpF,QAAA,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;AAC5G,QAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;KACjD;+GAhLU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAHlB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAGP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACjBD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"progress-chef-platform-http-interceptor.mjs","sources":["../../../projects/platform-http-interceptor/src/lib/http-auth.interceptor.ts","../../../projects/platform-http-interceptor/src/public-api.ts","../../../projects/platform-http-interceptor/src/progress-chef-platform-http-interceptor.ts"],"sourcesContent":["import {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest\n} from '@angular/common/http';\nimport { RefreshTokenService } from '@progress-chef/platform-refresh-token-service'\nimport { Router } from '@angular/router';\nimport { ToastNotificationService } from '@progress-chef/platform-shared-components';\nimport { LocalStorageService, StorageKeys } from '@progress-chef/platform-storage-service';\nimport { Observable, catchError, throwError, timer } from 'rxjs';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class HttpAuthInterceptor implements HttpInterceptor {\n authTokenSet = new Set();\n isSessionExpired = false;\n constructor(\n private router: Router,\n private toastNotificationService: ToastNotificationService, \n private refreshTokenService: RefreshTokenService,\n ) { }\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n this.triggerRefreshTokenTimer();\n let authToken = LocalStorageService.getItem(StorageKeys.AUTH_TOKEN);\n let authReq = request;\n if (authToken) {\n authReq = request.clone({\n setHeaders: {\n Authorization: `Bearer ${authToken}`\n }\n })\n if (!this.authTokenSet.has(authToken)) {\n this.isSessionExpired = false;\n }\n this.authTokenSet.add(authToken);\n }\n return next.handle(authReq).pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.status === 401) {\n const loginType = LocalStorageService.getItem(StorageKeys.LOGIN_TYPE);\n if (loginType === 'saml' || loginType === 'oauth') {\n LocalStorageService.removeItem(StorageKeys.USER_NAME);\n LocalStorageService.removeItem(StorageKeys.IS_REMEMBER_ME); \n }\n LocalStorageService.setItem(StorageKeys.IS_USER_ORG_AND_ROLE_SET, false);\n LocalStorageService.setItem(StorageKeys.IS_USER_AUTHENTICATED, false);\n LocalStorageService.removeItem(StorageKeys.AUTH_TOKEN);\n LocalStorageService.removeItem(StorageKeys.LOGIN_TYPE);\n LocalStorageService.removeItem(StorageKeys.IDENTITY_TOKEN);\n LocalStorageService.removeItem(StorageKeys.USER_ORG_AND_ROLE_TOKEN);\n // call logout action\n if (!this.isSessionExpired) {\n this.toastNotificationService.showToastNotification({\n content: 'The session has ended.'\n });\n this.isSessionExpired = true;\n }\n \n this.router.navigate(['/login'])\n }\n if (error.status === 0 || error.status === 504) {\n this.toastNotificationService.showToastNotification({\n content: `Unable to reach server. Please try again.`,\n type: { style: 'error', icon: true },\n closable: true\n })\n }\n if (error.status === 500) {\n this.toastNotificationService.showToastNotification({\n content: `Something went wrong. Please try again.`,\n type: { style: 'error', icon: true },\n closable: true\n })\n }\n return throwError(() => error)\n })\n );\n }\n\n refreshToken() {\n const baseUrl = LocalStorageService.getItem(StorageKeys.CURRENT_SERVER_BASE_URL);\n if (!baseUrl) throw new Error('The backend or server base URL is missing in Local Storage');\n this.refreshTokenService.refreshToken({ platformServiceApiBaseUrls: baseUrl });\n }\n\n triggerRefreshTokenTimer() {\n const refreshTokenTime = 20 * 1000;\n timer(0, refreshTokenTime).subscribe(() => {\n this.refreshToken();\n })\n }\n\n // async manageRefreshTokenExpireTime() {\n // const newExpireTime = await this.getExpireAtTime()\n // const { halfwayTimeString } = this.handleCalulateHalfTime(newExpireTime)\n // LocalStorageService.setItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME, halfwayTimeString)\n // }\n\n // manageTokenRefresh() {\n // const { isHalfTimeGreater } = this.checkHalfTimeIsGreater();\n // if (isHalfTimeGreater) {\n // this.refreshToken();\n // this.manageRefreshTokenExpireTime();\n // // const newExpireTime = this.getExpireAtTime()\n // // const { halfwayTimeString } = this.handleCalulateHalfTime(newExpireTime)\n // // localStorage.setItem(this.refreshTokenExpireTimeStorageKey, halfwayTimeString)\n // // LocalStorageService.setItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME, halfwayTimeString)\n // }\n // }\n\n // async getExpireAtTime() {\n // await this.delay(2000)\n // let isIdentityToken = LocalStorageService.getItem(StorageKeys.IDENTITY_TOKEN);\n // console.log('======= check is token availabe --------', isIdentityToken) \n // if (!isIdentityToken) throw new Error('identity token is missing in the local storage');\n // const { expireAt } = isIdentityToken;\n // const date = new Date(expireAt * 1000);\n // const hours = date.getUTCHours().toString().padStart(2, '0');\n // const minutes = date.getUTCMinutes().toString().padStart(2, '0');\n // const seconds = date.getUTCSeconds().toString().padStart(2, '0');\n // const latestRefreshTokenExpireTime = `${hours}:${minutes}:${seconds}`; //10:00:00\n // return latestRefreshTokenExpireTime;\n // }\n\n // getCurrentTime() {\n // const now = new Date();\n // const options = { timeZone: 'Asia/Kolkata' };\n // const formattedTime = now.toLocaleString('en-IN', { hour12: true, ...options });\n // const [time, period] = formattedTime.split(', ')[1].split(' ');\n // const [hours, minutes, seconds] = time.split(':').map(Number);\n // return { hours, minutes, seconds, period };\n // }\n\n // timeToSeconds(hours: number, minutes: number, seconds: number) {\n // return hours * 3600 + minutes * 60 + seconds;\n // }\n\n // secondsToTimeString(seconds: number) {\n // const hours = Math.floor(seconds / 3600) % 12 || 12;\n // const minutes = Math.floor((seconds % 3600) / 60);\n // const secondsPart = seconds % 60;\n // return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secondsPart.toString().padStart(2, '0')}`;\n // }\n\n // handleCalulateHalfTime(expireTime: string, isHalfTime: boolean = false) {\n // const [expireHours, expireMinutes, expireSeconds] = expireTime.split(':').map(Number);\n // const { hours: currentHours, minutes: currentMinutes, seconds: currentSeconds, period: currentPeriod } = this.getCurrentTime();\n\n // const expireTimeInSeconds = this.timeToSeconds(expireHours, expireMinutes, expireSeconds);\n // const currentTimeInSeconds = this.timeToSeconds(currentHours, currentMinutes, currentSeconds);\n\n // let halfwayTimeInSeconds: number;\n // if (isHalfTime) {\n // halfwayTimeInSeconds = expireTimeInSeconds + currentTimeInSeconds;\n // } else {\n // halfwayTimeInSeconds = Math.floor((expireTimeInSeconds + currentTimeInSeconds) / 2);\n // }\n\n // if (halfwayTimeInSeconds < 0) {\n // halfwayTimeInSeconds += 12 * 3600;\n // } else if (halfwayTimeInSeconds >= 12 * 3600) {\n // halfwayTimeInSeconds -= 12 * 3600;\n // }\n\n // const halfwayTimeString = this.secondsToTimeString(halfwayTimeInSeconds);\n\n // let isHalfTimeGreater = false;\n // if (halfwayTimeString.endsWith('AM') && expireTime.endsWith('PM')) {\n // isHalfTimeGreater = false;\n // } else if (halfwayTimeString.endsWith('PM') && expireTime.endsWith('AM')) {\n // isHalfTimeGreater = true;\n // } else {\n // isHalfTimeGreater = halfwayTimeString > expireTime;\n // }\n\n // return { halfwayTimeString, isHalfTimeGreater };\n // }\n\n // checkHalfTimeIsGreater() {\n // // const getRefreshTokenHalfTime: string = localStorage.getItem(this.refreshTokenExpireTimeStorageKey) as string;\n // const getRefreshTokenHalfTime = LocalStorageService.getItem(StorageKeys.REFRESH_TOKEN_HALF_EXPRE_TIME)\n // if (!getRefreshTokenHalfTime) throw new Error('Refresh token half time is missing');\n // const { isHalfTimeGreater, halfwayTimeString } = this.handleCalulateHalfTime(getRefreshTokenHalfTime, true);\n // return { isHalfTimeGreater, halfwayTimeString };\n // }\n\n // delay(ms: number): Promise<void> {\n // return new Promise(resolve => setTimeout(resolve, ms));\n // }\n}\n","/*\n * Public API Surface of platform-http-interceptor\n */\n\nexport * from './lib/http-auth.interceptor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -12,26 +12,8 @@ export declare class HttpAuthInterceptor implements HttpInterceptor {
|
|
|
12
12
|
isSessionExpired: boolean;
|
|
13
13
|
constructor(router: Router, toastNotificationService: ToastNotificationService, refreshTokenService: RefreshTokenService);
|
|
14
14
|
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>>;
|
|
15
|
-
manageRefreshTokenExpireTime(): void;
|
|
16
|
-
manageTokenRefresh(): void;
|
|
17
15
|
refreshToken(): void;
|
|
18
|
-
|
|
19
|
-
getCurrentTime(): {
|
|
20
|
-
hours: number;
|
|
21
|
-
minutes: number;
|
|
22
|
-
seconds: number;
|
|
23
|
-
period: string;
|
|
24
|
-
};
|
|
25
|
-
timeToSeconds(hours: number, minutes: number, seconds: number): number;
|
|
26
|
-
secondsToTimeString(seconds: number): string;
|
|
27
|
-
handleCalulateHalfTime(expireTime: string, isHalfTime?: boolean): {
|
|
28
|
-
halfwayTimeString: string;
|
|
29
|
-
isHalfTimeGreater: boolean;
|
|
30
|
-
};
|
|
31
|
-
checkHalfTimeIsGreater(): {
|
|
32
|
-
isHalfTimeGreater: boolean;
|
|
33
|
-
halfwayTimeString: string;
|
|
34
|
-
};
|
|
16
|
+
triggerRefreshTokenTimer(): void;
|
|
35
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<HttpAuthInterceptor, never>;
|
|
36
18
|
static ɵprov: i0.ɵɵInjectableDeclaration<HttpAuthInterceptor>;
|
|
37
19
|
}
|