ssi-security-commons 0.0.21 → 0.16.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.
Files changed (34) hide show
  1. package/{esm2020 → esm2022}/lib/alert/alert.component.mjs +5 -5
  2. package/esm2022/lib/services/auth-interceptor.service.mjs +162 -0
  3. package/esm2022/lib/services/crypto.service.mjs +41 -0
  4. package/esm2022/lib/services/jwt.service.mjs +29 -0
  5. package/{esm2020 → esm2022}/lib/services/messages.service.mjs +4 -4
  6. package/esm2022/lib/services/session.service.mjs +318 -0
  7. package/esm2022/lib/shared/constants.mjs +5 -0
  8. package/esm2022/lib/ssi-security-commons.component.mjs +13 -0
  9. package/esm2022/lib/ssi-security-commons.module.mjs +56 -0
  10. package/{esm2020 → esm2022}/lib/ssi-security-commons.service.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/user.model.mjs +1 -1
  12. package/esm2022/public-api.mjs +14 -0
  13. package/{fesm2020 → fesm2022}/ssi-security-commons.mjs +224 -132
  14. package/fesm2022/ssi-security-commons.mjs.map +1 -0
  15. package/lib/alert/alert.component.d.ts +1 -1
  16. package/lib/services/auth-interceptor.service.d.ts +2 -1
  17. package/lib/services/jwt.service.d.ts +6 -0
  18. package/lib/services/session.service.d.ts +14 -6
  19. package/lib/shared/constants.d.ts +4 -0
  20. package/lib/ssi-security-commons.component.d.ts +1 -1
  21. package/lib/user.model.d.ts +13 -1
  22. package/package.json +10 -16
  23. package/public-api.d.ts +2 -0
  24. package/esm2020/lib/services/auth-interceptor.service.mjs +0 -162
  25. package/esm2020/lib/services/crypto.service.mjs +0 -35
  26. package/esm2020/lib/services/session.service.mjs +0 -258
  27. package/esm2020/lib/ssi-security-commons.component.mjs +0 -17
  28. package/esm2020/lib/ssi-security-commons.module.mjs +0 -55
  29. package/esm2020/public-api.mjs +0 -12
  30. package/fesm2015/ssi-security-commons.mjs +0 -768
  31. package/fesm2015/ssi-security-commons.mjs.map +0 -1
  32. package/fesm2020/ssi-security-commons.mjs.map +0 -1
  33. /package/{esm2020 → esm2022}/ssi-security-commons.mjs +0 -0
  34. /package/{ssi-security-commons.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,318 @@
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 { CrossStorageClient } from 'cross-storage';
8
+ import { REFRESH_TOKEN, TOKEN, USERDATA } from '../shared/constants';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common/http";
11
+ import * as i2 from "./crypto.service";
12
+ import * as i3 from "./jwt.service";
13
+ export class SessionService {
14
+ constructor(http, environment, cryptoService, jwtService) {
15
+ this.http = http;
16
+ this.cryptoService = cryptoService;
17
+ this.jwtService = jwtService;
18
+ this.loginUrl = 'http://localhost:4200/login';
19
+ this.endPoint = environment.endPoint;
20
+ this.applicationId = environment.applicationId;
21
+ const urlHub = environment.sessionHub;
22
+ this.environment = environment;
23
+ console.log(urlHub);
24
+ this.storage = new CrossStorageClient(urlHub, { timeout: 5000 });
25
+ }
26
+ checkSessionData() {
27
+ const promise = new Promise((resolve, reject) => {
28
+ let data;
29
+ let token;
30
+ let refreshToken;
31
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
32
+ const self = this;
33
+ this.storage.onConnect().then(function () {
34
+ if (self.environment.production) {
35
+ const u = self.cryptoService.encrypt(USERDATA);
36
+ const t = self.cryptoService.encrypt(TOKEN);
37
+ const r = self.cryptoService.encrypt(REFRESH_TOKEN);
38
+ return self.storage.get(u, t, r);
39
+ }
40
+ else {
41
+ return self.storage.get(USERDATA, TOKEN, REFRESH_TOKEN);
42
+ }
43
+ }).then(function (res) {
44
+ console.log(res);
45
+ if (self.environment.production) {
46
+ data = self.cryptoService.decrypt(res[0]);
47
+ token = self.cryptoService.decrypt(res[1]);
48
+ refreshToken = self.cryptoService.decrypt(res[2]);
49
+ }
50
+ else {
51
+ data = res[0];
52
+ token = res[1];
53
+ refreshToken = res[2];
54
+ }
55
+ if (data && token && refreshToken) {
56
+ self.saveCredentials(token, refreshToken);
57
+ self.checkAppPermissions().then((res1) => {
58
+ console.log(res1);
59
+ resolve('OK');
60
+ }, (err) => {
61
+ console.error(err);
62
+ reject(err);
63
+ });
64
+ }
65
+ else {
66
+ self.destroyCredentials();
67
+ self.destroyUserData();
68
+ self.getLoginUrl().subscribe(res1 => {
69
+ console.log(res1);
70
+ self.loginUrl = res1.data;
71
+ const url = window.location.href;
72
+ if (url.indexOf('/login') < 0 && url.indexOf('/forgot') < 0 && url.indexOf('/reset') < 0) {
73
+ window.location.href = self.loginUrl + '?continue=' + encodeURIComponent(url);
74
+ }
75
+ resolve('NOK');
76
+ }, (err) => {
77
+ console.error(err);
78
+ reject(err);
79
+ });
80
+ }
81
+ }).catch(function (err) {
82
+ console.error(err);
83
+ reject(err);
84
+ });
85
+ });
86
+ return promise;
87
+ }
88
+ buildUserdataFromToken(token) {
89
+ const tokenData = this.jwtService.decodeToken(token);
90
+ const userData = {
91
+ givenName: tokenData.given_name,
92
+ familyName: tokenData.family_name,
93
+ name: tokenData.name,
94
+ roles: tokenData.realm_access.roles,
95
+ userId: tokenData.sub,
96
+ username: tokenData.preferred_username,
97
+ email: tokenData.email,
98
+ emailVerified: tokenData.email_verified
99
+ };
100
+ return userData;
101
+ }
102
+ async reviewSessionData() {
103
+ const value = await this.checkSessionData();
104
+ console.log(`async result: ${value}`);
105
+ return value;
106
+ }
107
+ setUserdata(userdata) {
108
+ this.userdata = userdata;
109
+ }
110
+ setTokens(token, refreshToken) {
111
+ this.token = token;
112
+ this.refreshToken = refreshToken;
113
+ }
114
+ getUserdata() {
115
+ return this.userdata;
116
+ }
117
+ setRefreshToken(refreshToken) {
118
+ this.refreshToken = refreshToken;
119
+ this.saveStorageData(REFRESH_TOKEN, refreshToken);
120
+ }
121
+ getRefreshToken() {
122
+ return this.refreshToken;
123
+ }
124
+ setToken(token) {
125
+ this.token = token;
126
+ this.saveStorageData(TOKEN, token);
127
+ }
128
+ getToken() {
129
+ return this.token;
130
+ }
131
+ destroyCredentials() {
132
+ this.token = undefined;
133
+ this.refreshToken = undefined;
134
+ this.deleteStorageData(TOKEN);
135
+ this.deleteStorageData(REFRESH_TOKEN);
136
+ }
137
+ destroyUserData() {
138
+ this.userdata = undefined;
139
+ this.deleteStorageData(USERDATA);
140
+ }
141
+ saveCredentials(token, refreshToken) {
142
+ this.token = token;
143
+ this.refreshToken = refreshToken;
144
+ this.saveStorageData(TOKEN, token);
145
+ this.saveStorageData(REFRESH_TOKEN, refreshToken);
146
+ this.saveUserData(this.buildUserdataFromToken(token));
147
+ }
148
+ saveUserData(userData) {
149
+ this.userdata = userData;
150
+ this.saveStorageData(USERDATA, JSON.stringify(userData));
151
+ }
152
+ isLoggedIn() {
153
+ return !!this.userdata;
154
+ }
155
+ logout() {
156
+ return new Promise((resolve, reject) => {
157
+ this.logoutApi().subscribe(res => {
158
+ console.log(res);
159
+ this.destroyCredentials();
160
+ this.destroyUserData();
161
+ this.goToLogin();
162
+ resolve(null);
163
+ }, (err) => {
164
+ this.destroyCredentials();
165
+ this.destroyUserData();
166
+ console.error(err);
167
+ reject(err);
168
+ });
169
+ });
170
+ }
171
+ getNewToken(refreshToken) {
172
+ console.log('getNewToken');
173
+ const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + this.environment.authClient;
174
+ const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
175
+ return this.http.post(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`, body, { headers })
176
+ .pipe(map(res => res));
177
+ }
178
+ getLoginUrl() {
179
+ return this.http.get(this.endPoint + '/auth/login/url')
180
+ .pipe(map(res => res));
181
+ }
182
+ getHomeUrl() {
183
+ return this.http.get(this.endPoint + '/auth/home/url')
184
+ .pipe(map(res => res));
185
+ }
186
+ logoutApi() {
187
+ const body = 'refresh_token=' + this.refreshToken + '&client_id=' + this.environment.authClient;
188
+ const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
189
+ return this.http.post(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`, body, { headers })
190
+ .pipe(map(res => res));
191
+ }
192
+ goToLogin() {
193
+ this.getLoginUrl().subscribe(res => {
194
+ console.log(res);
195
+ const loginUrl = res.data;
196
+ window.location.href = loginUrl;
197
+ }, (err) => {
198
+ console.error(err);
199
+ });
200
+ }
201
+ loadSessionData() {
202
+ let data;
203
+ let token;
204
+ let refreshToken;
205
+ if (this.environment.production) {
206
+ const u = this.cryptoService.encrypt(USERDATA);
207
+ const t = this.cryptoService.encrypt(TOKEN);
208
+ const r = this.cryptoService.encrypt(REFRESH_TOKEN);
209
+ data = window.localStorage.getItem(u);
210
+ token = window.localStorage.getItem(t);
211
+ refreshToken = window.localStorage.getItem(r);
212
+ }
213
+ else {
214
+ data = window.localStorage.getItem(USERDATA);
215
+ token = window.localStorage.getItem(TOKEN);
216
+ refreshToken = window.localStorage.getItem(REFRESH_TOKEN);
217
+ }
218
+ if (data && token && refreshToken) {
219
+ const user = JSON.parse(data);
220
+ this.setTokens(token, refreshToken);
221
+ this.setUserdata(user);
222
+ }
223
+ }
224
+ userHasOptionsInApp(userId, applicationId) {
225
+ return this.http.get(this.endPoint + `/security/option/${applicationId}/${userId}`)
226
+ .pipe(map(res => res));
227
+ }
228
+ checkAppPermissions() {
229
+ const promise = new Promise((resolve, reject) => {
230
+ console.log(this.userdata?.userId, this.applicationId);
231
+ if (this.applicationId) {
232
+ this.userHasOptionsInApp(this.userdata?.userId, this.applicationId).subscribe(res => {
233
+ console.log(res);
234
+ if (res.data) {
235
+ resolve('ok');
236
+ }
237
+ else {
238
+ this.getHomeUrl().subscribe(res1 => {
239
+ console.log(res1);
240
+ const homeUrl = res1.data;
241
+ window.location.href = homeUrl;
242
+ reject('nok');
243
+ }, (err) => {
244
+ console.error(err);
245
+ reject('nok');
246
+ });
247
+ }
248
+ }, (err) => {
249
+ console.error(err);
250
+ reject('nok');
251
+ });
252
+ }
253
+ else {
254
+ resolve('ok');
255
+ }
256
+ });
257
+ return promise;
258
+ }
259
+ // eslint-disable-next-line max-len
260
+ getOptionsUser(applicationId, type, language, entityCode, parentOptionId, includeData) {
261
+ const param = {
262
+ userId: this.userdata?.userId,
263
+ applicationId,
264
+ type,
265
+ language,
266
+ entityCode,
267
+ parentOptionId,
268
+ includeData
269
+ };
270
+ return this.http.post(this.endPoint + '/security/option/user', param)
271
+ .pipe(map(res => res));
272
+ }
273
+ registerException(param) {
274
+ const headers = new HttpHeaders().set('skipError', 'true');
275
+ return this.http.post(this.endPoint + '/auth/exception/log', param, { headers })
276
+ .pipe(map(res => res));
277
+ }
278
+ saveStorageData(key, value) {
279
+ if (this.environment.production) {
280
+ const k = this.cryptoService.encrypt(key);
281
+ const v = this.cryptoService.encrypt(value);
282
+ window.localStorage.setItem(k, v);
283
+ this.storage.onConnect().then(() => {
284
+ return this.storage.set(k, v);
285
+ });
286
+ }
287
+ else {
288
+ window.localStorage.setItem(key, value);
289
+ this.storage.onConnect().then(() => {
290
+ return this.storage.set(key, value);
291
+ });
292
+ }
293
+ }
294
+ deleteStorageData(key) {
295
+ if (this.environment.production) {
296
+ const k = this.cryptoService.encrypt(key);
297
+ window.localStorage.removeItem(k);
298
+ this.storage.onConnect().then(() => {
299
+ return this.storage.del(k);
300
+ });
301
+ }
302
+ else {
303
+ window.localStorage.removeItem(key);
304
+ this.storage.onConnect().then(() => {
305
+ return this.storage.del(key);
306
+ });
307
+ }
308
+ }
309
+ 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 }); }
310
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SessionService }); }
311
+ }
312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SessionService, decorators: [{
313
+ type: Injectable
314
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
315
+ type: Inject,
316
+ args: ['environment']
317
+ }] }, { type: i2.CryptoService }, { type: i3.JwtService }]; } });
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLHFDQUFxQztBQUNyQyx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBSXJFLE1BQU0sT0FBTyxjQUFjO0lBV3pCLFlBQW9CLElBQWdCLEVBQ1gsV0FBZ0IsRUFDckIsYUFBNEIsRUFDNUIsVUFBc0I7UUFIdEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUVoQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBUjFDLGFBQVEsR0FBRyw2QkFBNkIsQ0FBQztRQVN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksa0JBQWtCLENBQUMsTUFBTSxF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LFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzhHQWpWVSxjQUFjLDRDQVlmLGFBQWE7a0hBWlosY0FBYzs7MkZBQWQsY0FBYztrQkFEMUIsVUFBVTs7MEJBYU4sTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzLXBlci1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgYXJyb3ctYm9keS1zdHlsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRnJvbnRFbmRFeGNlcHRpb24sIFVzZXJEYXRhIH0gZnJvbSAnLi4vdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDcm9zc1N0b3JhZ2VDbGllbnQgfSBmcm9tICdjcm9zcy1zdG9yYWdlJztcbmltcG9ydCB7IEp3dFNlcnZpY2UgfSBmcm9tICcuL2p3dC5zZXJ2aWNlJztcbmltcG9ydCB7IENyeXB0b1NlcnZpY2UgfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7IFJFRlJFU0hfVE9LRU4sIFRPS0VOLCBVU0VSREFUQSB9IGZyb20gJy4uL3NoYXJlZC9jb25zdGFudHMnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXNzaW9uU2VydmljZSB7XG5cbiAgdXNlcmRhdGE6IFVzZXJEYXRhIHwgdW5kZWZpbmVkO1xuICB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZW5kUG9pbnQ6IHN0cmluZztcbiAgbG9naW5VcmwgPSAnaHR0cDovL2xvY2FsaG9zdDo0MjAwL2xvZ2luJztcbiAgc3RvcmFnZTogYW55O1xuICBhcHBsaWNhdGlvbklkOiBhbnk7XG4gIGVudmlyb25tZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGp3dFNlcnZpY2U6IEp3dFNlcnZpY2UpIHtcbiAgICB0aGlzLmVuZFBvaW50ID0gZW52aXJvbm1lbnQuZW5kUG9pbnQ7XG4gICAgdGhpcy5hcHBsaWNhdGlvbklkID0gZW52aXJvbm1lbnQuYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCB1cmxIdWIgPSBlbnZpcm9ubWVudC5zZXNzaW9uSHViO1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICBjb25zb2xlLmxvZyh1cmxIdWIpO1xuICAgIHRoaXMuc3RvcmFnZSA9IG5ldyBDcm9zc1N0b3JhZ2VDbGllbnQodXJsSHViLCB7dGltZW91dDogNTAwMH0pO1xuICB9XG5cbiAgcHVibGljIGNoZWNrU2Vzc2lvbkRhdGEoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IGRhdGE7XG4gICAgICBsZXQgdG9rZW47XG4gICAgICBsZXQgcmVmcmVzaFRva2VuO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIFxuICAgICAgdGhpcy5zdG9yYWdlLm9uQ29ubmVjdCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2VsZi5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgICAgY29uc3QgdSA9IHNlbGYuY3J5cHRvU2VydmljZS5lbmNyeXB0KFVTRVJEQVRBKTtcbiAgICAgICAgICBjb25zdCB0ID0gc2VsZi5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoVE9LRU4pO1xuICAgICAgICAgIGNvbnN0IHIgPSBzZWxmLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChSRUZSRVNIX1RPS0VOKTtcbiAgICAgICAgICByZXR1cm4gc2VsZi5zdG9yYWdlLmdldCh1LCB0LCByKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5zdG9yYWdlLmdldChVU0VSREFUQSwgVE9LRU4sIFJFRlJFU0hfVE9LRU4pO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXM6IGFueSkge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICBpZiAoc2VsZi5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgICAgZGF0YSA9IHNlbGYuY3J5cHRvU2VydmljZS5kZWNyeXB0KHJlc1swXSk7XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLmNyeXB0b1NlcnZpY2UuZGVjcnlwdChyZXNbMV0pO1xuICAgICAgICAgIHJlZnJlc2hUb2tlbiA9IHNlbGYuY3J5cHRvU2VydmljZS5kZWNyeXB0KHJlc1syXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YSA9IHJlc1swXTtcbiAgICAgICAgICB0b2tlbiA9IHJlc1sxXTtcbiAgICAgICAgICByZWZyZXNoVG9rZW4gPSByZXNbMl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEgJiYgdG9rZW4gJiYgcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgc2VsZi5zYXZlQ3JlZGVudGlhbHModG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgICAgICAgc2VsZi5jaGVja0FwcFBlcm1pc3Npb25zKCkudGhlbigocmVzMSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzMSk7XG4gICAgICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGYuZGVzdHJveUNyZWRlbnRpYWxzKCk7XG4gICAgICAgICAgc2VsZi5kZXN0cm95VXNlckRhdGEoKTtcbiAgICAgICAgICBzZWxmLmdldExvZ2luVXJsKCkuc3Vic2NyaWJlKHJlczEgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzMSk7XG4gICAgICAgICAgICBzZWxmLmxvZ2luVXJsID0gcmVzMS5kYXRhO1xuICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJy9sb2dpbicpPDAgJiYgdXJsLmluZGV4T2YoJy9mb3Jnb3QnKTwwICYmIHVybC5pbmRleE9mKCcvcmVzZXQnKTwwKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gc2VsZi5sb2dpblVybCArICc/Y29udGludWU9JytlbmNvZGVVUklDb21wb25lbnQodXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoJ05PSycpO1xuICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRVc2VyZGF0YUZyb21Ub2tlbih0b2tlbjogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB0b2tlbkRhdGEgPSB0aGlzLmp3dFNlcnZpY2UuZGVjb2RlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IHVzZXJEYXRhOiBVc2VyRGF0YSA9IHtcbiAgICAgIGdpdmVuTmFtZTogdG9rZW5EYXRhLmdpdmVuX25hbWUsXG4gICAgICBmYW1pbHlOYW1lOiB0b2tlbkRhdGEuZmFtaWx5X25hbWUsXG4gICAgICBuYW1lOiB0b2tlbkRhdGEubmFtZSxcbiAgICAgIHJvbGVzOiB0b2tlbkRhdGEucmVhbG1fYWNjZXNzLnJvbGVzLFxuICAgICAgdXNlcklkOiB0b2tlbkRhdGEuc3ViLFxuICAgICAgdXNlcm5hbWU6IHRva2VuRGF0YS5wcmVmZXJyZWRfdXNlcm5hbWUsXG4gICAgICBlbWFpbDogdG9rZW5EYXRhLmVtYWlsLFxuICAgICAgZW1haWxWZXJpZmllZDogdG9rZW5EYXRhLmVtYWlsX3ZlcmlmaWVkXG4gICAgfTtcbiAgICByZXR1cm4gdXNlckRhdGE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmV2aWV3U2Vzc2lvbkRhdGEoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuY2hlY2tTZXNzaW9uRGF0YSgpIGFzIGFueTtcbiAgICBjb25zb2xlLmxvZyhgYXN5bmMgcmVzdWx0OiAke3ZhbHVlfWApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRVc2VyZGF0YSh1c2VyZGF0YTogYW55KTogdm9pZCB7XG4gICAgdGhpcy51c2VyZGF0YSA9IHVzZXJkYXRhO1xuICB9XG5cbiAgcHVibGljIHNldFRva2Vucyh0b2tlbjogYW55LCByZWZyZXNoVG9rZW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyZGF0YSgpOiBVc2VyRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudXNlcmRhdGE7XG4gIH1cblxuICBwdWJsaWMgc2V0UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW47XG4gICAgdGhpcy5zYXZlU3RvcmFnZURhdGEoUkVGUkVTSF9UT0tFTiwgcmVmcmVzaFRva2VuKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW47XG4gIH1cblxuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IGFueSk6IGFueSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuc2F2ZVN0b3JhZ2VEYXRhKFRPS0VOLCB0b2tlbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW4oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50b2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95Q3JlZGVudGlhbHMoKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlbGV0ZVN0b3JhZ2VEYXRhKFRPS0VOKTtcbiAgICB0aGlzLmRlbGV0ZVN0b3JhZ2VEYXRhKFJFRlJFU0hfVE9LRU4pO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lVc2VyRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJkYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVsZXRlU3RvcmFnZURhdGEoVVNFUkRBVEEpO1xuICB9XG5cbiAgcHVibGljIHNhdmVDcmVkZW50aWFscyh0b2tlbjogYW55LCByZWZyZXNoVG9rZW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbjtcbiAgICB0aGlzLnNhdmVTdG9yYWdlRGF0YShUT0tFTiwgdG9rZW4pO1xuICAgIHRoaXMuc2F2ZVN0b3JhZ2VEYXRhKFJFRlJFU0hfVE9LRU4sIHJlZnJlc2hUb2tlbik7XG4gICAgdGhpcy5zYXZlVXNlckRhdGEodGhpcy5idWlsZFVzZXJkYXRhRnJvbVRva2VuKHRva2VuKSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVVzZXJEYXRhKHVzZXJEYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJkYXRhID0gdXNlckRhdGE7XG4gICAgdGhpcy5zYXZlU3RvcmFnZURhdGEoVVNFUkRBVEEsIEpTT04uc3RyaW5naWZ5KHVzZXJEYXRhKSk7XG4gIH1cblxuICBwdWJsaWMgaXNMb2dnZWRJbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnVzZXJkYXRhO1xuICB9XG5cbiAgbG9nb3V0KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMubG9nb3V0QXBpKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgIHRoaXMuZGVzdHJveUNyZWRlbnRpYWxzKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveVVzZXJEYXRhKCk7XG4gICAgICAgIHRoaXMuZ29Ub0xvZ2luKCk7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveUNyZWRlbnRpYWxzKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveVVzZXJEYXRhKCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE5ld1Rva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nKTogYW55IHtcbiAgICBjb25zb2xlLmxvZygnZ2V0TmV3VG9rZW4nKTtcbiAgICBjb25zdCBib2R5ID0gJ2dyYW50X3R5cGU9cmVmcmVzaF90b2tlbicgKyAnJnJlZnJlc2hfdG9rZW49JyArIHJlZnJlc2hUb2tlbiArICcmY2xpZW50X2lkPScgKyB0aGlzLmVudmlyb25tZW50LmF1dGhDbGllbnQ7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmAsXG4gICAgICBib2R5LCB7aGVhZGVyc30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIGdldExvZ2luVXJsKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVuZFBvaW50ICsgJy9hdXRoL2xvZ2luL3VybCcpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIGdldEhvbWVVcmwoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHRoaXMuZW5kUG9pbnQgKyAnL2F1dGgvaG9tZS91cmwnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBsb2dvdXRBcGkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBib2R5ID0gJ3JlZnJlc2hfdG9rZW49JyArIHRoaXMucmVmcmVzaFRva2VuICsgJyZjbGllbnRfaWQ9JyArIHRoaXMuZW52aXJvbm1lbnQuYXV0aENsaWVudDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9sb2dvdXRgLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBnb1RvTG9naW4oKTogdm9pZCB7XG4gICAgdGhpcy5nZXRMb2dpblVybCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgIGNvbnN0IGxvZ2luVXJsID0gcmVzLmRhdGE7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGxvZ2luVXJsO1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkU2Vzc2lvbkRhdGEoKTogdm9pZCB7XG4gICAgbGV0IGRhdGE7XG4gICAgbGV0IHRva2VuO1xuICAgIGxldCByZWZyZXNoVG9rZW47XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgY29uc3QgdSA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KFVTRVJEQVRBKTtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChUT0tFTik7XG4gICAgICBjb25zdCByID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoUkVGUkVTSF9UT0tFTik7XG4gICAgICBkYXRhID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHUpO1xuICAgICAgdG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odCk7XG4gICAgICByZWZyZXNoVG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0ocik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUkRBVEEpO1xuICAgICAgdG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVE9LRU4pO1xuICAgICAgcmVmcmVzaFRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFJFRlJFU0hfVE9LRU4pO1xuICAgIH1cbiAgICBpZiAoZGF0YSAmJiB0b2tlbiAmJiByZWZyZXNoVG9rZW4pIHtcbiAgICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgdGhpcy5zZXRUb2tlbnModG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgICB0aGlzLnNldFVzZXJkYXRhKHVzZXIpO1xuICAgIH1cbiAgfVxuXG4gIHVzZXJIYXNPcHRpb25zSW5BcHAodXNlcklkOiBhbnksIGFwcGxpY2F0aW9uSWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVuZFBvaW50ICsgYC9zZWN1cml0eS9vcHRpb24vJHthcHBsaWNhdGlvbklkfS8ke3VzZXJJZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBjaGVja0FwcFBlcm1pc3Npb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudXNlcmRhdGE/LnVzZXJJZCwgdGhpcy5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgICAgdGhpcy51c2VySGFzT3B0aW9uc0luQXBwKHRoaXMudXNlcmRhdGE/LnVzZXJJZCwgdGhpcy5hcHBsaWNhdGlvbklkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgIGlmIChyZXMuZGF0YSkge1xuICAgICAgICAgICAgcmVzb2x2ZSgnb2snKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRIb21lVXJsKCkuc3Vic2NyaWJlKHJlczEgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMxKTtcbiAgICAgICAgICAgICAgY29uc3QgaG9tZVVybCA9IHJlczEuZGF0YTtcbiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBob21lVXJsO1xuICAgICAgICAgICAgICByZWplY3QoJ25vaycpO1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJlamVjdCgnbm9rJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KCdub2snKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCdvaycpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICBwdWJsaWMgZ2V0T3B0aW9uc1VzZXIoYXBwbGljYXRpb25JZDogbnVtYmVyIHwgbnVsbCwgdHlwZTogc3RyaW5nIHwgbnVsbCwgbGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwsIGVudGl0eUNvZGU6IHN0cmluZyB8IG51bGwsIHBhcmVudE9wdGlvbklkOiBudW1iZXIgfCBudWxsLCBpbmNsdWRlRGF0YTogYm9vbGVhbiB8IG51bGwpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgdXNlcklkOiB0aGlzLnVzZXJkYXRhPy51c2VySWQsXG4gICAgICBhcHBsaWNhdGlvbklkLFxuICAgICAgdHlwZSxcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgZW50aXR5Q29kZSxcbiAgICAgIHBhcmVudE9wdGlvbklkLFxuICAgICAgaW5jbHVkZURhdGFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHRoaXMuZW5kUG9pbnQgKyAnL3NlY3VyaXR5L29wdGlvbi91c2VyJywgcGFyYW0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRXhjZXB0aW9uKHBhcmFtOiBGcm9udEVuZEV4Y2VwdGlvbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnc2tpcEVycm9yJywgJ3RydWUnKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmVuZFBvaW50ICsgJy9hdXRoL2V4Y2VwdGlvbi9sb2cnLCBwYXJhbSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBzYXZlU3RvcmFnZURhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICBjb25zdCBrID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoa2V5KTtcbiAgICAgIGNvbnN0IHYgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdCh2YWx1ZSk7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oaywgdik7XG4gICAgICB0aGlzLnN0b3JhZ2Uub25Db25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0KGssIHYpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgICAgIHRoaXMuc3RvcmFnZS5vbkNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVTdG9yYWdlRGF0YShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IGsgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChrZXkpO1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspO1xuICAgICAgdGhpcy5zdG9yYWdlLm9uQ29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmRlbChrKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgIHRoaXMuc3RvcmFnZS5vbkNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5kZWwoa2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59XG5cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export const TOKEN = 'TOKEN';
2
+ export const REFRESH_TOKEN = 'REFRESH_TOKEN';
3
+ export const USERDATA = 'USERDATA';
4
+ export const LANG = 'LANG';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zaGFyZWQvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDN0IsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVE9LRU4gPSAnVE9LRU4nO1xuZXhwb3J0IGNvbnN0IFJFRlJFU0hfVE9LRU4gPSAnUkVGUkVTSF9UT0tFTic7XG5leHBvcnQgY29uc3QgVVNFUkRBVEEgPSAnVVNFUkRBVEEnO1xuZXhwb3J0IGNvbnN0IExBTkcgPSAnTEFORyc7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SsiSecurityCommonsComponent {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: SsiSecurityCommonsComponent, selector: "lib-ssi-security-commons", ngImport: i0, template: ` <p>ssi-security-commons works!</p>
6
+ `, isInline: true }); }
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ selector: 'lib-ssi-security-commons', template: ` <p>ssi-security-commons works!</p>
11
+ ` }]
12
+ }] });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NpLXNlY3VyaXR5LWNvbW1vbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zc2ktc2VjdXJpdHktY29tbW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTMUMsTUFBTSxPQUFPLDJCQUEyQjs4R0FBM0IsMkJBQTJCO2tHQUEzQiwyQkFBMkIsZ0VBTDVCO0dBQ1Q7OzJGQUlVLDJCQUEyQjtrQkFQdkMsU0FBUzsrQkFDRSwwQkFBMEIsWUFDMUI7R0FDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3NpLXNlY3VyaXR5LWNvbW1vbnMnLFxuICB0ZW1wbGF0ZTogYCA8cD5zc2ktc2VjdXJpdHktY29tbW9ucyB3b3JrcyE8L3A+XG4gIGAsXG4gIHN0eWxlczogW1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNzaVNlY3VyaXR5Q29tbW9uc0NvbXBvbmVudCB7XG5cbn1cbiJdfQ==
@@ -0,0 +1,56 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { MatDialogModule } from '@angular/material/dialog';
3
+ import { MatSnackBarModule } from '@angular/material/snack-bar';
4
+ import { CryptoService } from './services/crypto.service';
5
+ import { AlertComponent } from './alert/alert.component';
6
+ import { MessagesService } from './services/messages.service';
7
+ import { SessionService } from './services/session.service';
8
+ import { SsiSecurityCommonsComponent } from './ssi-security-commons.component';
9
+ import { MatButtonModule } from '@angular/material/button';
10
+ import { JwtService } from './services/jwt.service';
11
+ import * as i0 from "@angular/core";
12
+ export class SsiSecurityCommonsModule {
13
+ static forRoot(environment) {
14
+ return {
15
+ ngModule: SsiSecurityCommonsModule,
16
+ providers: [{ provide: 'environment', useValue: environment }]
17
+ };
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsModule, declarations: [SsiSecurityCommonsComponent,
21
+ AlertComponent], imports: [MatSnackBarModule,
22
+ MatDialogModule,
23
+ MatButtonModule], exports: [SsiSecurityCommonsComponent] }); }
24
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsModule, providers: [
25
+ MessagesService,
26
+ SessionService,
27
+ CryptoService,
28
+ JwtService
29
+ ], imports: [MatSnackBarModule,
30
+ MatDialogModule,
31
+ MatButtonModule] }); }
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsModule, decorators: [{
34
+ type: NgModule,
35
+ args: [{
36
+ declarations: [
37
+ SsiSecurityCommonsComponent,
38
+ AlertComponent
39
+ ],
40
+ imports: [
41
+ MatSnackBarModule,
42
+ MatDialogModule,
43
+ MatButtonModule
44
+ ],
45
+ exports: [
46
+ SsiSecurityCommonsComponent
47
+ ],
48
+ providers: [
49
+ MessagesService,
50
+ SessionService,
51
+ CryptoService,
52
+ JwtService
53
+ ]
54
+ }]
55
+ }] });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NpLXNlY3VyaXR5LWNvbW1vbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zc2ktc2VjdXJpdHktY29tbW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQXVCcEQsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQWdCO1FBQzdCLE9BQU87WUFDTCxRQUFRLEVBQUUsd0JBQXdCO1lBQ2xDLFNBQVMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFDLENBQUM7U0FDN0QsQ0FBQztJQUNKLENBQUM7OEdBTlUsd0JBQXdCOytHQUF4Qix3QkFBd0IsaUJBbEJqQywyQkFBMkI7WUFDM0IsY0FBYyxhQUdkLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2YsZUFBZSxhQUdmLDJCQUEyQjsrR0FTbEIsd0JBQXdCLGFBUHhCO1lBQ1QsZUFBZTtZQUNmLGNBQWM7WUFDZCxhQUFhO1lBQ2IsVUFBVTtTQUNYLFlBWkMsaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixlQUFlOzsyRkFZTix3QkFBd0I7a0JBcEJwQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWiwyQkFBMkI7d0JBQzNCLGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsMkJBQTJCO3FCQUM1QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsVUFBVTtxQkFDWDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgQ3J5cHRvU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRDb21wb25lbnQgfSBmcm9tICcuL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZXNzYWdlc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL21lc3NhZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Nlc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBTc2lTZWN1cml0eUNvbW1vbnNDb21wb25lbnQgfSBmcm9tICcuL3NzaS1zZWN1cml0eS1jb21tb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgSnd0U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvand0LnNlcnZpY2UnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNzaVNlY3VyaXR5Q29tbW9uc0NvbXBvbmVudCxcbiAgICBBbGVydENvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0U25hY2tCYXJNb2R1bGUsXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU3NpU2VjdXJpdHlDb21tb25zQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIE1lc3NhZ2VzU2VydmljZSxcbiAgICBTZXNzaW9uU2VydmljZSxcbiAgICBDcnlwdG9TZXJ2aWNlLFxuICAgIEp3dFNlcnZpY2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTc2lTZWN1cml0eUNvbW1vbnNNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChlbnZpcm9ubWVudDogYW55KTogTW9kdWxlV2l0aFByb3ZpZGVyczxTc2lTZWN1cml0eUNvbW1vbnNNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFNzaVNlY3VyaXR5Q29tbW9uc01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW3twcm92aWRlOiAnZW52aXJvbm1lbnQnLCB1c2VWYWx1ZTogZW52aXJvbm1lbnR9XVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,13 +1,13 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class SsiSecurityCommonsService {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsService, providedIn: 'root' }); }
4
6
  }
5
- SsiSecurityCommonsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SsiSecurityCommonsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6
- SsiSecurityCommonsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SsiSecurityCommonsService, providedIn: 'root' });
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SsiSecurityCommonsService, decorators: [{
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SsiSecurityCommonsService, decorators: [{
8
8
  type: Injectable,
9
9
  args: [{
10
10
  providedIn: 'root'
11
11
  }]
12
12
  }] });
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NpLXNlY3VyaXR5LWNvbW1vbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvc3NpLXNlY3VyaXR5LWNvbW1vbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8seUJBQXlCOztzSEFBekIseUJBQXlCOzBIQUF6Qix5QkFBeUIsY0FGeEIsTUFBTTsyRkFFUCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTc2lTZWN1cml0eUNvbW1vbnNTZXJ2aWNlIHtcblxufVxuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NpLXNlY3VyaXR5LWNvbW1vbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvc3NpLXNlY3VyaXR5LWNvbW1vbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8seUJBQXlCOzhHQUF6Qix5QkFBeUI7a0hBQXpCLHlCQUF5QixjQUZ4QixNQUFNOzsyRkFFUCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTc2lTZWN1cml0eUNvbW1vbnNTZXJ2aWNlIHtcblxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvdXNlci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgZnVsbG5hbWU6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcGVyc29uSWQ6IG51bWJlcjtcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICB1c2VySWQ6IG51bWJlcjtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgd29ya1BsYWNlOiBXb3JrUGxhY2U7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIHVzZXJUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5uZWwge1xuICBjaGFubmVsQ29kZTogc3RyaW5nO1xuICBjaGFubmVsRGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrUGxhY2Uge1xuICB3b3JrUGxhY2VDb2RlOiBzdHJpbmc7XG4gIHdvcmtQbGFjZURlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNpdHlDb2RlOiBzdHJpbmc7XG4gIGNpdHlEZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyb250RW5kRXhjZXB0aW9uIHtcbiAgaHR0cFN0YXR1cz86IG51bWJlcjtcbiAgaHR0cFN0YXR1c1RleHQ/OiBzdHJpbmc7XG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgcmVxdWVzdEJvZHk/OiBzdHJpbmc7XG4gIHJlc3BvbnNlQm9keT86IHN0cmluZztcbiAgdXNlcklkPzogbnVtYmVyO1xuICByZXF1ZXN0RGF0ZT86IERhdGU7XG4gIGFwcGxpY2F0aW9uTmFtZT86IHN0cmluZztcbiAgYXBwbGljYXRpb25JZD86IG51bWJlcjtcbiAgcmVxdWVzdFVybD86IHN0cmluZztcbiAgY3VycmVudFVybD86IHN0cmluZztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvdXNlci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgZnVsbG5hbWU6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcGVyc29uSWQ6IG51bWJlcjtcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICB1c2VySWQ6IG51bWJlcjtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgd29ya1BsYWNlOiBXb3JrUGxhY2U7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIHVzZXJUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5uZWwge1xuICBjaGFubmVsQ29kZTogc3RyaW5nO1xuICBjaGFubmVsRGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrUGxhY2Uge1xuICB3b3JrUGxhY2VDb2RlOiBzdHJpbmc7XG4gIHdvcmtQbGFjZURlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNpdHlDb2RlOiBzdHJpbmc7XG4gIGNpdHlEZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyb250RW5kRXhjZXB0aW9uIHtcbiAgaHR0cFN0YXR1cz86IG51bWJlcjtcbiAgaHR0cFN0YXR1c1RleHQ/OiBzdHJpbmc7XG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgcmVxdWVzdEJvZHk/OiBzdHJpbmc7XG4gIHJlc3BvbnNlQm9keT86IHN0cmluZztcbiAgdXNlcklkPzogc3RyaW5nO1xuICByZXF1ZXN0RGF0ZT86IERhdGU7XG4gIGFwcGxpY2F0aW9uTmFtZT86IHN0cmluZztcbiAgYXBwbGljYXRpb25JZD86IG51bWJlcjtcbiAgcmVxdWVzdFVybD86IHN0cmluZztcbiAgY3VycmVudFVybD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRGF0YSB7XG4gIGdpdmVuTmFtZTogc3RyaW5nO1xuICBmYW1pbHlOYW1lOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICB1c2VySWQ6IHN0cmluZztcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgZW1haWxWZXJpZmllZDogYm9vbGVhbjtcbiAgd29ya1BsYWNlPzogV29ya1BsYWNlO1xuICBjaGFubmVsPzogQ2hhbm5lbDtcbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Public API Surface of ssi-security-commons
3
+ */
4
+ export * from './lib/ssi-security-commons.service';
5
+ export * from './lib/ssi-security-commons.component';
6
+ export * from './lib/ssi-security-commons.module';
7
+ export * from './lib/services/auth-interceptor.service';
8
+ export * from './lib/services/session.service';
9
+ export * from './lib/services/messages.service';
10
+ export * from './lib/user.model';
11
+ export * from './lib/services/crypto.service';
12
+ export * from './lib/services/jwt.service';
13
+ export * from './lib/shared/constants';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygc3NpLXNlY3VyaXR5LWNvbW1vbnNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zc2ktc2VjdXJpdHktY29tbW9ucy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NzaS1zZWN1cml0eS1jb21tb25zLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zc2ktc2VjdXJpdHktY29tbW9ucy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXV0aC1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Nlc3Npb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tZXNzYWdlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VzZXIubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvand0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbnN0YW50cyc7XG4iXX0=