zek 17.3.92 → 17.3.97
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.
- package/esm2022/lib/services/auth.service.mjs +81 -90
- package/fesm2022/zek.mjs +79 -88
- package/fesm2022/zek.mjs.map +1 -1
- package/lib/services/auth.service.d.ts +15 -14
- package/package.json +1 -1
|
@@ -1,60 +1,71 @@
|
|
|
1
1
|
import { Injectable, } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
3
|
import { DateHelper, ObjectHelper, StorageHelper } from '../utils';
|
|
4
4
|
import { BitwiseHelper } from '../utils/bitwise-helper';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class AuthService {
|
|
7
|
+
static { this.USER_KEY = 'user'; }
|
|
8
|
+
static { this.REFRESH_TOKEN_INTERVAL = 15 * 60 * 1000; }
|
|
7
9
|
constructor() {
|
|
8
|
-
this._isInitialized = false;
|
|
9
10
|
this._auth = false;
|
|
10
11
|
this._user = null;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// access_token
|
|
14
|
-
get user() {
|
|
15
|
-
if (!this._isInitialized) {
|
|
16
|
-
const user = StorageHelper.get(AuthService.USER_KEY);
|
|
12
|
+
const user = StorageHelper.get(AuthService.USER_KEY);
|
|
13
|
+
if (user) {
|
|
17
14
|
this._init(user);
|
|
18
15
|
}
|
|
16
|
+
}
|
|
17
|
+
get _isAuthenticated() {
|
|
18
|
+
const expired = this.getExpired();
|
|
19
|
+
return new Date() < expired;
|
|
20
|
+
}
|
|
21
|
+
get user() {
|
|
19
22
|
return this._user;
|
|
20
23
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
get isAuthenticated() {
|
|
25
|
+
return this._auth;
|
|
26
|
+
}
|
|
27
|
+
_starTimer() {
|
|
28
|
+
this._stopTimer();
|
|
29
|
+
let interval = this.getExpired().getTime() - new Date().getTime();
|
|
30
|
+
if (interval < 1000)
|
|
31
|
+
interval = 1000;
|
|
32
|
+
if (interval > 0 && this._user) {
|
|
33
|
+
this._refreshTimerId = setInterval(() => {
|
|
34
|
+
this.emitOnRefreshToken();
|
|
35
|
+
}, interval);
|
|
36
|
+
if (this._user) {
|
|
37
|
+
this._timerId = setInterval(() => {
|
|
38
|
+
this._onTick();
|
|
39
|
+
}, 1000);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
_stopTimer() {
|
|
44
|
+
if (typeof this._timerId === 'number') {
|
|
45
|
+
clearInterval(this._timerId);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
_onTick() {
|
|
49
|
+
const newValue = this._isAuthenticated;
|
|
50
|
+
if (this._auth !== newValue) {
|
|
51
|
+
this._auth = newValue;
|
|
52
|
+
if (!newValue) {
|
|
53
|
+
this.logout();
|
|
32
54
|
}
|
|
33
55
|
}
|
|
34
|
-
this._user = user;
|
|
35
|
-
this._isInitialized = true;
|
|
36
|
-
this._starRefreshTokenTimer();
|
|
37
56
|
}
|
|
38
57
|
_starRefreshTokenTimer() {
|
|
39
58
|
this._stopRefreshTokenTimer();
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
if (timeout < 0) {
|
|
44
|
-
this.emitOnRefreshToken();
|
|
45
|
-
}
|
|
46
|
-
const minRefreshTime = 60000; //1 min;
|
|
47
|
-
if (timeout < minRefreshTime) {
|
|
48
|
-
timeout = minRefreshTime;
|
|
49
|
-
}
|
|
50
|
-
this._timerId = setInterval(() => {
|
|
59
|
+
const interval = AuthService.REFRESH_TOKEN_INTERVAL;
|
|
60
|
+
if (interval > 0 && this._user) {
|
|
61
|
+
this._refreshTimerId = setInterval(() => {
|
|
51
62
|
this.emitOnRefreshToken();
|
|
52
|
-
},
|
|
63
|
+
}, interval);
|
|
53
64
|
}
|
|
54
65
|
}
|
|
55
66
|
_stopRefreshTokenTimer() {
|
|
56
|
-
if (typeof this.
|
|
57
|
-
clearInterval(this.
|
|
67
|
+
if (typeof this._refreshTimerId === 'number') {
|
|
68
|
+
clearInterval(this._refreshTimerId);
|
|
58
69
|
}
|
|
59
70
|
}
|
|
60
71
|
emitOnRefreshToken() {
|
|
@@ -62,29 +73,6 @@ export class AuthService {
|
|
|
62
73
|
this._onRefreshTokenSubject.next();
|
|
63
74
|
}
|
|
64
75
|
}
|
|
65
|
-
get _isAuthenticated() {
|
|
66
|
-
const expired = this.getExpired();
|
|
67
|
-
return new Date() < expired;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Dynamic property. gets auth user and checks expired;
|
|
71
|
-
*/
|
|
72
|
-
get isAuthenticated() {
|
|
73
|
-
const newValue = this._isAuthenticated;
|
|
74
|
-
if (this._auth !== newValue) {
|
|
75
|
-
this._auth = newValue;
|
|
76
|
-
//if user is signed in and expired we need to logout (remove from localStorage)
|
|
77
|
-
if (!newValue) {
|
|
78
|
-
this.logout(); //this executes emitOnSignedIn so we don't need here execute emitOnSignedIn
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
//this line need if you already logged in and refresh page. (System will init user from storage and verify)
|
|
82
|
-
this.emitOnSignedIn();
|
|
83
|
-
}
|
|
84
|
-
return newValue;
|
|
85
|
-
}
|
|
86
|
-
return newValue;
|
|
87
|
-
}
|
|
88
76
|
emitOnSignedIn() {
|
|
89
77
|
if (this._onSignedInSubject) {
|
|
90
78
|
this._onSignedInSubject.next(this._auth);
|
|
@@ -92,7 +80,7 @@ export class AuthService {
|
|
|
92
80
|
}
|
|
93
81
|
get onSignedIn() {
|
|
94
82
|
if (!this._onSignedInSubject) {
|
|
95
|
-
this._onSignedInSubject = new
|
|
83
|
+
this._onSignedInSubject = new Subject(); //(this.isAuthenticated);
|
|
96
84
|
this._onSignedInObservable = this._onSignedInSubject.asObservable();
|
|
97
85
|
}
|
|
98
86
|
if (!this._onSignedInObservable)
|
|
@@ -108,41 +96,44 @@ export class AuthService {
|
|
|
108
96
|
throw new Error("onRefreshTokenObservable is undefined");
|
|
109
97
|
return this._onRefreshTokenObservable;
|
|
110
98
|
}
|
|
111
|
-
|
|
99
|
+
login(user) {
|
|
112
100
|
StorageHelper.set(AuthService.USER_KEY, user);
|
|
113
|
-
this._isInitialized = false; //user get method will init user
|
|
114
101
|
this._init(user);
|
|
115
|
-
this._auth = ObjectHelper.isDefined(user);
|
|
116
|
-
this.emitOnSignedIn();
|
|
117
102
|
}
|
|
118
|
-
|
|
119
|
-
|
|
103
|
+
_init(user) {
|
|
104
|
+
if (user) {
|
|
105
|
+
//convert string to local date/time
|
|
106
|
+
user.expired = ObjectHelper.isDefined(user.expired) ? DateHelper.parseDate(user.expired) : user.expired;
|
|
107
|
+
if (Array.isArray(user.roles)) {
|
|
108
|
+
user.roles = user.roles.map(function (e) { return e ? e.toUpperCase() : e; });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
this._user = user;
|
|
112
|
+
//if old value was false and we set true then we need to emit
|
|
113
|
+
if (!this._auth) {
|
|
114
|
+
this._auth = true;
|
|
115
|
+
this.emitOnSignedIn();
|
|
116
|
+
}
|
|
117
|
+
this._starTimer();
|
|
118
|
+
this._starRefreshTokenTimer();
|
|
120
119
|
}
|
|
121
120
|
logout() {
|
|
122
|
-
|
|
121
|
+
StorageHelper.set(AuthService.USER_KEY, null);
|
|
122
|
+
this._user = null;
|
|
123
|
+
if (this._auth) {
|
|
124
|
+
this._auth = false;
|
|
125
|
+
this.emitOnSignedIn();
|
|
126
|
+
}
|
|
127
|
+
this._stopTimer();
|
|
128
|
+
this._stopRefreshTokenTimer();
|
|
123
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
*
|
|
132
|
+
* @returns user expiry date. if user is null returns min JS date
|
|
133
|
+
*/
|
|
124
134
|
getExpired() {
|
|
125
|
-
return this.user?.expired ?? new Date(0);
|
|
126
|
-
}
|
|
127
|
-
// protected getRefreshTokenExpired(): Date | null | undefined {
|
|
128
|
-
// const user = this.user;
|
|
129
|
-
// if (user) {
|
|
130
|
-
// return user.refreshTokenTime;
|
|
131
|
-
// }
|
|
132
|
-
// return null;
|
|
133
|
-
// }
|
|
134
|
-
// isInRole(allowedRoles: string[]): boolean {
|
|
135
|
-
// if (!allowedRoles || allowedRoles.length === 0) {
|
|
136
|
-
// return true;
|
|
137
|
-
// }
|
|
138
|
-
// const tmp = this.getUser();
|
|
139
|
-
// const roles = tmp ? tmp.roles : null;
|
|
140
|
-
// if (!roles || roles.length === 0) {
|
|
141
|
-
// return false;
|
|
142
|
-
// }
|
|
143
|
-
// let isInRole = allowedRoles.some(role => roles.indexOf(role) !== -1);
|
|
144
|
-
// return isInRole;
|
|
145
|
-
// }
|
|
135
|
+
return this.user?.expired ?? new Date(0);
|
|
136
|
+
}
|
|
146
137
|
hasPermission(permission) {
|
|
147
138
|
if (!permission) {
|
|
148
139
|
return true;
|
|
@@ -205,5 +196,5 @@ export class AuthService {
|
|
|
205
196
|
}
|
|
206
197
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: AuthService, decorators: [{
|
|
207
198
|
type: Injectable
|
|
208
|
-
}] });
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFXLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFHeEQsTUFBTSxPQUFPLFdBQVc7SUFEeEI7UUFFWSxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsVUFBSyxHQUFxQixJQUFJLENBQUM7S0FtUDFDO2FBalBVLGFBQVEsR0FBRyxNQUFNLEFBQVQsQ0FBVTtJQUN6QixlQUFlO0lBRWYsSUFBSSxJQUFJO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxJQUFTO1FBQ25CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUU1SSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkYsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBR08sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBLGlCQUFpQjtZQUU1RSxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBRUQsTUFBTSxjQUFjLEdBQUcsS0FBTSxDQUFBLENBQUEsUUFBUTtZQUNyQyxJQUFJLE9BQU8sR0FBRyxjQUFjLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxHQUFHLGNBQWMsQ0FBQztZQUM3QixDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM5QixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFDTyxzQkFBc0I7UUFDMUIsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBR0QsSUFBWSxnQkFBZ0I7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLE9BQU8sSUFBSSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDaEMsQ0FBQztJQUNEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUd0QiwrRUFBK0U7WUFDL0UsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBLDJFQUEyRTtZQUM3RixDQUFDO2lCQUNJLENBQUM7Z0JBQ0YsMkdBQTJHO2dCQUMzRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNMLENBQUM7SUFJRCxJQUFJLFVBQVU7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUV6RCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUN0QyxDQUFDO0lBS0QsSUFBSSxjQUFjO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1lBQ2xELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEYsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUU3RCxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUMxQyxDQUFDO0lBSU8sTUFBTSxDQUFDLElBQVM7UUFDcEIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUEsZ0NBQWdDO1FBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQTRCO1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELE1BQU07UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFHUyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSw0Q0FBNEM7SUFDekYsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSw4QkFBOEI7SUFDOUIsa0JBQWtCO0lBQ2xCLHdDQUF3QztJQUN4QyxRQUFRO0lBRVIsbUJBQW1CO0lBQ25CLElBQUk7SUFHSiw4Q0FBOEM7SUFDOUMsd0RBQXdEO0lBQ3hELHVCQUF1QjtJQUN2QixRQUFRO0lBRVIsa0NBQWtDO0lBQ2xDLDRDQUE0QztJQUM1QywwQ0FBMEM7SUFDMUMsd0JBQXdCO0lBQ3hCLFFBQVE7SUFFUiw0RUFBNEU7SUFDNUUsdUJBQXVCO0lBQ3ZCLElBQUk7SUFHSixhQUFhLENBQUMsVUFBb0Q7UUFDOUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksS0FBZ0MsQ0FBQztRQUNyQyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDdEIsQ0FBQyxDQUFBLHdDQUF3QztRQUN6QyxJQUFJO2FBQ0MsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUc7Z0JBQ2YsT0FBTyxJQUFJLENBQUM7WUFFaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDckIsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDN0IsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFHRCxjQUFjLENBQUMsV0FBMkIsRUFBRSxLQUFxQjtRQUM3RCxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzFELElBQUksYUFBYTt3QkFDYixPQUFPLElBQUksQ0FBQztnQkFDcEIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLEtBQUs7b0JBQ0wsT0FBTyxJQUFJLENBQUM7WUFDcEIsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBR0QsaUJBQWlCLENBQUMsSUFBUztRQUN2Qix1REFBdUQ7UUFDdkQsbUNBQW1DO1FBQ25DLDhDQUE4QztRQUU5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRW5DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckQsb0NBQW9DO1FBQ3BDLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7OEdBclBRLFdBQVc7a0hBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBLZXlQYWlyLCBMb2dpblRva2VuLCBMb2dpblVzZXIgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb252ZXJ0LCBEYXRlSGVscGVyLCBPYmplY3RIZWxwZXIsIFN0b3JhZ2VIZWxwZXIgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IEJpdHdpc2VIZWxwZXIgfSBmcm9tICcuLi91dGlscy9iaXR3aXNlLWhlbHBlcic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9hdXRoID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF91c2VyOiBMb2dpblVzZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBzdGF0aWMgVVNFUl9LRVkgPSAndXNlcic7XHJcbiAgICAvLyBhY2Nlc3NfdG9rZW5cclxuXHJcbiAgICBnZXQgdXNlcigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IFN0b3JhZ2VIZWxwZXIuZ2V0KEF1dGhTZXJ2aWNlLlVTRVJfS0VZKTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdCh1c2VyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0cyB1c2VyIChwYXJzZXMgZmllbGRzIGFuZCBzdGFydHMgcmVmcmVzaCB0b2tlbiB0aW1lciBpZiBuZWVkZWQpXHJcbiAgICAgKiBAcGFyYW0gdXNlciB1c2VyIGZyb20ganNvbiBvciBzdG9yYWdlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2luaXQodXNlcjogYW55KSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgLy9jb252ZXJ0IHN0cmluZyB0byBzcGVjaWZpZWQgdHlwZXNcclxuICAgICAgICAgICAgdXNlci5leHBpcmVkID0gT2JqZWN0SGVscGVyLmlzRGVmaW5lZCh1c2VyLmV4cGlyZWQpID8gRGF0ZUhlbHBlci5wYXJzZURhdGUodXNlci5leHBpcmVkKSA6IHVzZXIuZXhwaXJlZDtcclxuICAgICAgICAgICAgdXNlci5yZWZyZXNoVG9rZW5UaW1lID0gT2JqZWN0SGVscGVyLmlzRGVmaW5lZCh1c2VyLnJlZnJlc2hUb2tlblRpbWUpID8gRGF0ZUhlbHBlci5wYXJzZURhdGUodXNlci5yZWZyZXNoVG9rZW5UaW1lKSA6IHVzZXIucmVmcmVzaFRva2VuVGltZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVzZXIucm9sZXMpKSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyLnJvbGVzID0gdXNlci5yb2xlcy5tYXAoZnVuY3Rpb24gKGU6IGFueSkgeyByZXR1cm4gZSA/IGUudG9VcHBlckNhc2UoKSA6IGU7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VzZXIgPSB1c2VyO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3N0YXJSZWZyZXNoVG9rZW5UaW1lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3RpbWVySWQ6IGFueTtcclxuICAgIHByaXZhdGUgX3N0YXJSZWZyZXNoVG9rZW5UaW1lcigpIHtcclxuICAgICAgICB0aGlzLl9zdG9wUmVmcmVzaFRva2VuVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3VzZXI7XHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5yZWZyZXNoVG9rZW5UaW1lKSB7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gdXNlci5yZWZyZXNoVG9rZW5UaW1lLmdldFRpbWUoKSAtIERhdGUubm93KCk7Ly8gLSAoNjAgKiAxMDAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aW1lb3V0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0T25SZWZyZXNoVG9rZW4oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbWluUmVmcmVzaFRpbWUgPSA2MF8wMDAvLzEgbWluO1xyXG4gICAgICAgICAgICBpZiAodGltZW91dCA8IG1pblJlZnJlc2hUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbWluUmVmcmVzaFRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRPblJlZnJlc2hUb2tlbigpO1xyXG4gICAgICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zdG9wUmVmcmVzaFRva2VuVGltZXIoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl90aW1lcklkID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX3RpbWVySWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVtaXRPblJlZnJlc2hUb2tlbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uUmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGdldCBfaXNBdXRoZW50aWNhdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IGV4cGlyZWQgPSB0aGlzLmdldEV4cGlyZWQoKVxyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpIDwgZXhwaXJlZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRHluYW1pYyBwcm9wZXJ0eS4gZ2V0cyBhdXRoIHVzZXIgYW5kIGNoZWNrcyBleHBpcmVkO1xyXG4gICAgICovXHJcbiAgICBnZXQgaXNBdXRoZW50aWNhdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5faXNBdXRoZW50aWNhdGVkO1xyXG4gICAgICAgIGlmICh0aGlzLl9hdXRoICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9hdXRoID0gbmV3VmFsdWU7XHJcblxyXG5cclxuICAgICAgICAgICAgLy9pZiB1c2VyIGlzIHNpZ25lZCBpbiBhbmQgZXhwaXJlZCB3ZSBuZWVkIHRvIGxvZ291dCAocmVtb3ZlIGZyb20gbG9jYWxTdG9yYWdlKVxyXG4gICAgICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ291dCgpOy8vdGhpcyBleGVjdXRlcyBlbWl0T25TaWduZWRJbiBzbyB3ZSBkb24ndCBuZWVkIGhlcmUgZXhlY3V0ZSBlbWl0T25TaWduZWRJblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy90aGlzIGxpbmUgbmVlZCBpZiB5b3UgYWxyZWFkeSBsb2dnZWQgaW4gYW5kIHJlZnJlc2ggcGFnZS4gKFN5c3RlbSB3aWxsIGluaXQgdXNlciBmcm9tIHN0b3JhZ2UgYW5kIHZlcmlmeSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdE9uU2lnbmVkSW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBlbWl0T25TaWduZWRJbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fb25TaWduZWRJblN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25TaWduZWRJblN1YmplY3QubmV4dCh0aGlzLl9hdXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfb25TaWduZWRJblN1YmplY3Q/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47Ly9CZWhhdmlvclN1YmplY3QgaXMgZm9yIGluaXRpYWwgZmlydCB2YWx1ZSA9IGZhbHNlXHJcbiAgICBwcml2YXRlIF9vblNpZ25lZEluT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBnZXQgb25TaWduZWRJbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX29uU2lnbmVkSW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2lnbmVkSW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2lnbmVkSW5PYnNlcnZhYmxlID0gdGhpcy5fb25TaWduZWRJblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX29uU2lnbmVkSW5PYnNlcnZhYmxlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfb25FeGVjdXRlT2JzZXJ2YWJsZSBpcyB1bmRlZmluZWRcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vblNpZ25lZEluT2JzZXJ2YWJsZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfb25SZWZyZXNoVG9rZW5TdWJqZWN0PzogU3ViamVjdDx2b2lkPjtcclxuICAgIHByaXZhdGUgX29uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8dm9pZD47XHJcbiAgICBnZXQgb25SZWZyZXNoVG9rZW4oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9vblJlZnJlc2hUb2tlblN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgICAgICAgICAgdGhpcy5fb25SZWZyZXNoVG9rZW5PYnNlcnZhYmxlID0gdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9vblJlZnJlc2hUb2tlbk9ic2VydmFibGUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZSBpcyB1bmRlZmluZWRcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vblJlZnJlc2hUb2tlbk9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBwcml2YXRlIF9sb2dpbih1c2VyOiBhbnkpIHtcclxuICAgICAgICBTdG9yYWdlSGVscGVyLnNldChBdXRoU2VydmljZS5VU0VSX0tFWSwgdXNlcik7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlOy8vdXNlciBnZXQgbWV0aG9kIHdpbGwgaW5pdCB1c2VyXHJcbiAgICAgICAgdGhpcy5faW5pdCh1c2VyKTtcclxuICAgICAgICB0aGlzLl9hdXRoID0gT2JqZWN0SGVscGVyLmlzRGVmaW5lZCh1c2VyKTtcclxuICAgICAgICB0aGlzLmVtaXRPblNpZ25lZEluKCk7XHJcbiAgICB9XHJcbiAgICBsb2dpbih1c2VyOiBMb2dpblRva2VuIHwgTG9naW5Vc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fbG9naW4odXNlcik7XHJcbiAgICB9XHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5fbG9naW4obnVsbCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRFeHBpcmVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXI/LmV4cGlyZWQgPz8gbmV3IERhdGUoMCk7Ly8gaWYgZ2V0RXhwaXJlZCBpcyBudWxsIHJldHVybiBtaW4gSlMgZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcm90ZWN0ZWQgZ2V0UmVmcmVzaFRva2VuRXhwaXJlZCgpOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCB7XHJcbiAgICAvLyAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlcjtcclxuICAgIC8vICAgICBpZiAodXNlcikge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdXNlci5yZWZyZXNoVG9rZW5UaW1lO1xyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICAgIC8vIGlzSW5Sb2xlKGFsbG93ZWRSb2xlczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIC8vICAgICBpZiAoIWFsbG93ZWRSb2xlcyB8fCBhbGxvd2VkUm9sZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgY29uc3QgdG1wID0gdGhpcy5nZXRVc2VyKCk7XHJcbiAgICAvLyAgICAgY29uc3Qgcm9sZXMgPSB0bXAgPyB0bXAucm9sZXMgOiBudWxsO1xyXG4gICAgLy8gICAgIGlmICghcm9sZXMgfHwgcm9sZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIGxldCBpc0luUm9sZSA9IGFsbG93ZWRSb2xlcy5zb21lKHJvbGUgPT4gcm9sZXMuaW5kZXhPZihyb2xlKSAhPT0gLTEpO1xyXG4gICAgLy8gICAgIHJldHVybiBpc0luUm9sZTtcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uPzogS2V5UGFpcjxudW1iZXIsIG51bWJlcj4gfCBudW1iZXIgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFwZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGtleSA9IDA7XHJcbiAgICAgICAgbGV0IHZhbHVlOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHBlcm1pc3Npb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGtleSA9ICtwZXJtaXNzaW9uO1xyXG4gICAgICAgIH0vLyBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwZXJtaXNzaW9uID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAoIXBlcm1pc3Npb24ua2V5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBwZXJtaXNzaW9uLmtleTtcclxuICAgICAgICAgICAgdmFsdWUgPSBwZXJtaXNzaW9uLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMoW2tleV0sIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGFzUGVybWlzc2lvbnMocGVybWlzc2lvbnM/OiBBcnJheTxudW1iZXI+LCB2YWx1ZT86IG51bWJlciB8IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXBlcm1pc3Npb25zIHx8IHBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXI7XHJcbiAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlciA/IHVzZXIucGVybWlzc2lvbnMgOiBudWxsO1xyXG4gICAgICAgIGlmICghdXNlclBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGVybWlzc2lvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHVzZXJQZXJtaXNzaW9uc1twXTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSBCaXR3aXNlSGVscGVyLmhhc0ZsYWcoZm91bmQsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGVybWlzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGVybWlzc2lvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHVzZXJQZXJtaXNzaW9uc1twXTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBoYXNEYXRhUGVybWlzc2lvbihkYXRhOiBhbnkpIHtcclxuICAgICAgICAvL2lmIChkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgLy8gY29uc3QgYWxsb3dlZFJvbGVzID0gZGF0YS5yb2xlcztcclxuICAgICAgICAvLyBsZXQgaXNJblJvbGUgPSB0aGlzLmlzSW5Sb2xlKGFsbG93ZWRSb2xlcyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBkYXRhLnBlcm1pc3Npb247XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSB0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbik7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBpc0luUm9sZSAmJiBoYXNQZXJtaXNzaW9uO1xyXG4gICAgICAgIHJldHVybiBoYXNQZXJtaXNzaW9uO1xyXG4gICAgfVxyXG59Il19
|
|
199
|
+
}], ctorParameters: () => [] });
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUErQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFHeEQsTUFBTSxPQUFPLFdBQVc7YUFDYixhQUFRLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDbEIsMkJBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEFBQWpCLENBQWtCO0lBTy9DO1FBTFEsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLFVBQUssR0FBcUIsSUFBSSxDQUFDO1FBS25DLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUM7SUFDTCxDQUFDO0lBR0QsSUFBWSxnQkFBZ0I7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLE9BQU8sSUFBSSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDaEMsQ0FBQztJQUlELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFJTyxVQUFVO1FBQ2QsSUFB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SSxDQUFDO2dCQUNwQixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksS0FBSztvQkFDTCxPQUFPLElBQUksQ0FBQztZQUNwQixDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFHRCxpQkFBaUIsQ0FBQyxJQUFTO1FBQ3ZCLHVEQUF1RDtRQUN2RCxtQ0FBbUM7UUFDbkMsOENBQThDO1FBRTlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyRCxvQ0FBb0M7UUFDcEMsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQzs4R0FqUFEsV0FBVztrSEFBWCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEtleVBhaXIsIExvZ2luVG9rZW4sIExvZ2luVXNlciB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IERhdGVIZWxwZXIsIE9iamVjdEhlbHBlciwgU3RvcmFnZUhlbHBlciB9IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQml0d2lzZUhlbHBlciB9IGZyb20gJy4uL3V0aWxzL2JpdHdpc2UtaGVscGVyJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuICAgIHN0YXRpYyBVU0VSX0tFWSA9ICd1c2VyJztcclxuICAgIHN0YXRpYyBSRUZSRVNIX1RPS0VOX0lOVEVSVkFMID0gMTUgKiA2MCAqIDEwMDA7XHJcblxyXG4gICAgcHJpdmF0ZSBfYXV0aCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfdXNlcjogTG9naW5Vc2VyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIF90aW1lcklkOiBhbnk7XHJcbiAgICBwcml2YXRlIF9yZWZyZXNoVGltZXJJZDogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBTdG9yYWdlSGVscGVyLmdldChBdXRoU2VydmljZS5VU0VSX0tFWSk7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5pdCh1c2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgZ2V0IF9pc0F1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICAgICAgY29uc3QgZXhwaXJlZCA9IHRoaXMuZ2V0RXhwaXJlZCgpXHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkgPCBleHBpcmVkO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgZ2V0IHVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXI7XHJcbiAgICB9XHJcbiAgICBnZXQgaXNBdXRoZW50aWNhdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfc3RhclRpbWVyKCkge1xyXG4gICAgICAgIHRoaXMuX3N0b3BUaW1lcigpOyAgICAgIFxyXG5cclxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSB0aGlzLmdldEV4cGlyZWQoKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBpZiAoaW50ZXJ2YWwgPCAxMDAwKVxyXG4gICAgICAgICAgICBpbnRlcnZhbCA9IDEwMDA7XHJcbiAgICAgICAgaWYgKGludGVydmFsID4gMCAmJiB0aGlzLl91c2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hUaW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0T25SZWZyZXNoVG9rZW4oKTtcclxuICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fdXNlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRpY2soKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc3RvcFRpbWVyKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fdGltZXJJZCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl90aW1lcklkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfb25UaWNrKCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5faXNBdXRoZW50aWNhdGVkO1xyXG4gICAgICAgIGlmICh0aGlzLl9hdXRoICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9hdXRoID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgX3N0YXJSZWZyZXNoVG9rZW5UaW1lcigpIHtcclxuICAgICAgICB0aGlzLl9zdG9wUmVmcmVzaFRva2VuVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBBdXRoU2VydmljZS5SRUZSRVNIX1RPS0VOX0lOVEVSVkFMO1xyXG4gICAgICAgIGlmIChpbnRlcnZhbCA+IDAgJiYgdGhpcy5fdXNlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdE9uUmVmcmVzaFRva2VuKCk7XHJcbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zdG9wUmVmcmVzaFRva2VuVGltZXIoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9yZWZyZXNoVGltZXJJZCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9yZWZyZXNoVGltZXJJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZW1pdE9uUmVmcmVzaFRva2VuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9vblJlZnJlc2hUb2tlblN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIGVtaXRPblNpZ25lZEluKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9vblNpZ25lZEluU3ViamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vblNpZ25lZEluU3ViamVjdC5uZXh0KHRoaXMuX2F1dGgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9vblNpZ25lZEluU3ViamVjdD86IFN1YmplY3Q8Ym9vbGVhbj47Ly9CZWhhdmlvclN1YmplY3QgaXMgZm9yIGluaXRpYWwgZmlydCB2YWx1ZSA9IGZhbHNlXHJcbiAgICBwcml2YXRlIF9vblNpZ25lZEluT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBnZXQgb25TaWduZWRJbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX29uU2lnbmVkSW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2lnbmVkSW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTsvLyh0aGlzLmlzQXV0aGVudGljYXRlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2lnbmVkSW5PYnNlcnZhYmxlID0gdGhpcy5fb25TaWduZWRJblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX29uU2lnbmVkSW5PYnNlcnZhYmxlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfb25FeGVjdXRlT2JzZXJ2YWJsZSBpcyB1bmRlZmluZWRcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vblNpZ25lZEluT2JzZXJ2YWJsZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfb25SZWZyZXNoVG9rZW5TdWJqZWN0PzogU3ViamVjdDx2b2lkPjtcclxuICAgIHByaXZhdGUgX29uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8dm9pZD47XHJcbiAgICBnZXQgb25SZWZyZXNoVG9rZW4oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9vblJlZnJlc2hUb2tlblN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgICAgICAgICAgdGhpcy5fb25SZWZyZXNoVG9rZW5PYnNlcnZhYmxlID0gdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9vblJlZnJlc2hUb2tlbk9ic2VydmFibGUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZSBpcyB1bmRlZmluZWRcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vblJlZnJlc2hUb2tlbk9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBsb2dpbih1c2VyOiBMb2dpblRva2VuIHwgTG9naW5Vc2VyKSB7XHJcbiAgICAgICAgU3RvcmFnZUhlbHBlci5zZXQoQXV0aFNlcnZpY2UuVVNFUl9LRVksIHVzZXIpO1xyXG4gICAgICAgIHRoaXMuX2luaXQodXNlcik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9pbml0KHVzZXI6IExvZ2luVG9rZW4gfCBMb2dpblVzZXIpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAvL2NvbnZlcnQgc3RyaW5nIHRvIGxvY2FsIGRhdGUvdGltZVxyXG4gICAgICAgICAgICB1c2VyLmV4cGlyZWQgPSBPYmplY3RIZWxwZXIuaXNEZWZpbmVkKHVzZXIuZXhwaXJlZCkgPyBEYXRlSGVscGVyLnBhcnNlRGF0ZSh1c2VyLmV4cGlyZWQpIDogdXNlci5leHBpcmVkO1xyXG5cclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXNlci5yb2xlcykpIHtcclxuICAgICAgICAgICAgICAgIHVzZXIucm9sZXMgPSB1c2VyLnJvbGVzLm1hcChmdW5jdGlvbiAoZTogYW55KSB7IHJldHVybiBlID8gZS50b1VwcGVyQ2FzZSgpIDogZTsgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IHVzZXIgYXMgYW55O1xyXG4gICAgICAgIC8vaWYgb2xkIHZhbHVlIHdhcyBmYWxzZSBhbmQgd2Ugc2V0IHRydWUgdGhlbiB3ZSBuZWVkIHRvIGVtaXRcclxuICAgICAgICBpZiAoIXRoaXMuX2F1dGgpIHtcclxuICAgICAgICAgICAgdGhpcy5fYXV0aCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdE9uU2lnbmVkSW4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJUaW1lcigpO1xyXG4gICAgICAgIHRoaXMuX3N0YXJSZWZyZXNoVG9rZW5UaW1lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICBTdG9yYWdlSGVscGVyLnNldChBdXRoU2VydmljZS5VU0VSX0tFWSwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2F1dGgpIHtcclxuICAgICAgICAgICAgdGhpcy5fYXV0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRPblNpZ25lZEluKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zdG9wVGltZXIoKTtcclxuICAgICAgICB0aGlzLl9zdG9wUmVmcmVzaFRva2VuVGltZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB1c2VyIGV4cGlyeSBkYXRlLiBpZiB1c2VyIGlzIG51bGwgcmV0dXJucyBtaW4gSlMgZGF0ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0RXhwaXJlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyPy5leHBpcmVkID8/IG5ldyBEYXRlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbj86IEtleVBhaXI8bnVtYmVyLCBudW1iZXI+IHwgbnVtYmVyIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghcGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBrZXkgPSAwO1xyXG4gICAgICAgIGxldCB2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodHlwZW9mIHBlcm1pc3Npb24gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwZXJtaXNzaW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBrZXkgPSArcGVybWlzc2lvbjtcclxuICAgICAgICB9Ly8gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwZXJtaXNzaW9uKSkge1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uLmtleSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAga2V5ID0gcGVybWlzc2lvbi5rZXk7XHJcbiAgICAgICAgICAgIHZhbHVlID0gcGVybWlzc2lvbi52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb25zKFtrZXldLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGhhc1Blcm1pc3Npb25zKHBlcm1pc3Npb25zPzogQXJyYXk8bnVtYmVyPiwgdmFsdWU/OiBudW1iZXIgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFwZXJtaXNzaW9ucyB8fCBwZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyO1xyXG4gICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXIgPyB1c2VyLnBlcm1pc3Npb25zIDogbnVsbDtcclxuICAgICAgICBpZiAoIXVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHBlcm1pc3Npb25zW2ldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB1c2VyUGVybWlzc2lvbnNbcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gQml0d2lzZUhlbHBlci5oYXNGbGFnKGZvdW5kLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Blcm1pc3Npb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHBlcm1pc3Npb25zW2ldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB1c2VyUGVybWlzc2lvbnNbcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGFzRGF0YVBlcm1pc3Npb24oZGF0YTogYW55KSB7XHJcbiAgICAgICAgLy9pZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIC8vIGNvbnN0IGFsbG93ZWRSb2xlcyA9IGRhdGEucm9sZXM7XHJcbiAgICAgICAgLy8gbGV0IGlzSW5Sb2xlID0gdGhpcy5pc0luUm9sZShhbGxvd2VkUm9sZXMpO1xyXG5cclxuICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gZGF0YS5wZXJtaXNzaW9uO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gdGhpcy5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24pO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gaXNJblJvbGUgJiYgaGFzUGVybWlzc2lvbjtcclxuICAgICAgICByZXR1cm4gaGFzUGVybWlzc2lvbjtcclxuICAgIH1cclxufSJdfQ==
|
package/fesm2022/zek.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { Injectable, inject, InjectionToken, Inject, Directive, EventEmitter, Input, Output, ViewChild, Pipe, Component, forwardRef, NgModule, HostListener, ViewEncapsulation, ChangeDetectionStrategy, Optional } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/router';
|
|
4
4
|
import { Router, NavigationStart, ActivatedRoute, RouterModule } from '@angular/router';
|
|
5
|
-
import {
|
|
5
|
+
import { Subject, of, tap, catchError, firstValueFrom, interval, BehaviorSubject, timer } from 'rxjs';
|
|
6
6
|
import * as i2 from '@ngx-translate/core';
|
|
7
7
|
import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
|
8
8
|
import * as i1$1 from '@angular/common/http';
|
|
@@ -1434,57 +1434,68 @@ class ValidationHelper {
|
|
|
1434
1434
|
}
|
|
1435
1435
|
|
|
1436
1436
|
class AuthService {
|
|
1437
|
+
static { this.USER_KEY = 'user'; }
|
|
1438
|
+
static { this.REFRESH_TOKEN_INTERVAL = 15 * 60 * 1000; }
|
|
1437
1439
|
constructor() {
|
|
1438
|
-
this._isInitialized = false;
|
|
1439
1440
|
this._auth = false;
|
|
1440
1441
|
this._user = null;
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
// access_token
|
|
1444
|
-
get user() {
|
|
1445
|
-
if (!this._isInitialized) {
|
|
1446
|
-
const user = StorageHelper.get(AuthService.USER_KEY);
|
|
1442
|
+
const user = StorageHelper.get(AuthService.USER_KEY);
|
|
1443
|
+
if (user) {
|
|
1447
1444
|
this._init(user);
|
|
1448
1445
|
}
|
|
1446
|
+
}
|
|
1447
|
+
get _isAuthenticated() {
|
|
1448
|
+
const expired = this.getExpired();
|
|
1449
|
+
return new Date() < expired;
|
|
1450
|
+
}
|
|
1451
|
+
get user() {
|
|
1449
1452
|
return this._user;
|
|
1450
1453
|
}
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1454
|
+
get isAuthenticated() {
|
|
1455
|
+
return this._auth;
|
|
1456
|
+
}
|
|
1457
|
+
_starTimer() {
|
|
1458
|
+
this._stopTimer();
|
|
1459
|
+
let interval = this.getExpired().getTime() - new Date().getTime();
|
|
1460
|
+
if (interval < 1000)
|
|
1461
|
+
interval = 1000;
|
|
1462
|
+
if (interval > 0 && this._user) {
|
|
1463
|
+
this._refreshTimerId = setInterval(() => {
|
|
1464
|
+
this.emitOnRefreshToken();
|
|
1465
|
+
}, interval);
|
|
1466
|
+
if (this._user) {
|
|
1467
|
+
this._timerId = setInterval(() => {
|
|
1468
|
+
this._onTick();
|
|
1469
|
+
}, 1000);
|
|
1470
|
+
}
|
|
1471
|
+
}
|
|
1472
|
+
}
|
|
1473
|
+
_stopTimer() {
|
|
1474
|
+
if (typeof this._timerId === 'number') {
|
|
1475
|
+
clearInterval(this._timerId);
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
_onTick() {
|
|
1479
|
+
const newValue = this._isAuthenticated;
|
|
1480
|
+
if (this._auth !== newValue) {
|
|
1481
|
+
this._auth = newValue;
|
|
1482
|
+
if (!newValue) {
|
|
1483
|
+
this.logout();
|
|
1462
1484
|
}
|
|
1463
1485
|
}
|
|
1464
|
-
this._user = user;
|
|
1465
|
-
this._isInitialized = true;
|
|
1466
|
-
this._starRefreshTokenTimer();
|
|
1467
1486
|
}
|
|
1468
1487
|
_starRefreshTokenTimer() {
|
|
1469
1488
|
this._stopRefreshTokenTimer();
|
|
1470
|
-
const
|
|
1471
|
-
if (
|
|
1472
|
-
|
|
1473
|
-
if (timeout < 0) {
|
|
1474
|
-
this.emitOnRefreshToken();
|
|
1475
|
-
}
|
|
1476
|
-
const minRefreshTime = 60000; //1 min;
|
|
1477
|
-
if (timeout < minRefreshTime) {
|
|
1478
|
-
timeout = minRefreshTime;
|
|
1479
|
-
}
|
|
1480
|
-
this._timerId = setInterval(() => {
|
|
1489
|
+
const interval = AuthService.REFRESH_TOKEN_INTERVAL;
|
|
1490
|
+
if (interval > 0 && this._user) {
|
|
1491
|
+
this._refreshTimerId = setInterval(() => {
|
|
1481
1492
|
this.emitOnRefreshToken();
|
|
1482
|
-
},
|
|
1493
|
+
}, interval);
|
|
1483
1494
|
}
|
|
1484
1495
|
}
|
|
1485
1496
|
_stopRefreshTokenTimer() {
|
|
1486
|
-
if (typeof this.
|
|
1487
|
-
clearInterval(this.
|
|
1497
|
+
if (typeof this._refreshTimerId === 'number') {
|
|
1498
|
+
clearInterval(this._refreshTimerId);
|
|
1488
1499
|
}
|
|
1489
1500
|
}
|
|
1490
1501
|
emitOnRefreshToken() {
|
|
@@ -1492,29 +1503,6 @@ class AuthService {
|
|
|
1492
1503
|
this._onRefreshTokenSubject.next();
|
|
1493
1504
|
}
|
|
1494
1505
|
}
|
|
1495
|
-
get _isAuthenticated() {
|
|
1496
|
-
const expired = this.getExpired();
|
|
1497
|
-
return new Date() < expired;
|
|
1498
|
-
}
|
|
1499
|
-
/**
|
|
1500
|
-
* Dynamic property. gets auth user and checks expired;
|
|
1501
|
-
*/
|
|
1502
|
-
get isAuthenticated() {
|
|
1503
|
-
const newValue = this._isAuthenticated;
|
|
1504
|
-
if (this._auth !== newValue) {
|
|
1505
|
-
this._auth = newValue;
|
|
1506
|
-
//if user is signed in and expired we need to logout (remove from localStorage)
|
|
1507
|
-
if (!newValue) {
|
|
1508
|
-
this.logout(); //this executes emitOnSignedIn so we don't need here execute emitOnSignedIn
|
|
1509
|
-
}
|
|
1510
|
-
else {
|
|
1511
|
-
//this line need if you already logged in and refresh page. (System will init user from storage and verify)
|
|
1512
|
-
this.emitOnSignedIn();
|
|
1513
|
-
}
|
|
1514
|
-
return newValue;
|
|
1515
|
-
}
|
|
1516
|
-
return newValue;
|
|
1517
|
-
}
|
|
1518
1506
|
emitOnSignedIn() {
|
|
1519
1507
|
if (this._onSignedInSubject) {
|
|
1520
1508
|
this._onSignedInSubject.next(this._auth);
|
|
@@ -1522,7 +1510,7 @@ class AuthService {
|
|
|
1522
1510
|
}
|
|
1523
1511
|
get onSignedIn() {
|
|
1524
1512
|
if (!this._onSignedInSubject) {
|
|
1525
|
-
this._onSignedInSubject = new
|
|
1513
|
+
this._onSignedInSubject = new Subject(); //(this.isAuthenticated);
|
|
1526
1514
|
this._onSignedInObservable = this._onSignedInSubject.asObservable();
|
|
1527
1515
|
}
|
|
1528
1516
|
if (!this._onSignedInObservable)
|
|
@@ -1538,41 +1526,44 @@ class AuthService {
|
|
|
1538
1526
|
throw new Error("onRefreshTokenObservable is undefined");
|
|
1539
1527
|
return this._onRefreshTokenObservable;
|
|
1540
1528
|
}
|
|
1541
|
-
|
|
1529
|
+
login(user) {
|
|
1542
1530
|
StorageHelper.set(AuthService.USER_KEY, user);
|
|
1543
|
-
this._isInitialized = false; //user get method will init user
|
|
1544
1531
|
this._init(user);
|
|
1545
|
-
this._auth = ObjectHelper.isDefined(user);
|
|
1546
|
-
this.emitOnSignedIn();
|
|
1547
1532
|
}
|
|
1548
|
-
|
|
1549
|
-
|
|
1533
|
+
_init(user) {
|
|
1534
|
+
if (user) {
|
|
1535
|
+
//convert string to local date/time
|
|
1536
|
+
user.expired = ObjectHelper.isDefined(user.expired) ? DateHelper.parseDate(user.expired) : user.expired;
|
|
1537
|
+
if (Array.isArray(user.roles)) {
|
|
1538
|
+
user.roles = user.roles.map(function (e) { return e ? e.toUpperCase() : e; });
|
|
1539
|
+
}
|
|
1540
|
+
}
|
|
1541
|
+
this._user = user;
|
|
1542
|
+
//if old value was false and we set true then we need to emit
|
|
1543
|
+
if (!this._auth) {
|
|
1544
|
+
this._auth = true;
|
|
1545
|
+
this.emitOnSignedIn();
|
|
1546
|
+
}
|
|
1547
|
+
this._starTimer();
|
|
1548
|
+
this._starRefreshTokenTimer();
|
|
1550
1549
|
}
|
|
1551
1550
|
logout() {
|
|
1552
|
-
|
|
1551
|
+
StorageHelper.set(AuthService.USER_KEY, null);
|
|
1552
|
+
this._user = null;
|
|
1553
|
+
if (this._auth) {
|
|
1554
|
+
this._auth = false;
|
|
1555
|
+
this.emitOnSignedIn();
|
|
1556
|
+
}
|
|
1557
|
+
this._stopTimer();
|
|
1558
|
+
this._stopRefreshTokenTimer();
|
|
1553
1559
|
}
|
|
1560
|
+
/**
|
|
1561
|
+
*
|
|
1562
|
+
* @returns user expiry date. if user is null returns min JS date
|
|
1563
|
+
*/
|
|
1554
1564
|
getExpired() {
|
|
1555
|
-
return this.user?.expired ?? new Date(0);
|
|
1565
|
+
return this.user?.expired ?? new Date(0);
|
|
1556
1566
|
}
|
|
1557
|
-
// protected getRefreshTokenExpired(): Date | null | undefined {
|
|
1558
|
-
// const user = this.user;
|
|
1559
|
-
// if (user) {
|
|
1560
|
-
// return user.refreshTokenTime;
|
|
1561
|
-
// }
|
|
1562
|
-
// return null;
|
|
1563
|
-
// }
|
|
1564
|
-
// isInRole(allowedRoles: string[]): boolean {
|
|
1565
|
-
// if (!allowedRoles || allowedRoles.length === 0) {
|
|
1566
|
-
// return true;
|
|
1567
|
-
// }
|
|
1568
|
-
// const tmp = this.getUser();
|
|
1569
|
-
// const roles = tmp ? tmp.roles : null;
|
|
1570
|
-
// if (!roles || roles.length === 0) {
|
|
1571
|
-
// return false;
|
|
1572
|
-
// }
|
|
1573
|
-
// let isInRole = allowedRoles.some(role => roles.indexOf(role) !== -1);
|
|
1574
|
-
// return isInRole;
|
|
1575
|
-
// }
|
|
1576
1567
|
hasPermission(permission) {
|
|
1577
1568
|
if (!permission) {
|
|
1578
1569
|
return true;
|
|
@@ -1635,7 +1626,7 @@ class AuthService {
|
|
|
1635
1626
|
}
|
|
1636
1627
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: AuthService, decorators: [{
|
|
1637
1628
|
type: Injectable
|
|
1638
|
-
}] });
|
|
1629
|
+
}], ctorParameters: () => [] });
|
|
1639
1630
|
|
|
1640
1631
|
const zekAuthGuard = (route, state) => {
|
|
1641
1632
|
const auth = inject(AuthService);
|