ssi-security-commons 0.19.0 → 0.19.1
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/alert/alert.component.mjs +28 -0
- package/esm2022/lib/services/auth-interceptor.service.mjs +165 -0
- package/esm2022/lib/services/crypto.service.mjs +41 -0
- package/esm2022/lib/services/jwt.service.mjs +43 -0
- package/esm2022/lib/services/messages.service.mjs +248 -0
- package/esm2022/lib/services/session.service.mjs +438 -0
- package/esm2022/lib/services/user-event.service.mjs +31 -0
- package/esm2022/lib/services/web-authn.service.mjs +249 -0
- package/esm2022/lib/shared/constants.mjs +5 -0
- package/esm2022/lib/ssi-security-commons.component.mjs +13 -0
- package/esm2022/lib/ssi-security-commons.module.mjs +63 -0
- package/esm2022/lib/ssi-security-commons.service.mjs +13 -0
- package/esm2022/lib/user.model.mjs +2 -0
- package/esm2022/public-api.mjs +16 -0
- package/esm2022/ssi-security-commons.mjs +5 -0
- package/fesm2022/ssi-security-commons.mjs +91 -52
- package/fesm2022/ssi-security-commons.mjs.map +1 -1
- package/lib/services/jwt.service.d.ts +1 -0
- package/lib/services/session.service.d.ts +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
/* eslint-disable max-lines-per-function */
|
|
2
|
+
/* eslint-disable arrow-body-style */
|
|
3
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
4
|
+
import { Inject, Injectable } from '@angular/core';
|
|
5
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
6
|
+
import { map } from 'rxjs/operators';
|
|
7
|
+
import { REFRESH_TOKEN, TOKEN, USERDATA } from '../shared/constants';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common/http";
|
|
10
|
+
import * as i2 from "./crypto.service";
|
|
11
|
+
import * as i3 from "./jwt.service";
|
|
12
|
+
export class SessionService {
|
|
13
|
+
constructor(http, environment, cryptoService, jwtService) {
|
|
14
|
+
this.http = http;
|
|
15
|
+
this.cryptoService = cryptoService;
|
|
16
|
+
this.jwtService = jwtService;
|
|
17
|
+
this.loginUrl = 'http://localhost:4200/login';
|
|
18
|
+
this.endPoint = environment.endPointCore;
|
|
19
|
+
this.applicationId = environment.applicationId;
|
|
20
|
+
this.environment = environment;
|
|
21
|
+
}
|
|
22
|
+
buildUserdataFromToken(token) {
|
|
23
|
+
const tokenData = this.jwtService.decodeToken(token);
|
|
24
|
+
const userData = {
|
|
25
|
+
givenName: tokenData.given_name,
|
|
26
|
+
familyName: tokenData.family_name,
|
|
27
|
+
name: tokenData.name,
|
|
28
|
+
roles: tokenData.realm_access.roles,
|
|
29
|
+
userId: tokenData.sub,
|
|
30
|
+
username: tokenData.preferred_username,
|
|
31
|
+
email: tokenData.email,
|
|
32
|
+
emailVerified: tokenData.email_verified,
|
|
33
|
+
countryCode: tokenData.country_code
|
|
34
|
+
};
|
|
35
|
+
return userData;
|
|
36
|
+
}
|
|
37
|
+
async reviewSessionData() {
|
|
38
|
+
const value = await this.checkSessionData();
|
|
39
|
+
console.log(`async result: ${value}`);
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
setUserdata(userdata) {
|
|
43
|
+
this.userdata = userdata;
|
|
44
|
+
}
|
|
45
|
+
setTokens(token, refreshToken) {
|
|
46
|
+
this.token = token;
|
|
47
|
+
this.refreshToken = refreshToken;
|
|
48
|
+
}
|
|
49
|
+
getUserdata() {
|
|
50
|
+
return this.userdata;
|
|
51
|
+
}
|
|
52
|
+
setRefreshToken(refreshToken) {
|
|
53
|
+
this.refreshToken = refreshToken;
|
|
54
|
+
this.saveStorageData(REFRESH_TOKEN, refreshToken);
|
|
55
|
+
}
|
|
56
|
+
getRefreshToken() {
|
|
57
|
+
return this.refreshToken;
|
|
58
|
+
}
|
|
59
|
+
setToken(token) {
|
|
60
|
+
this.token = token;
|
|
61
|
+
this.saveStorageData(TOKEN, token);
|
|
62
|
+
}
|
|
63
|
+
getToken() {
|
|
64
|
+
return this.token;
|
|
65
|
+
}
|
|
66
|
+
destroyCredentials() {
|
|
67
|
+
this.token = undefined;
|
|
68
|
+
this.refreshToken = undefined;
|
|
69
|
+
this.deleteStorageData(TOKEN);
|
|
70
|
+
this.deleteStorageData(REFRESH_TOKEN);
|
|
71
|
+
}
|
|
72
|
+
destroyUserData() {
|
|
73
|
+
this.userdata = undefined;
|
|
74
|
+
this.deleteStorageData(USERDATA);
|
|
75
|
+
}
|
|
76
|
+
saveCredentials(token, refreshToken) {
|
|
77
|
+
this.token = token;
|
|
78
|
+
this.refreshToken = refreshToken;
|
|
79
|
+
this.saveStorageData(TOKEN, token);
|
|
80
|
+
this.saveStorageData(REFRESH_TOKEN, refreshToken);
|
|
81
|
+
this.saveUserData(this.buildUserdataFromToken(token));
|
|
82
|
+
}
|
|
83
|
+
saveUserData(userData) {
|
|
84
|
+
this.userdata = userData;
|
|
85
|
+
this.saveStorageData(USERDATA, JSON.stringify(userData));
|
|
86
|
+
}
|
|
87
|
+
isLoggedIn() {
|
|
88
|
+
return !!this.userdata;
|
|
89
|
+
}
|
|
90
|
+
logout() {
|
|
91
|
+
let clientId = this.environment.authClient;
|
|
92
|
+
if (this.refreshToken) {
|
|
93
|
+
const decoded = this.jwtService.decodeToken(this.refreshToken);
|
|
94
|
+
clientId = decoded.azp;
|
|
95
|
+
}
|
|
96
|
+
return new Promise((resolve, reject) => {
|
|
97
|
+
this.logoutApiClient(clientId).subscribe(res => {
|
|
98
|
+
console.log(res);
|
|
99
|
+
this.destroyCredentials();
|
|
100
|
+
this.destroyUserData();
|
|
101
|
+
this.goToLogin();
|
|
102
|
+
resolve(null);
|
|
103
|
+
}, (err) => {
|
|
104
|
+
this.destroyCredentials();
|
|
105
|
+
this.destroyUserData();
|
|
106
|
+
console.error(err);
|
|
107
|
+
reject(err);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
getNewToken(refreshToken) {
|
|
112
|
+
console.log('getNewToken');
|
|
113
|
+
const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + this.environment.authClient;
|
|
114
|
+
const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
|
|
115
|
+
return this.http.post(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`, body, { headers })
|
|
116
|
+
.pipe(map(res => res));
|
|
117
|
+
}
|
|
118
|
+
getNewTokenClient(refreshToken, clientId) {
|
|
119
|
+
console.log('getNewToken');
|
|
120
|
+
const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;
|
|
121
|
+
const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
|
|
122
|
+
return this.http.post(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`, body, { headers })
|
|
123
|
+
.pipe(map(res => res));
|
|
124
|
+
}
|
|
125
|
+
getTokenClientCode(refreshToken, clientId) {
|
|
126
|
+
console.log('getNewToken');
|
|
127
|
+
const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;
|
|
128
|
+
const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
|
|
129
|
+
return this.http.post(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`, body, { headers })
|
|
130
|
+
.pipe(map(res => res));
|
|
131
|
+
}
|
|
132
|
+
getLoginUrl() {
|
|
133
|
+
return this.http.get(this.endPoint + '/auth/login/url/' + this.environment.authClient)
|
|
134
|
+
.pipe(map(res => res));
|
|
135
|
+
}
|
|
136
|
+
getHomeUrl() {
|
|
137
|
+
return this.http.get(this.endPoint + '/auth/home/url/' + this.environment.authClient)
|
|
138
|
+
.pipe(map(res => res));
|
|
139
|
+
}
|
|
140
|
+
logoutApi() {
|
|
141
|
+
const body = 'refresh_token=' + this.refreshToken + '&client_id=' + this.environment.authClient;
|
|
142
|
+
const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
|
|
143
|
+
return this.http.post(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`, body, { headers })
|
|
144
|
+
.pipe(map(res => res));
|
|
145
|
+
}
|
|
146
|
+
logoutApiClient(clientId) {
|
|
147
|
+
const body = 'refresh_token=' + this.refreshToken + '&client_id=' + clientId;
|
|
148
|
+
const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
|
|
149
|
+
return this.http.post(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`, body, { headers })
|
|
150
|
+
.pipe(map(res => res));
|
|
151
|
+
}
|
|
152
|
+
goToLogin() {
|
|
153
|
+
this.getLoginUrl().subscribe(res => {
|
|
154
|
+
console.log(res);
|
|
155
|
+
const loginUrl = res.data;
|
|
156
|
+
window.location.href = loginUrl;
|
|
157
|
+
}, (err) => {
|
|
158
|
+
console.error(err);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
loadSessionData() {
|
|
162
|
+
let data;
|
|
163
|
+
let token;
|
|
164
|
+
let refreshToken;
|
|
165
|
+
if (this.environment.production) {
|
|
166
|
+
const u = this.cryptoService.encrypt(USERDATA);
|
|
167
|
+
const t = this.cryptoService.encrypt(TOKEN);
|
|
168
|
+
const r = this.cryptoService.encrypt(REFRESH_TOKEN);
|
|
169
|
+
data = window.localStorage.getItem(u);
|
|
170
|
+
token = window.localStorage.getItem(t);
|
|
171
|
+
refreshToken = window.localStorage.getItem(r);
|
|
172
|
+
if (data && token && refreshToken) {
|
|
173
|
+
data = this.cryptoService.decrypt(data);
|
|
174
|
+
token = this.cryptoService.decrypt(token);
|
|
175
|
+
refreshToken = this.cryptoService.decrypt(refreshToken);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
data = window.localStorage.getItem(USERDATA);
|
|
180
|
+
token = window.localStorage.getItem(TOKEN);
|
|
181
|
+
refreshToken = window.localStorage.getItem(REFRESH_TOKEN);
|
|
182
|
+
}
|
|
183
|
+
if (data && token && refreshToken) {
|
|
184
|
+
const user = JSON.parse(data);
|
|
185
|
+
this.setTokens(token, refreshToken);
|
|
186
|
+
this.setUserdata(user);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
userHasOptionsInApp(userId, applicationId) {
|
|
190
|
+
return this.http.get(this.endPoint + `/security/option/${applicationId}/${userId}`)
|
|
191
|
+
.pipe(map(res => res));
|
|
192
|
+
}
|
|
193
|
+
checkAppPermissions() {
|
|
194
|
+
const promise = new Promise((resolve, reject) => {
|
|
195
|
+
console.log(this.userdata?.userId, this.applicationId);
|
|
196
|
+
if (this.applicationId) {
|
|
197
|
+
this.userHasOptionsInApp(this.userdata?.userId, this.applicationId).subscribe(res => {
|
|
198
|
+
console.log(res);
|
|
199
|
+
if (res.data) {
|
|
200
|
+
resolve('ok');
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
this.getHomeUrl().subscribe(res1 => {
|
|
204
|
+
console.log(res1);
|
|
205
|
+
const homeUrl = res1.data;
|
|
206
|
+
window.location.href = homeUrl;
|
|
207
|
+
reject('nok');
|
|
208
|
+
}, (err) => {
|
|
209
|
+
console.error(err);
|
|
210
|
+
reject('nok');
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}, (err) => {
|
|
214
|
+
console.error(err);
|
|
215
|
+
reject('nok');
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
resolve('ok');
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
return promise;
|
|
223
|
+
}
|
|
224
|
+
// eslint-disable-next-line max-len
|
|
225
|
+
getOptionsUser(applicationId, type, language, entityCode, parentOptionId, includeData) {
|
|
226
|
+
const param = {
|
|
227
|
+
userId: this.userdata?.userId,
|
|
228
|
+
applicationId,
|
|
229
|
+
type,
|
|
230
|
+
language,
|
|
231
|
+
entityCode,
|
|
232
|
+
parentOptionId,
|
|
233
|
+
includeData
|
|
234
|
+
};
|
|
235
|
+
return this.http.post(this.endPoint + '/security/option/user', param)
|
|
236
|
+
.pipe(map(res => res));
|
|
237
|
+
}
|
|
238
|
+
registerException(param) {
|
|
239
|
+
const headers = new HttpHeaders().set('skipError', 'true');
|
|
240
|
+
return this.http.post(this.endPoint + '/auth/exception/log', param, { headers })
|
|
241
|
+
.pipe(map(res => res));
|
|
242
|
+
}
|
|
243
|
+
saveStorageData(key, value) {
|
|
244
|
+
if (this.environment.production) {
|
|
245
|
+
const k = this.cryptoService.encrypt(key);
|
|
246
|
+
const v = this.cryptoService.encrypt(value);
|
|
247
|
+
window.localStorage.setItem(k, v);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
window.localStorage.setItem(key, value);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
deleteStorageData(key) {
|
|
254
|
+
if (this.environment.production) {
|
|
255
|
+
const k = this.cryptoService.encrypt(key);
|
|
256
|
+
window.localStorage.removeItem(k);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
window.localStorage.removeItem(key);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
getStorageData(key) {
|
|
263
|
+
let res;
|
|
264
|
+
if (this.environment.production) {
|
|
265
|
+
const k = this.cryptoService.encrypt(key);
|
|
266
|
+
const v = window.localStorage.getItem(k);
|
|
267
|
+
if (v) {
|
|
268
|
+
res = this.cryptoService.decrypt(v);
|
|
269
|
+
return res;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
res = null;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
res = window.localStorage.getItem(key);
|
|
277
|
+
}
|
|
278
|
+
return res;
|
|
279
|
+
}
|
|
280
|
+
removeUrlData() {
|
|
281
|
+
const url = new URL(window.location.href);
|
|
282
|
+
const queryParams = url.searchParams;
|
|
283
|
+
queryParams.delete('code');
|
|
284
|
+
const newUrl = url.origin + url.pathname + '?' + queryParams.toString();
|
|
285
|
+
window.history.replaceState({}, document.title, newUrl);
|
|
286
|
+
}
|
|
287
|
+
checkSessionData() {
|
|
288
|
+
const promise = new Promise((resolve, reject) => {
|
|
289
|
+
let data;
|
|
290
|
+
let token;
|
|
291
|
+
let refreshToken;
|
|
292
|
+
const currentUrl = new URL(window.location.href);
|
|
293
|
+
const code = currentUrl.searchParams.get('code');
|
|
294
|
+
console.log('code', code);
|
|
295
|
+
if (code) {
|
|
296
|
+
const codeDecoded = this.getDecodedAuthCode(code);
|
|
297
|
+
// console.log('code', codeDecoded);
|
|
298
|
+
const decoded = this.jwtService.decodeToken(codeDecoded);
|
|
299
|
+
this.getTokenClientCode(codeDecoded, decoded.azp).subscribe({
|
|
300
|
+
next: (res) => {
|
|
301
|
+
console.log(res);
|
|
302
|
+
token = res.access_token;
|
|
303
|
+
refreshToken = res.refresh_token;
|
|
304
|
+
this.saveCredentials(token, refreshToken);
|
|
305
|
+
this.checkAppPermissions().then((res1) => {
|
|
306
|
+
console.log(res1);
|
|
307
|
+
this.removeUrlData();
|
|
308
|
+
resolve('OK');
|
|
309
|
+
}, (err) => {
|
|
310
|
+
console.error(err);
|
|
311
|
+
reject(err);
|
|
312
|
+
});
|
|
313
|
+
},
|
|
314
|
+
error: (err) => {
|
|
315
|
+
console.error(err);
|
|
316
|
+
reject(err);
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
data = this.getStorageData(USERDATA);
|
|
322
|
+
token = this.getStorageData(TOKEN);
|
|
323
|
+
refreshToken = this.getStorageData(REFRESH_TOKEN);
|
|
324
|
+
if (data && token && refreshToken) {
|
|
325
|
+
this.saveCredentials(token, refreshToken);
|
|
326
|
+
this.checkAppPermissions().then((res1) => {
|
|
327
|
+
console.log(res1);
|
|
328
|
+
resolve('OK');
|
|
329
|
+
}, (err) => {
|
|
330
|
+
console.error(err);
|
|
331
|
+
reject(err);
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
const url = window.location.href;
|
|
336
|
+
if (url.indexOf('/redirect') > -1) {
|
|
337
|
+
resolve('OK');
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
this.destroyCredentials();
|
|
341
|
+
this.destroyUserData();
|
|
342
|
+
this.getLoginUrl().subscribe(res1 => {
|
|
343
|
+
console.log(res1);
|
|
344
|
+
this.loginUrl = res1.data;
|
|
345
|
+
if (url.indexOf('/login') < 0 && url.indexOf('/forgot') < 0 &&
|
|
346
|
+
url.indexOf('/reset') < 0 && url.indexOf('/verify') < 0 &&
|
|
347
|
+
url.indexOf('/sign_up') < 0) {
|
|
348
|
+
window.location.href = this.loginUrl + '?continue=' + encodeURIComponent(url);
|
|
349
|
+
}
|
|
350
|
+
resolve('NOK');
|
|
351
|
+
}, (err) => {
|
|
352
|
+
console.error(err);
|
|
353
|
+
reject(err);
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
return promise;
|
|
360
|
+
}
|
|
361
|
+
checkSessionDataMicrofront() {
|
|
362
|
+
const promise = new Promise((resolve, reject) => {
|
|
363
|
+
let data;
|
|
364
|
+
let token;
|
|
365
|
+
let refreshToken;
|
|
366
|
+
if (this.environment.production) {
|
|
367
|
+
const u = this.cryptoService.encrypt(USERDATA);
|
|
368
|
+
const t = this.cryptoService.encrypt(TOKEN);
|
|
369
|
+
const r = this.cryptoService.encrypt(REFRESH_TOKEN);
|
|
370
|
+
const d1 = window.localStorage.getItem(u);
|
|
371
|
+
const d2 = window.localStorage.getItem(t);
|
|
372
|
+
const d3 = window.localStorage.getItem(r);
|
|
373
|
+
if (d1 && d2 && d3) {
|
|
374
|
+
data = this.cryptoService.decrypt(d1);
|
|
375
|
+
token = this.cryptoService.decrypt(d2);
|
|
376
|
+
refreshToken = this.cryptoService.decrypt(d3);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
data = window.localStorage.getItem(USERDATA);
|
|
381
|
+
token = window.localStorage.getItem(TOKEN);
|
|
382
|
+
refreshToken = window.localStorage.getItem(REFRESH_TOKEN);
|
|
383
|
+
}
|
|
384
|
+
if (data && token && refreshToken) {
|
|
385
|
+
console.log('local session ok');
|
|
386
|
+
this.saveCredentials(token, refreshToken);
|
|
387
|
+
resolve('OK');
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
console.error('local session nok');
|
|
391
|
+
reject('NOK');
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
return promise;
|
|
395
|
+
}
|
|
396
|
+
getAuthCode() {
|
|
397
|
+
const enc = this.cryptoService.encrypt(this.refreshToken ? this.refreshToken : '');
|
|
398
|
+
return encodeURIComponent(enc);
|
|
399
|
+
}
|
|
400
|
+
getDecodedAuthCode(code) {
|
|
401
|
+
const dec = decodeURIComponent(code);
|
|
402
|
+
return this.cryptoService.decrypt(dec);
|
|
403
|
+
}
|
|
404
|
+
refreshSession() {
|
|
405
|
+
const promise = new Promise((resolve, reject) => {
|
|
406
|
+
const refreshToken = this.getRefreshToken();
|
|
407
|
+
if (refreshToken) {
|
|
408
|
+
const decoded = this.jwtService.decodeToken(refreshToken);
|
|
409
|
+
this.getNewTokenClient(refreshToken, decoded.azp).subscribe({
|
|
410
|
+
next: (res) => {
|
|
411
|
+
console.log(res);
|
|
412
|
+
this.setToken(res.access_token);
|
|
413
|
+
this.setRefreshToken(res.refresh_token);
|
|
414
|
+
this.saveCredentials(res.access_token, res.refresh_token);
|
|
415
|
+
resolve('OK');
|
|
416
|
+
},
|
|
417
|
+
error: (err) => {
|
|
418
|
+
console.error(err);
|
|
419
|
+
reject(err);
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
reject('NOK');
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
return promise;
|
|
428
|
+
}
|
|
429
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SessionService, deps: [{ token: i1.HttpClient }, { token: 'environment' }, { token: i2.CryptoService }, { token: i3.JwtService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
430
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SessionService }); }
|
|
431
|
+
}
|
|
432
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SessionService, decorators: [{
|
|
433
|
+
type: Injectable
|
|
434
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
435
|
+
type: Inject,
|
|
436
|
+
args: ['environment']
|
|
437
|
+
}] }, { type: i2.CryptoService }, { type: i3.JwtService }]; } });
|
|
438
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLHFDQUFxQztBQUNyQyx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFJckUsTUFBTSxPQUFPLGNBQWM7SUFVekIsWUFBb0IsSUFBZ0IsRUFDWCxXQUFnQixFQUNyQixhQUE0QixFQUM1QixVQUFzQjtRQUh0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBRWhCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFQMUMsYUFBUSxHQUFHLDZCQUE2QixDQUFDO1FBUXZDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEtBQWE7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQWE7WUFDekIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVO1lBQy9CLFVBQVUsRUFBRSxTQUFTLENB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USxFQUFFLEVBQUU7d0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoQixDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2QsQ0FBQztpQkFDRixDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDZjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0F4ZFUsY0FBYyw0Q0FXZixhQUFhO2tIQVhaLGNBQWM7OzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQVlOLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcy1wZXItZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGFycm93LWJvZHktc3R5bGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEZyb250RW5kRXhjZXB0aW9uLCBVc2VyRGF0YSB9IGZyb20gJy4uL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSnd0U2VydmljZSB9IGZyb20gJy4vand0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J5cHRvU2VydmljZSB9IGZyb20gJy4vY3J5cHRvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkVGUkVTSF9UT0tFTiwgVE9LRU4sIFVTRVJEQVRBIH0gZnJvbSAnLi4vc2hhcmVkL2NvbnN0YW50cyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlIHtcblxuICB1c2VyZGF0YTogVXNlckRhdGEgfCB1bmRlZmluZWQ7XG4gIHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBlbmRQb2ludDogc3RyaW5nO1xuICBsb2dpblVybCA9ICdodHRwOi8vbG9jYWxob3N0OjQyMDAvbG9naW4nO1xuICBhcHBsaWNhdGlvbklkOiBhbnk7XG4gIGVudmlyb25tZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGp3dFNlcnZpY2U6IEp3dFNlcnZpY2UpIHtcbiAgICB0aGlzLmVuZFBvaW50ID0gZW52aXJvbm1lbnQuZW5kUG9pbnRDb3JlO1xuICAgIHRoaXMuYXBwbGljYXRpb25JZCA9IGVudmlyb25tZW50LmFwcGxpY2F0aW9uSWQ7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkVXNlcmRhdGFGcm9tVG9rZW4odG9rZW46IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgdG9rZW5EYXRhID0gdGhpcy5qd3RTZXJ2aWNlLmRlY29kZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCB1c2VyRGF0YTogVXNlckRhdGEgPSB7XG4gICAgICBnaXZlbk5hbWU6IHRva2VuRGF0YS5naXZlbl9uYW1lLFxuICAgICAgZmFtaWx5TmFtZTogdG9rZW5EYXRhLmZhbWlseV9uYW1lLFxuICAgICAgbmFtZTogdG9rZW5EYXRhLm5hbWUsXG4gICAgICByb2xlczogdG9rZW5EYXRhLnJlYWxtX2FjY2Vzcy5yb2xlcyxcbiAgICAgIHVzZXJJZDogdG9rZW5EYXRhLnN1YixcbiAgICAgIHVzZXJuYW1lOiB0b2tlbkRhdGEucHJlZmVycmVkX3VzZXJuYW1lLFxuICAgICAgZW1haWw6IHRva2VuRGF0YS5lbWFpbCxcbiAgICAgIGVtYWlsVmVyaWZpZWQ6IHRva2VuRGF0YS5lbWFpbF92ZXJpZmllZCxcbiAgICAgIGNvdW50cnlDb2RlOiB0b2tlbkRhdGEuY291bnRyeV9jb2RlXG4gICAgfTtcbiAgICByZXR1cm4gdXNlckRhdGE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmV2aWV3U2Vzc2lvbkRhdGEoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuY2hlY2tTZXNzaW9uRGF0YSgpIGFzIGFueTtcbiAgICBjb25zb2xlLmxvZyhgYXN5bmMgcmVzdWx0OiAke3ZhbHVlfWApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRVc2VyZGF0YSh1c2VyZGF0YTogYW55KTogdm9pZCB7XG4gICAgdGhpcy51c2VyZGF0YSA9IHVzZXJkYXRhO1xuICB9XG5cbiAgcHVibGljIHNldFRva2Vucyh0b2tlbjogYW55LCByZWZyZXNoVG9rZW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyZGF0YSgpOiBVc2VyRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudXNlcmRhdGE7XG4gIH1cblxuICBwdWJsaWMgc2V0UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW47XG4gICAgdGhpcy5zYXZlU3RvcmFnZURhdGEoUkVGUkVTSF9UT0tFTiwgcmVmcmVzaFRva2VuKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW47XG4gIH1cblxuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IGFueSk6IGFueSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuc2F2ZVN0b3JhZ2VEYXRhKFRPS0VOLCB0b2tlbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW4oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50b2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95Q3JlZGVudGlhbHMoKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlbGV0ZVN0b3JhZ2VEYXRhKFRPS0VOKTtcbiAgICB0aGlzLmRlbGV0ZVN0b3JhZ2VEYXRhKFJFRlJFU0hfVE9LRU4pO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lVc2VyRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJkYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVsZXRlU3RvcmFnZURhdGEoVVNFUkRBVEEpO1xuICB9XG5cbiAgcHVibGljIHNhdmVDcmVkZW50aWFscyh0b2tlbjogYW55LCByZWZyZXNoVG9rZW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbjtcbiAgICB0aGlzLnNhdmVTdG9yYWdlRGF0YShUT0tFTiwgdG9rZW4pO1xuICAgIHRoaXMuc2F2ZVN0b3JhZ2VEYXRhKFJFRlJFU0hfVE9LRU4sIHJlZnJlc2hUb2tlbik7XG4gICAgdGhpcy5zYXZlVXNlckRhdGEodGhpcy5idWlsZFVzZXJkYXRhRnJvbVRva2VuKHRva2VuKSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVVzZXJEYXRhKHVzZXJEYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJkYXRhID0gdXNlckRhdGE7XG4gICAgdGhpcy5zYXZlU3RvcmFnZURhdGEoVVNFUkRBVEEsIEpTT04uc3RyaW5naWZ5KHVzZXJEYXRhKSk7XG4gIH1cblxuICBwdWJsaWMgaXNMb2dnZWRJbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnVzZXJkYXRhO1xuICB9XG5cbiAgbG9nb3V0KCk6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IGNsaWVudElkID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoQ2xpZW50O1xuICAgIGlmICh0aGlzLnJlZnJlc2hUb2tlbikge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuand0U2VydmljZS5kZWNvZGVUb2tlbih0aGlzLnJlZnJlc2hUb2tlbik7XG4gICAgICBjbGllbnRJZCA9IGRlY29kZWQuYXpwO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5sb2dvdXRBcGlDbGllbnQoY2xpZW50SWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lDcmVkZW50aWFscygpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lVc2VyRGF0YSgpO1xuICAgICAgICB0aGlzLmdvVG9Mb2dpbigpO1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3lDcmVkZW50aWFscygpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lVc2VyRGF0YSgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXROZXdUb2tlbihyZWZyZXNoVG9rZW46IHN0cmluZyk6IGFueSB7XG4gICAgY29uc29sZS5sb2coJ2dldE5ld1Rva2VuJyk7XG4gICAgY29uc3QgYm9keSA9ICdncmFudF90eXBlPXJlZnJlc2hfdG9rZW4nICsgJyZyZWZyZXNoX3Rva2VuPScgKyByZWZyZXNoVG9rZW4gKyAnJmNsaWVudF9pZD0nICsgdGhpcy5lbnZpcm9ubWVudC5hdXRoQ2xpZW50O1xuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZW52aXJvbm1lbnQuYXV0aEVuZFBvaW50fS9yZWFsbXMvJHt0aGlzLmVudmlyb25tZW50LmF1dGhSZWFsbX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW5gLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBnZXROZXdUb2tlbkNsaWVudChyZWZyZXNoVG9rZW46IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc29sZS5sb2coJ2dldE5ld1Rva2VuJyk7XG4gICAgY29uc3QgYm9keSA9ICdncmFudF90eXBlPXJlZnJlc2hfdG9rZW4nICsgJyZyZWZyZXNoX3Rva2VuPScgKyByZWZyZXNoVG9rZW4gKyAnJmNsaWVudF9pZD0nICsgY2xpZW50SWQ7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmAsXG4gICAgICBib2R5LCB7aGVhZGVyc30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIGdldFRva2VuQ2xpZW50Q29kZShyZWZyZXNoVG9rZW46IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc29sZS5sb2coJ2dldE5ld1Rva2VuJyk7XG4gICAgY29uc3QgYm9keSA9ICdncmFudF90eXBlPXJlZnJlc2hfdG9rZW4nICsgJyZyZWZyZXNoX3Rva2VuPScgKyByZWZyZXNoVG9rZW4gKyAnJmNsaWVudF9pZD0nICsgY2xpZW50SWQ7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmAsXG4gICAgICBib2R5LCB7aGVhZGVyc30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG5cbiAgZ2V0TG9naW5VcmwoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHRoaXMuZW5kUG9pbnQgKyAnL2F1dGgvbG9naW4vdXJsLycrdGhpcy5lbnZpcm9ubWVudC5hdXRoQ2xpZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBnZXRIb21lVXJsKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVuZFBvaW50ICsgJy9hdXRoL2hvbWUvdXJsLycrdGhpcy5lbnZpcm9ubWVudC5hdXRoQ2xpZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBsb2dvdXRBcGkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBib2R5ID0gJ3JlZnJlc2hfdG9rZW49JyArIHRoaXMucmVmcmVzaFRva2VuICsgJyZjbGllbnRfaWQ9JyArIHRoaXMuZW52aXJvbm1lbnQuYXV0aENsaWVudDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9sb2dvdXRgLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBsb2dvdXRBcGlDbGllbnQoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYm9keSA9ICdyZWZyZXNoX3Rva2VuPScgKyB0aGlzLnJlZnJlc2hUb2tlbiArICcmY2xpZW50X2lkPScgKyBjbGllbnRJZDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9sb2dvdXRgLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBnb1RvTG9naW4oKTogdm9pZCB7XG4gICAgdGhpcy5nZXRMb2dpblVybCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgIGNvbnN0IGxvZ2luVXJsID0gcmVzLmRhdGE7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGxvZ2luVXJsO1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkU2Vzc2lvbkRhdGEoKTogdm9pZCB7XG4gICAgbGV0IGRhdGE7XG4gICAgbGV0IHRva2VuO1xuICAgIGxldCByZWZyZXNoVG9rZW47XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgY29uc3QgdSA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KFVTRVJEQVRBKTtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChUT0tFTik7XG4gICAgICBjb25zdCByID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoUkVGUkVTSF9UT0tFTik7XG4gICAgICBkYXRhID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHUpO1xuICAgICAgdG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odCk7XG4gICAgICByZWZyZXNoVG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0ocik7XG4gICAgICBpZiAoZGF0YSAmJiB0b2tlbiAmJiByZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgZGF0YSA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGRhdGEpO1xuICAgICAgICB0b2tlbiA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KHRva2VuKTtcbiAgICAgICAgcmVmcmVzaFRva2VuID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmRlY3J5cHQocmVmcmVzaFRva2VuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShVU0VSREFUQSk7XG4gICAgICB0b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShUT0tFTik7XG4gICAgICByZWZyZXNoVG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oUkVGUkVTSF9UT0tFTik7XG4gICAgfVxuICAgIGlmIChkYXRhICYmIHRva2VuICYmIHJlZnJlc2hUb2tlbikge1xuICAgICAgY29uc3QgdXNlciA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB0aGlzLnNldFRva2Vucyh0b2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgIHRoaXMuc2V0VXNlcmRhdGEodXNlcik7XG4gICAgfVxuICB9XG5cbiAgdXNlckhhc09wdGlvbnNJbkFwcCh1c2VySWQ6IGFueSwgYXBwbGljYXRpb25JZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHRoaXMuZW5kUG9pbnQgKyBgL3NlY3VyaXR5L29wdGlvbi8ke2FwcGxpY2F0aW9uSWR9LyR7dXNlcklkfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIGNoZWNrQXBwUGVybWlzc2lvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc29sZS5sb2codGhpcy51c2VyZGF0YT8udXNlcklkLCB0aGlzLmFwcGxpY2F0aW9uSWQpO1xuICAgICAgaWYgKHRoaXMuYXBwbGljYXRpb25JZCkge1xuICAgICAgICB0aGlzLnVzZXJIYXNPcHRpb25zSW5BcHAodGhpcy51c2VyZGF0YT8udXNlcklkLCB0aGlzLmFwcGxpY2F0aW9uSWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgaWYgKHJlcy5kYXRhKSB7XG4gICAgICAgICAgICByZXNvbHZlKCdvaycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldEhvbWVVcmwoKS5zdWJzY3JpYmUocmVzMSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlczEpO1xuICAgICAgICAgICAgICBjb25zdCBob21lVXJsID0gcmVzMS5kYXRhO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGhvbWVVcmw7XG4gICAgICAgICAgICAgIHJlamVjdCgnbm9rJyk7XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgcmVqZWN0KCdub2snKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZWplY3QoJ25vaycpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoJ29rJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gIHB1YmxpYyBnZXRPcHRpb25zVXNlcihhcHBsaWNhdGlvbklkOiBudW1iZXIgfCBudWxsLCB0eXBlOiBzdHJpbmcgfCBudWxsLCBsYW5ndWFnZTogc3RyaW5nIHwgbnVsbCwgZW50aXR5Q29kZTogc3RyaW5nIHwgbnVsbCwgcGFyZW50T3B0aW9uSWQ6IG51bWJlciB8IG51bGwsIGluY2x1ZGVEYXRhOiBib29sZWFuIHwgbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICB1c2VySWQ6IHRoaXMudXNlcmRhdGE/LnVzZXJJZCxcbiAgICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgICB0eXBlLFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBlbnRpdHlDb2RlLFxuICAgICAgcGFyZW50T3B0aW9uSWQsXG4gICAgICBpbmNsdWRlRGF0YVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odGhpcy5lbmRQb2ludCArICcvc2VjdXJpdHkvb3B0aW9uL3VzZXInLCBwYXJhbSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcykpO1xuICB9XG5cbiAgcmVnaXN0ZXJFeGNlcHRpb24ocGFyYW06IEZyb250RW5kRXhjZXB0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdza2lwRXJyb3InLCAndHJ1ZScpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHRoaXMuZW5kUG9pbnQgKyAnL2F1dGgvZXhjZXB0aW9uL2xvZycsIHBhcmFtLCB7aGVhZGVyc30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIHNhdmVTdG9yYWdlRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IGsgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChrZXkpO1xuICAgICAgY29uc3QgdiA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KHZhbHVlKTtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrLCB2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVN0b3JhZ2VEYXRhKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgY29uc3QgayA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KGtleSk7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0b3JhZ2VEYXRhKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IHJlczogc3RyaW5nIHwgbnVsbDtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICBjb25zdCBrID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoa2V5KTtcbiAgICAgIGNvbnN0IHYgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oayk7XG4gICAgICBpZiAodikge1xuICAgICAgICByZXMgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZGVjcnlwdCh2KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcyA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cblxuICBwdWJsaWMgcmVtb3ZlVXJsRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXM7XG4gICAgcXVlcnlQYXJhbXMuZGVsZXRlKCdjb2RlJyk7XG4gICAgY29uc3QgbmV3VXJsID0gdXJsLm9yaWdpbiArIHVybC5wYXRobmFtZSArICc/JyArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgbmV3VXJsKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1Nlc3Npb25EYXRhKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgbGV0IHRva2VuO1xuICAgICAgbGV0IHJlZnJlc2hUb2tlbjtcblxuICAgICAgY29uc3QgY3VycmVudFVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgY29uc3QgY29kZSA9IGN1cnJlbnRVcmwuc2VhcmNoUGFyYW1zLmdldCgnY29kZScpO1xuICAgICAgY29uc29sZS5sb2coJ2NvZGUnLCBjb2RlKTtcbiAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgIGNvbnN0IGNvZGVEZWNvZGVkID0gdGhpcy5nZXREZWNvZGVkQXV0aENvZGUoY29kZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjb2RlJywgY29kZURlY29kZWQpO1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gdGhpcy5qd3RTZXJ2aWNlLmRlY29kZVRva2VuKGNvZGVEZWNvZGVkKTtcbiAgICAgICAgdGhpcy5nZXRUb2tlbkNsaWVudENvZGUoY29kZURlY29kZWQsIGRlY29kZWQuYXpwKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgICB0b2tlbiA9IHJlcy5hY2Nlc3NfdG9rZW47XG4gICAgICAgICAgICByZWZyZXNoVG9rZW4gPSByZXMucmVmcmVzaF90b2tlbjtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNyZWRlbnRpYWxzKHRva2VuLCByZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5jaGVja0FwcFBlcm1pc3Npb25zKCkudGhlbigocmVzMSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMxKTtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVVcmxEYXRhKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U3RvcmFnZURhdGEoVVNFUkRBVEEpO1xuICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0U3RvcmFnZURhdGEoVE9LRU4pO1xuICAgICAgICByZWZyZXNoVG9rZW4gPSB0aGlzLmdldFN0b3JhZ2VEYXRhKFJFRlJFU0hfVE9LRU4pO1xuICAgICAgICBpZiAoZGF0YSAmJiB0b2tlbiAmJiByZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICB0aGlzLnNhdmVDcmVkZW50aWFscyh0b2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgICAgICB0aGlzLmNoZWNrQXBwUGVybWlzc2lvbnMoKS50aGVuKChyZXMxKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMxKTtcbiAgICAgICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvcmVkaXJlY3QnKT4tMSkge1xuICAgICAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95Q3JlZGVudGlhbHMoKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveVVzZXJEYXRhKCk7XG4gICAgICAgICAgICB0aGlzLmdldExvZ2luVXJsKCkuc3Vic2NyaWJlKHJlczEgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMxKTtcbiAgICAgICAgICAgICAgdGhpcy5sb2dpblVybCA9IHJlczEuZGF0YTtcbiAgICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvbG9naW4nKTwwICYmIHVybC5pbmRleE9mKCcvZm9yZ290Jyk8MCAmJlxuICAgICAgICAgICAgICAgICAgdXJsLmluZGV4T2YoJy9yZXNldCcpPDAgJiYgdXJsLmluZGV4T2YoJy92ZXJpZnknKTwwICYmXG4gICAgICAgICAgICAgICAgICB1cmwuaW5kZXhPZignL3NpZ25fdXAnKTwwKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLmxvZ2luVXJsICsgJz9jb250aW51ZT0nK2VuY29kZVVSSUNvbXBvbmVudCh1cmwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUoJ05PSycpO1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG5cbiAgcHVibGljIGNoZWNrU2Vzc2lvbkRhdGFNaWNyb2Zyb250KCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgbGV0IHRva2VuO1xuICAgICAgbGV0IHJlZnJlc2hUb2tlbjtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgICAgY29uc3QgdSA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KFVTRVJEQVRBKTtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KFRPS0VOKTtcbiAgICAgICAgY29uc3QgciA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KFJFRlJFU0hfVE9LRU4pO1xuICAgICAgICBjb25zdCBkMSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh1KTtcbiAgICAgICAgY29uc3QgZDIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odCk7XG4gICAgICAgIGNvbnN0IGQzID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHIpO1xuICAgICAgICBpZiAoZDEgJiYgZDIgJiYgZDMpIHtcbiAgICAgICAgICBkYXRhID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmRlY3J5cHQoZDEpO1xuICAgICAgICAgIHRva2VuID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmRlY3J5cHQoZDIpO1xuICAgICAgICAgIHJlZnJlc2hUb2tlbiA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGQzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShVU0VSREFUQSk7XG4gICAgICAgIHRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFRPS0VOKTtcbiAgICAgICAgcmVmcmVzaFRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFJFRlJFU0hfVE9LRU4pO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEgJiYgdG9rZW4gJiYgcmVmcmVzaFRva2VuKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdsb2NhbCBzZXNzaW9uIG9rJyk7XG4gICAgICAgIHRoaXMuc2F2ZUNyZWRlbnRpYWxzKHRva2VuLCByZWZyZXNoVG9rZW4pO1xuICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbG9jYWwgc2Vzc2lvbiBub2snKTtcbiAgICAgICAgcmVqZWN0KCdOT0snKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdXRoQ29kZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVuYyA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KHRoaXMucmVmcmVzaFRva2VuP3RoaXMucmVmcmVzaFRva2VuOicnKTtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGVuYyk7XG4gIH1cblxuICBwcml2YXRlIGdldERlY29kZWRBdXRoQ29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlYyA9IGRlY29kZVVSSUNvbXBvbmVudChjb2RlKTtcbiAgICByZXR1cm4gdGhpcy5jcnlwdG9TZXJ2aWNlLmRlY3J5cHQoZGVjKTtcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoU2Vzc2lvbigpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLmdldFJlZnJlc2hUb2tlbigpO1xuICAgICAgaWYgKHJlZnJlc2hUb2tlbikge1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gdGhpcy5qd3RTZXJ2aWNlLmRlY29kZVRva2VuKHJlZnJlc2hUb2tlbik7XG4gICAgICAgIHRoaXMuZ2V0TmV3VG9rZW5DbGllbnQocmVmcmVzaFRva2VuLCBkZWNvZGVkLmF6cCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgICB0aGlzLnNldFRva2VuKHJlcy5hY2Nlc3NfdG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5zZXRSZWZyZXNoVG9rZW4ocmVzLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5zYXZlQ3JlZGVudGlhbHMocmVzLmFjY2Vzc190b2tlbiwgcmVzLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QoJ05PSycpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbn1cblxuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
export class UserEventService {
|
|
6
|
+
constructor(http, environment) {
|
|
7
|
+
this.http = http;
|
|
8
|
+
this.endPoint = environment.endPointCore;
|
|
9
|
+
}
|
|
10
|
+
registerUserEvent(eventType, optionId, entityType, entityId, paramsIn, paramsOut) {
|
|
11
|
+
const param = {
|
|
12
|
+
eventType,
|
|
13
|
+
optionId,
|
|
14
|
+
entityType,
|
|
15
|
+
entityId,
|
|
16
|
+
paramsIn,
|
|
17
|
+
paramsOut
|
|
18
|
+
};
|
|
19
|
+
return this.http.post(this.endPoint + '/security/user/event', param)
|
|
20
|
+
.pipe(map((res) => res));
|
|
21
|
+
}
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: UserEventService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
23
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: UserEventService }); }
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: UserEventService, decorators: [{
|
|
26
|
+
type: Injectable
|
|
27
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
28
|
+
type: Inject,
|
|
29
|
+
args: ['environment']
|
|
30
|
+
}] }]; } });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLWV2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFJckMsTUFBTSxPQUFPLGdCQUFnQjtJQUkzQixZQUFvQixJQUFnQixFQUNYLFdBQWdCO1FBRHJCLFNBQUksR0FBSixJQUFJLENBQVk7UUFFbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO0lBQzNDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxTQUFpQixFQUNqQixRQUF1QixFQUN2QixVQUF5QixFQUN6QixRQUF1QixFQUN2QixRQUF1QixFQUN2QixTQUF3QjtRQUMvQyxNQUFNLEtBQUssR0FBRztZQUNaLFNBQVM7WUFDVCxRQUFRO1lBQ1IsVUFBVTtZQUNWLFFBQVE7WUFDUixRQUFRO1lBQ1IsU0FBUztTQUNWLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLEVBQUUsS0FBSyxDQUFDO2FBQ3RFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0ExQlUsZ0JBQWdCLDRDQUtqQixhQUFhO2tIQUxaLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7MEJBTU4sTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyRXZlbnRTZXJ2aWNlIHtcblxuICBlbmRQb2ludDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnkpIHtcbiAgICB0aGlzLmVuZFBvaW50ID0gZW52aXJvbm1lbnQuZW5kUG9pbnRDb3JlO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyVXNlckV2ZW50KGV2ZW50VHlwZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQ6IG51bWJlciB8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiBzdHJpbmcgfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZyB8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNJbjogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc091dDogc3RyaW5nIHwgbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICBldmVudFR5cGUsXG4gICAgICBvcHRpb25JZCxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBlbnRpdHlJZCxcbiAgICAgIHBhcmFtc0luLFxuICAgICAgcGFyYW1zT3V0XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmVuZFBvaW50ICsgJy9zZWN1cml0eS91c2VyL2V2ZW50JywgcGFyYW0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzKSk7XG4gIH1cblxufVxuIl19
|