@yuuvis/client-core 2.0.0-beta.0 → 2.0.0-beta.10

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 (105) hide show
  1. package/fesm2022/yuuvis-client-core.mjs +773 -645
  2. package/fesm2022/yuuvis-client-core.mjs.map +1 -1
  3. package/index.d.ts +7 -4
  4. package/lib/model/object-flavor.interface.d.ts +4 -1
  5. package/lib/provide.client.core.d.ts +58 -0
  6. package/lib/service/backend/backend.service.d.ts +0 -1
  7. package/lib/service/config/config.service.d.ts +0 -8
  8. package/lib/service/core-init/core-init.service.d.ts +1 -7
  9. package/lib/service/core-init/translate-json-loader.d.ts +1 -1
  10. package/lib/service/dms/dms.service.d.ts +2 -1
  11. package/lib/service/object-config/object-config.interface.d.ts +1 -1
  12. package/lib/service/object-form/object-form-translate.service.d.ts +15 -0
  13. package/lib/service/{system → object-form}/object-form.interface.d.ts +2 -2
  14. package/lib/service/object-form/object-form.model.d.ts +45 -0
  15. package/lib/service/system/system.interface.d.ts +1 -1
  16. package/lib/service/system/system.service.d.ts +1 -1
  17. package/lib/service/toast/toast.interface.d.ts +8 -0
  18. package/lib/service/toast/toast.service.d.ts +17 -0
  19. package/lib/service/toast/toast.styles.d.ts +1 -0
  20. package/lib/service/upload/upload.interface.d.ts +1 -1
  21. package/lib/service/user/user.providers.d.ts +4 -0
  22. package/lib/service/user/user.service.d.ts +2 -4
  23. package/package.json +7 -11
  24. package/esm2022/index.mjs +0 -69
  25. package/esm2022/lib/client-core.module.mjs +0 -117
  26. package/esm2022/lib/client-core.shared.module.mjs +0 -18
  27. package/esm2022/lib/common/pipes/filesize.pipe.mjs +0 -37
  28. package/esm2022/lib/common/pipes/index.mjs +0 -6
  29. package/esm2022/lib/common/pipes/keys.pipe.mjs +0 -17
  30. package/esm2022/lib/common/pipes/locale-date.pipe.mjs +0 -45
  31. package/esm2022/lib/common/pipes/locale-number.pipe.mjs +0 -115
  32. package/esm2022/lib/common/pipes/safe-html.pipe.mjs +0 -44
  33. package/esm2022/lib/common/services/native-notifications.interface.mjs +0 -2
  34. package/esm2022/lib/common/services/native-notifications.mjs +0 -40
  35. package/esm2022/lib/model/dms-object.interface.mjs +0 -2
  36. package/esm2022/lib/model/dms-object.model.mjs +0 -79
  37. package/esm2022/lib/model/object-flavor.interface.mjs +0 -2
  38. package/esm2022/lib/model/range-value.interface.mjs +0 -2
  39. package/esm2022/lib/model/yuv-error.model.mjs +0 -37
  40. package/esm2022/lib/model/yuv-user.model.mjs +0 -38
  41. package/esm2022/lib/service/audit/audit.interface.mjs +0 -2
  42. package/esm2022/lib/service/audit/audit.service.mjs +0 -135
  43. package/esm2022/lib/service/auth/auth.interceptor.mjs +0 -50
  44. package/esm2022/lib/service/auth/auth.interface.mjs +0 -7
  45. package/esm2022/lib/service/auth/auth.service.mjs +0 -130
  46. package/esm2022/lib/service/auth/oidc.service.mjs +0 -81
  47. package/esm2022/lib/service/backend/api.enum.mjs +0 -11
  48. package/esm2022/lib/service/backend/backend.interface.mjs +0 -2
  49. package/esm2022/lib/service/backend/backend.service.mjs +0 -206
  50. package/esm2022/lib/service/bpm/bpm.interface.mjs +0 -8
  51. package/esm2022/lib/service/bpm/bpm.service.mjs +0 -51
  52. package/esm2022/lib/service/cache/app-cache.service.mjs +0 -51
  53. package/esm2022/lib/service/catalog/catalog.interface.mjs +0 -2
  54. package/esm2022/lib/service/catalog/catalog.service.mjs +0 -13
  55. package/esm2022/lib/service/clipboard/clipboard.interface.mjs +0 -2
  56. package/esm2022/lib/service/clipboard/clipboard.service.mjs +0 -99
  57. package/esm2022/lib/service/config/config.interface.mjs +0 -6
  58. package/esm2022/lib/service/config/config.service.mjs +0 -115
  59. package/esm2022/lib/service/config/core-config.mjs +0 -20
  60. package/esm2022/lib/service/config/core-config.tokens.mjs +0 -9
  61. package/esm2022/lib/service/connection/connection.service.mjs +0 -36
  62. package/esm2022/lib/service/connection/offline.interceptor.mjs +0 -28
  63. package/esm2022/lib/service/core-init/core-init.service.mjs +0 -29
  64. package/esm2022/lib/service/core-init/missing-translation-handler.mjs +0 -10
  65. package/esm2022/lib/service/core-init/translate-json-loader.mjs +0 -117
  66. package/esm2022/lib/service/device/device.interface.mjs +0 -6
  67. package/esm2022/lib/service/device/device.service.mjs +0 -144
  68. package/esm2022/lib/service/dms/dms.service.interface.mjs +0 -2
  69. package/esm2022/lib/service/dms/dms.service.mjs +0 -440
  70. package/esm2022/lib/service/event/event.interface.mjs +0 -2
  71. package/esm2022/lib/service/event/event.service.mjs +0 -38
  72. package/esm2022/lib/service/event/events.mjs +0 -14
  73. package/esm2022/lib/service/idm/idm.interface.mjs +0 -2
  74. package/esm2022/lib/service/idm/idm.service.mjs +0 -34
  75. package/esm2022/lib/service/logger/logger-console.service.mjs +0 -73
  76. package/esm2022/lib/service/logger/logger.interface.mjs +0 -2
  77. package/esm2022/lib/service/logger/logger.mjs +0 -27
  78. package/esm2022/lib/service/notification/notification.service.mjs +0 -131
  79. package/esm2022/lib/service/object-config/object-config.interface.mjs +0 -2
  80. package/esm2022/lib/service/object-config/object-config.service.mjs +0 -233
  81. package/esm2022/lib/service/pending-changes/pending-changes-component.interface.mjs +0 -5
  82. package/esm2022/lib/service/pending-changes/pending-changes-guard.service.mjs +0 -25
  83. package/esm2022/lib/service/pending-changes/pending-changes.service.mjs +0 -123
  84. package/esm2022/lib/service/prediction/prediction.interface.mjs +0 -2
  85. package/esm2022/lib/service/prediction/prediction.service.mjs +0 -60
  86. package/esm2022/lib/service/retention/retention.interface.mjs +0 -2
  87. package/esm2022/lib/service/retention/retention.service.mjs +0 -65
  88. package/esm2022/lib/service/search/search.service.interface.mjs +0 -39
  89. package/esm2022/lib/service/search/search.service.mjs +0 -261
  90. package/esm2022/lib/service/search/search.utils.mjs +0 -142
  91. package/esm2022/lib/service/session-storage/session-storage.service.mjs +0 -50
  92. package/esm2022/lib/service/system/object-form.interface.mjs +0 -2
  93. package/esm2022/lib/service/system/system.enum.mjs +0 -167
  94. package/esm2022/lib/service/system/system.interface.mjs +0 -2
  95. package/esm2022/lib/service/system/system.service.mjs +0 -597
  96. package/esm2022/lib/service/upload/upload.interface.mjs +0 -2
  97. package/esm2022/lib/service/upload/upload.service.mjs +0 -228
  98. package/esm2022/lib/service/user/user-storage.service.mjs +0 -38
  99. package/esm2022/lib/service/user/user.service.mjs +0 -211
  100. package/esm2022/lib/util/utils.helper.enum.mjs +0 -15
  101. package/esm2022/lib/util/utils.mjs +0 -373
  102. package/esm2022/yuuvis-client-core.mjs +0 -5
  103. package/lib/client-core.module.d.ts +0 -20
  104. package/lib/client-core.shared.module.d.ts +0 -10
  105. package/lib/service/auth/oidc.service.d.ts +0 -16
@@ -1,373 +0,0 @@
1
- import { EMPTY as observableEmpty } from 'rxjs';
2
- import { Sort } from './utils.helper.enum';
3
- export class Utils {
4
- static optionsToURLParams(options) {
5
- if (options) {
6
- const searchParams = new URLSearchParams();
7
- Object.keys(options).map((k) => searchParams.append(k, options[k]));
8
- return `?${searchParams.toString()}`;
9
- }
10
- return '';
11
- }
12
- /**
13
- * Get all focusable child elements of a host element.
14
- * @param host The host/parent element
15
- * @returns Array of focusable child elements
16
- */
17
- static getFocusableChildren(host) {
18
- return Array.from(host.querySelectorAll('a[href], button, input, textarea, select, details,[tabindex]:not([tabindex="-1"])')).filter((el) => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden'));
19
- }
20
- static hasProperty(o, property) {
21
- if (typeof o !== 'object' || o === null) {
22
- return false;
23
- }
24
- return Object.hasOwn(o, property);
25
- }
26
- static patternToRegExp(pattern) {
27
- return new RegExp(pattern.replaceAll('*', '.*'));
28
- }
29
- /**
30
- * Utility method for adding parameters to a given URI.
31
- *
32
- * @param uri The uri string to attach the parameters to
33
- * @param params The object containing parameters to be appended
34
- * @returns the given uri extended by the given parameters + remove empty parameters
35
- */
36
- static buildUri(uri, params) {
37
- const q = Object.keys(params)
38
- .filter((k) => !Utils.isEmptyOrFalse(params[k]))
39
- .map((k) => k + '=' + encodeURIComponent(typeof params[k] === 'object' ? JSON.stringify(params[k]) : params[k]))
40
- .join('&');
41
- return uri + (q ? '?' + q : '');
42
- }
43
- static formatMailTo(value, isEmail) {
44
- if (isEmail && !!value) {
45
- if (Array.isArray(value)) {
46
- return value.join().replace(/,/g, '; ');
47
- }
48
- else {
49
- return value.replace(/,/g, '; ');
50
- }
51
- }
52
- return value;
53
- }
54
- /**
55
- * Creates a unique identifier.
56
- * @returns A Universally Unique Identifier
57
- */
58
- static uuid() {
59
- return Utils._p8() + Utils._p8(true) + Utils._p8(true) + Utils._p8();
60
- }
61
- /**
62
- * Encode a filename safe for sending chars beyond ASCII-7bit using quoted printable encoding.
63
- *
64
- * @param filename The file name
65
- * @returns The quoted printable filename
66
- */
67
- static encodeFileName(filename) {
68
- const fileName = Utils.encodeToQuotedPrintable(Utils.encodeToUtf8(filename)).replace(/_/g, '=5F');
69
- return `=?UTF-8?Q?${fileName}?=`;
70
- }
71
- /**
72
- *
73
- * @param boolean s
74
- * @return string
75
- */
76
- static _p8(s) {
77
- const p = (Math.random().toString(16) + '000000000').substr(2, 8);
78
- return s ? `-${p.substr(0, 4)}-${p.substr(4, 4)}` : p;
79
- }
80
- /**
81
- * Converts a javascript text to the utf-8 converted variant.
82
- * See [unicode]{@link http://thlist.onlinehome.de/thomas_homepage/unicode/UTF-8%20Konvertierung%20mittels%20JavaScript.htm} for reference
83
- *
84
- * @param rawinput The input string
85
- * @returns The utf-8 converted string
86
- */
87
- static encodeToUtf8(rawinput) {
88
- /**
89
- * Normalize line breaks
90
- */
91
- rawinput = rawinput.replace(/\r\n/g, '\n');
92
- let utfreturn = '';
93
- for (let n = 0; n < rawinput.length; n++) {
94
- /**
95
- * Unicode for current char
96
- */
97
- const c = rawinput.charCodeAt(n);
98
- if (c < 128) {
99
- /**
100
- * All chars range 0-127 => 1byte
101
- */
102
- utfreturn += String.fromCharCode(c);
103
- }
104
- else if (c > 127 && c < 2048) {
105
- /**
106
- * All chars range from 127 to 2047 => 2byte
107
- */
108
- utfreturn += String.fromCharCode((c >> 6) | 192);
109
- utfreturn += String.fromCharCode((c & 63) | 128);
110
- }
111
- else {
112
- /**
113
- * All chars range from 2048 to 66536 => 3byte
114
- */
115
- utfreturn += String.fromCharCode((c >> 12) | 224);
116
- utfreturn += String.fromCharCode(((c >> 6) & 63) | 128);
117
- utfreturn += String.fromCharCode((c & 63) | 128);
118
- }
119
- }
120
- return utfreturn;
121
- }
122
- /**
123
- * See [quoted-printable]{@link https://github.com/mathiasbynens/quoted-printable/blob/master/quoted-printable.js}
124
- **/
125
- static quotedPrintable(symbol) {
126
- if (symbol > '\xFF') {
127
- throw RangeError('`encodeToQuotedPrintable` expects extended ASCII input only. Missing prior UTF-8 encoding?');
128
- }
129
- const codePoint = symbol.charCodeAt(0);
130
- const hexadecimal = codePoint.toString(16).toUpperCase();
131
- return '=' + ('0' + hexadecimal).slice(-2);
132
- }
133
- /**
134
- * Encode symbols that are definitely unsafe (i.e. unsafe in any context). The regular expression describes these unsafe symbols.
135
- *
136
- * @param rawinput Input string to be encoded
137
- * @returns The encoded string
138
- */
139
- static encodeToQuotedPrintable(rawinput) {
140
- const encoded = rawinput.replace(/[\0-\b\n-\x1F=\x7F-\uD7FF\uDC00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF]/g, this.quotedPrintable);
141
- return encoded;
142
- }
143
- /**
144
- * Sorts An Array of Object by given key
145
- * See [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}
146
- *
147
- * @param key
148
- * @param order
149
- * @param locales
150
- * @param options
151
- * @returns (a: any, b: any) => number
152
- */
153
- static sortValues(key = '', order = Sort.ASC, locales, options) {
154
- const f = (a, b) => {
155
- let comparison;
156
- const varA = Utils.getProperty(a, key);
157
- const varB = Utils.getProperty(b, key);
158
- if (typeof varA === 'number' && typeof varB === 'number') {
159
- comparison = varA - varB;
160
- }
161
- else if (varA instanceof Date && varB instanceof Date) {
162
- comparison = new Date(varA).getTime() - new Date(varB).getTime();
163
- }
164
- else {
165
- const stringA = varA || varA === 0 ? varA.toString() : '';
166
- const stringB = varB || varB === 0 ? varB.toString() : '';
167
- comparison = stringA.localeCompare(stringB, locales, options);
168
- }
169
- return order === Sort.DESC ? comparison * -1 : comparison;
170
- };
171
- return f;
172
- }
173
- /**
174
- * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}
175
- *
176
- * @param object
177
- * @param string key
178
- * @returns any
179
- */
180
- static getProperty(object, key = '') {
181
- const f = key ? key.split('.').reduce((o, k) => (o || {})[k], object) : object;
182
- return f;
183
- }
184
- /**
185
- * @param object
186
- * @param key
187
- * @param value
188
- */
189
- static setProperty(object, key = '', value) {
190
- const [head, ...rest] = key.split('.');
191
- !rest.length ? (object[head] = value) : Utils.setProperty(object[head] || (object[head] = {}), value, rest.join('.'));
192
- }
193
- /**
194
- * Use on Observable.catch or Observable.subscribe to return empty value
195
- * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}
196
- *
197
- * @param (error) => any callback
198
- * @returns (error) => Observable<never>
199
- */
200
- static empty(callback) {
201
- const f = () => {
202
- return observableEmpty;
203
- };
204
- return f;
205
- }
206
- // /**
207
- // * Use on Observable.catch with specific skipNotification function !!!
208
- // * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}
209
- // *
210
- // * @param skipNotification
211
- // * @param callback
212
- // * @param name
213
- // * @param message
214
- // */
215
- // public static catchSkip(skipNotification?: (error: any) => any, callback?: (error: any) => any, name?: string, message?: string) {
216
- // const f = (error: any) => {
217
- // const _error = callback && callback(error);
218
- // const _skipNotification = skipNotification && skipNotification(error);
219
- // return throwError(() => new YuvError(_error instanceof Error ? _error : error, name, message, _skipNotification));
220
- // };
221
- // return f;
222
- // }
223
- // /**
224
- // * Use on Observable.catch !!!
225
- // * [ng-packagr issues]{@link https://github.com/dherges/ng-packagr/issues/696}
226
- // *
227
- // * @param callback
228
- // * @param name
229
- // * @param message
230
- // * @param skipNotification
231
- // * @return (error) => Observable<never>
232
- // */
233
- // public static catch(callback?: (error: any) => any, name?: string, message?: string, skipNotification?: boolean) {
234
- // const f = (error: any) => {
235
- // const _error = callback && callback(error);
236
- // return throwError(() => new YuvError(_error instanceof Error ? _error : error, name, message, skipNotification));
237
- // };
238
- // return f;
239
- // }
240
- // /**
241
- // * Use on Observable.subscribe !!!
242
- // * [ng-packagr issues]{@link https://github.com/dherges/ng-packagr/issues/696}
243
- // *
244
- // * @param callback
245
- // * @param name
246
- // * @param message
247
- // * @param skipNotification
248
- // * @return (error) => void
249
- // */
250
- // public static throw(callback?: (error: any) => any, name?: string, message?: string, skipNotification?: boolean) {
251
- // const f = (error: any) => {
252
- // const _error = callback && callback(error);
253
- // throw new YuvError(_error instanceof Error ? _error : error, name, message, skipNotification);
254
- // };
255
- // return f;
256
- // }
257
- // /**
258
- // * Use on Observable.subscribe only if you want to skip notification / toast!!!
259
- // *
260
- // * @param callback
261
- // * @param name
262
- // * @param message
263
- // * @param skipNotification
264
- // * @return (error) => void
265
- // */
266
- // public static logError(callback?: (error: any) => any, name?: string, message?: string, skipNotification = true) {
267
- // return Utils.throw(callback, name, message, skipNotification);
268
- // }
269
- // /**
270
- // * Checks if element is visible
271
- // *
272
- // * @param elem
273
- // * @return boolean
274
- // */
275
- // public static isVisible(elem: any): boolean {
276
- // return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
277
- // }
278
- static getBaseHref(removeTrailingSlash) {
279
- const baseEl = document.getElementsByTagName('base')[0];
280
- const baseHref = baseEl ? baseEl.getAttribute('href') : undefined;
281
- return baseHref ? (removeTrailingSlash ? baseHref.substr(0, baseHref.length - 1) : baseHref) : '';
282
- }
283
- /**
284
- * Truncate a string (first argument) if it is longer than the given maximum string length (second argument).
285
- * Return the truncated string with a ... ending or whats provided.
286
- *
287
- * @param string str
288
- * @param number num
289
- */
290
- static truncateString(str, num, ending = '...') {
291
- if (str.length > num) {
292
- if (num > 3) {
293
- num -= 3;
294
- }
295
- str = `${str.substring(0, num)}${ending}`;
296
- }
297
- return str;
298
- }
299
- /**
300
- * Get the TimeZone Offsest as minutes
301
- */
302
- static getTimezoneOffset() {
303
- return new Date().getTimezoneOffset();
304
- }
305
- /**
306
- * Transform to date with yyyy-mm-dd format
307
- */
308
- static transformDate(v) {
309
- return v && new Date(new Date(v).getTime() - new Date(v).getTimezoneOffset() * 60 * 1000).toISOString().slice(0, 10);
310
- }
311
- static isEdge() {
312
- return new RegExp('Edge', 'i').test(navigator.userAgent);
313
- }
314
- static isFirefox() {
315
- return new RegExp('firefox', 'i').test(navigator.userAgent);
316
- }
317
- static isSafari() {
318
- return new RegExp('^((?!chrome|android|crios|fxios).)*safari', 'i').test(navigator.userAgent);
319
- }
320
- static isEmpty(obj) {
321
- if (obj == null || obj === '') {
322
- return true;
323
- }
324
- if (typeof obj === 'number') {
325
- return isNaN(obj);
326
- }
327
- return typeof obj === 'boolean' ? false : !Object.keys(obj).length;
328
- }
329
- static isEmptyOrFalse(val) {
330
- return typeof val === 'boolean' ? !val : Utils.isEmpty(val);
331
- }
332
- static escapeHtml(str) {
333
- str = str ? str : '';
334
- const entityMap = {
335
- '&': '&amp;',
336
- '<': '&lt;',
337
- '>': '&gt;',
338
- '"': '&quot;',
339
- "'": '&#39;',
340
- '/': '&#x2F;'
341
- };
342
- return String(str).replace(/[&<>"'\/]/g, (s) => entityMap[s]);
343
- }
344
- static arrayToObject(arr = [], keyProperty, valueProperty) {
345
- const key = typeof keyProperty === 'string' ? (o) => o[keyProperty] : keyProperty;
346
- const value = typeof valueProperty === 'string' ? (o) => o[valueProperty] : valueProperty;
347
- return arr.reduce((acc, cur, i) => {
348
- acc[key ? key(cur) : i] = value ? value(cur) : cur;
349
- return acc;
350
- }, {});
351
- }
352
- // public static navigate(newTab: boolean, router: Router, commands: any[], navigationExtras?: NavigationExtras): Promise<any> {
353
- // if (newTab) {
354
- // return new Promise(() => Utils.openWindow(router.serializeUrl(router.createUrlTree(commands, navigationExtras))));
355
- // } else {
356
- // return router.navigate(commands, navigationExtras);
357
- // }
358
- // }
359
- // public static openWindow(url: string = '', target = '_blank', features?: string): Window | null {
360
- // return window.open(url.match(new RegExp('^/.+')) ? url.replace(new RegExp('^/'), '') : url, target, features); // relative to host
361
- // }
362
- static downloadBlob(content, mimeType, filename) {
363
- const bom = new Uint8Array([0xef, 0xbb, 0xbf]); // FORM BOM
364
- const blob = new Blob([bom, content], { type: 'octet/stream' });
365
- const a = document.createElement('a');
366
- const url = window.URL.createObjectURL(blob);
367
- a.setAttribute('href', url);
368
- a.setAttribute('download', filename);
369
- a.click();
370
- URL.revokeObjectURL(url);
371
- }
372
- }
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3V0aWwvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssSUFBSSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFtQixJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBNEI7UUFDcEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQWlCO1FBQ2xELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUZBQW1GLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDbEksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFVLEVBQUUsUUFBZ0I7UUFDcEQsSUFBSSxP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QUEwRDtJQUMxRCxNQUFNO0lBQ04sSUFBSTtJQUVKLG9HQUFvRztJQUNwRyx1SUFBdUk7SUFDdkksSUFBSTtJQUVHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBWSxFQUFFLFFBQWdCLEVBQUUsUUFBZ0I7UUFDekUsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVixHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVNUFRZIGFzIG9ic2VydmFibGVFbXB0eSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWFpbFRvLCBTb3J0IH0gZnJvbSAnLi91dGlscy5oZWxwZXIuZW51bSc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyB7XG4gIHN0YXRpYyBvcHRpb25zVG9VUkxQYXJhbXMob3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLm1hcCgoaykgPT4gc2VhcmNoUGFyYW1zLmFwcGVuZChrLCBvcHRpb25zW2tdKSk7XG4gICAgICByZXR1cm4gYD8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGZvY3VzYWJsZSBjaGlsZCBlbGVtZW50cyBvZiBhIGhvc3QgZWxlbWVudC5cbiAgICogQHBhcmFtIGhvc3QgVGhlIGhvc3QvcGFyZW50IGVsZW1lbnRcbiAgICogQHJldHVybnMgQXJyYXkgb2YgZm9jdXNhYmxlIGNoaWxkIGVsZW1lbnRzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEZvY3VzYWJsZUNoaWxkcmVuKGhvc3Q6IEhUTUxFbGVtZW50KTogRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShob3N0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbaHJlZl0sIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGRldGFpbHMsW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJykpLmZpbHRlcihcbiAgICAgIChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiAhZWwuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaGFzUHJvcGVydHkobzogdW5rbm93biwgcHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcgfHwgbyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0Lmhhc093bihvLCBwcm9wZXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHBhdHRlcm5Ub1JlZ0V4cChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4ucmVwbGFjZUFsbCgnKicsICcuKicpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVdGlsaXR5IG1ldGhvZCBmb3IgYWRkaW5nIHBhcmFtZXRlcnMgdG8gYSBnaXZlbiBVUkkuXG4gICAqXG4gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBzdHJpbmcgdG8gYXR0YWNoIHRoZSBwYXJhbWV0ZXJzIHRvXG4gICAqIEBwYXJhbSBwYXJhbXMgVGhlIG9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnMgdG8gYmUgYXBwZW5kZWRcbiAgICogQHJldHVybnMgdGhlIGdpdmVuIHVyaSBleHRlbmRlZCBieSB0aGUgZ2l2ZW4gcGFyYW1ldGVycyArIHJlbW92ZSBlbXB0eSBwYXJhbWV0ZXJzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJ1aWxkVXJpKHVyaTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcSA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgIC5maWx0ZXIoKGspID0+ICFVdGlscy5pc0VtcHR5T3JGYWxzZShwYXJhbXNba10pKVxuICAgICAgLm1hcCgoaykgPT4gayArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0eXBlb2YgcGFyYW1zW2tdID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHBhcmFtc1trXSkgOiBwYXJhbXNba10pKVxuICAgICAgLmpvaW4oJyYnKTtcbiAgICByZXR1cm4gdXJpICsgKHEgPyAnPycgKyBxIDogJycpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JtYXRNYWlsVG8odmFsdWU6IEZvcm1hdHRlZE1haWxUbywgaXNFbWFpbDogYm9vbGVhbik6IEZvcm1hdHRlZE1haWxUbyB7XG4gICAgaWYgKGlzRW1haWwgJiYgISF2YWx1ZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5qb2luKCkucmVwbGFjZSgvLC9nLCAnOyAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8sL2csICc7ICcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJucyBBIFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHV1aWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbHMuX3A4KCkgKyBVdGlscy5fcDgodHJ1ZSkgKyBVdGlscy5fcDgodHJ1ZSkgKyBVdGlscy5fcDgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgYSBmaWxlbmFtZSBzYWZlIGZvciBzZW5kaW5nIGNoYXJzIGJleW9uZCBBU0NJSS03Yml0IHVzaW5nIHF1b3RlZCBwcmludGFibGUgZW5jb2RpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZSBuYW1lXG4gICAqIEByZXR1cm5zIFRoZSBxdW90ZWQgcHJpbnRhYmxlIGZpbGVuYW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVuY29kZUZpbGVOYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gVXRpbHMuZW5jb2RlVG9RdW90ZWRQcmludGFibGUoVXRpbHMuZW5jb2RlVG9VdGY4KGZpbGVuYW1lKSkucmVwbGFjZSgvXy9nLCAnPTVGJyk7XG4gICAgcmV0dXJuIGA9P1VURi04P1E/JHtmaWxlTmFtZX0/PWA7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGJvb2xlYW4gc1xuICAgKiBAcmV0dXJuIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX3A4KHM/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBwID0gKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpICsgJzAwMDAwMDAwMCcpLnN1YnN0cigyLCA4KTtcbiAgICByZXR1cm4gcyA/IGAtJHtwLnN1YnN0cigwLCA0KX0tJHtwLnN1YnN0cig0LCA0KX1gIDogcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGphdmFzY3JpcHQgdGV4dCB0byB0aGUgdXRmLTggY29udmVydGVkIHZhcmlhbnQuXG4gICAqIFNlZSBbdW5pY29kZV17QGxpbmsgaHR0cDovL3RobGlzdC5vbmxpbmVob21lLmRlL3Rob21hc19ob21lcGFnZS91bmljb2RlL1VURi04JTIwS29udmVydGllcnVuZyUyMG1pdHRlbHMlMjBKYXZhU2NyaXB0Lmh0bX0gZm9yIHJlZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0gcmF3aW5wdXQgVGhlIGlucHV0IHN0cmluZ1xuICAgKiBAcmV0dXJucyBUaGUgdXRmLTggY29udmVydGVkIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZW5jb2RlVG9VdGY4KHJhd2lucHV0OiBzdHJpbmcpIHtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgbGluZSBicmVha3NcbiAgICAgKi9cbiAgICByYXdpbnB1dCA9IHJhd2lucHV0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7XG4gICAgbGV0IHV0ZnJldHVybiA9ICcnO1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmF3aW5wdXQubGVuZ3RoOyBuKyspIHtcbiAgICAgIC8qKlxuICAgICAgICogVW5pY29kZSBmb3IgY3VycmVudCBjaGFyXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGMgPSByYXdpbnB1dC5jaGFyQ29kZUF0KG4pO1xuICAgICAgaWYgKGMgPCAxMjgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbCBjaGFycyByYW5nZSAwLTEyNyA9PiAxYnl0ZVxuICAgICAgICAgKi9cbiAgICAgICAgdXRmcmV0dXJuICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgPiAxMjcgJiYgYyA8IDIwNDgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbCBjaGFycyByYW5nZSBmcm9tIDEyNyB0byAyMDQ3ID0+IDJieXRlXG4gICAgICAgICAqL1xuICAgICAgICB1dGZyZXR1cm4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyA+PiA2KSB8IDE5Mik7XG4gICAgICAgIHV0ZnJldHVybiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgNjMpIHwgMTI4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbGwgY2hhcnMgcmFuZ2UgZnJvbSAyMDQ4IHRvIDY2NTM2ID0+IDNieXRlXG4gICAgICAgICAqL1xuICAgICAgICB1dGZyZXR1cm4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyA+PiAxMikgfCAyMjQpO1xuICAgICAgICB1dGZyZXR1cm4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgPj4gNikgJiA2MykgfCAxMjgpO1xuICAgICAgICB1dGZyZXR1cm4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDYzKSB8IDEyOCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1dGZyZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2VlIFtxdW90ZWQtcHJpbnRhYmxlXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9xdW90ZWQtcHJpbnRhYmxlL2Jsb2IvbWFzdGVyL3F1b3RlZC1wcmludGFibGUuanN9XG4gICAqKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcXVvdGVkUHJpbnRhYmxlKHN5bWJvbDogc3RyaW5nKSB7XG4gICAgaWYgKHN5bWJvbCA+ICdcXHhGRicpIHtcbiAgICAgIHRocm93IFJhbmdlRXJyb3IoJ2BlbmNvZGVUb1F1b3RlZFByaW50YWJsZWAgZXhwZWN0cyBleHRlbmRlZCBBU0NJSSBpbnB1dCBvbmx5LiBNaXNzaW5nIHByaW9yIFVURi04IGVuY29kaW5nPycpO1xuICAgIH1cbiAgICBjb25zdCBjb2RlUG9pbnQgPSBzeW1ib2wuY2hhckNvZGVBdCgwKTtcbiAgICBjb25zdCBoZXhhZGVjaW1hbCA9IGNvZGVQb2ludC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gJz0nICsgKCcwJyArIGhleGFkZWNpbWFsKS5zbGljZSgtMik7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5pdGVseSB1bnNhZmUgKGkuZS4gdW5zYWZlIGluIGFueSBjb250ZXh0KS4gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZXNjcmliZXMgdGhlc2UgdW5zYWZlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwYXJhbSByYXdpbnB1dCBJbnB1dCBzdHJpbmcgdG8gYmUgZW5jb2RlZFxuICAgKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGVuY29kZVRvUXVvdGVkUHJpbnRhYmxlKHJhd2lucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVuY29kZWQgPSByYXdpbnB1dC5yZXBsYWNlKC9bXFwwLVxcYlxcbi1cXHgxRj1cXHg3Ri1cXHVEN0ZGXFx1REMwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdL2csIHRoaXMucXVvdGVkUHJpbnRhYmxlKTtcbiAgICByZXR1cm4gZW5jb2RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyBBbiBBcnJheSBvZiBPYmplY3QgYnkgZ2l2ZW4ga2V5XG4gICAqIFNlZSBbbmctcGFja2FnciBpc3N1ZXMgNjk2XXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gICAqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIG9yZGVyXG4gICAqIEBwYXJhbSBsb2NhbGVzXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEByZXR1cm5zIChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNvcnRWYWx1ZXMoa2V5ID0gJycsIG9yZGVyID0gU29ydC5BU0MsIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9ucz86IEludGwuQ29sbGF0b3JPcHRpb25zKSB7XG4gICAgY29uc3QgZiA9IChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgbGV0IGNvbXBhcmlzb246IG51bWJlcjtcbiAgICAgIGNvbnN0IHZhckEgPSBVdGlscy5nZXRQcm9wZXJ0eShhLCBrZXkpO1xuICAgICAgY29uc3QgdmFyQiA9IFV0aWxzLmdldFByb3BlcnR5KGIsIGtleSk7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFyQSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhckIgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbXBhcmlzb24gPSB2YXJBIC0gdmFyQjtcbiAgICAgIH0gZWxzZSBpZiAodmFyQSBpbnN0YW5jZW9mIERhdGUgJiYgdmFyQiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgY29tcGFyaXNvbiA9IG5ldyBEYXRlKHZhckEpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHZhckIpLmdldFRpbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0EgPSB2YXJBIHx8IHZhckEgPT09IDAgPyB2YXJBLnRvU3RyaW5nKCkgOiAnJztcbiAgICAgICAgY29uc3Qgc3RyaW5nQiA9IHZhckIgfHwgdmFyQiA9PT0gMCA/IHZhckIudG9TdHJpbmcoKSA6ICcnO1xuICAgICAgICBjb21wYXJpc29uID0gc3RyaW5nQS5sb2NhbGVDb21wYXJlKHN0cmluZ0IsIGxvY2FsZXMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yZGVyID09PSBTb3J0LkRFU0MgPyBjb21wYXJpc29uICogLTEgOiBjb21wYXJpc29uO1xuICAgIH07XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICAvKipcbiAgICogW25nLXBhY2thZ3IgaXNzdWVzIDY5Nl17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2RoZXJnZXMvbmctcGFja2Fnci9pc3N1ZXMvNjk2fVxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0XG4gICAqIEBwYXJhbSBzdHJpbmcga2V5XG4gICAqIEByZXR1cm5zIGFueVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRQcm9wZXJ0eShvYmplY3Q6IGFueSwga2V5ID0gJycpOiBhbnkge1xuICAgIGNvbnN0IGYgPSBrZXkgPyBrZXkuc3BsaXQoJy4nKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgb2JqZWN0KSA6IG9iamVjdDtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb2JqZWN0XG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNldFByb3BlcnR5KG9iamVjdDogYW55LCBrZXkgPSAnJywgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3QgW2hlYWQsIC4uLnJlc3RdID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgIXJlc3QubGVuZ3RoID8gKG9iamVjdFtoZWFkXSA9IHZhbHVlKSA6IFV0aWxzLnNldFByb3BlcnR5KG9iamVjdFtoZWFkXSB8fCAob2JqZWN0W2hlYWRdID0ge30pLCB2YWx1ZSwgcmVzdC5qb2luKCcuJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBvbiBPYnNlcnZhYmxlLmNhdGNoIG9yIE9ic2VydmFibGUuc3Vic2NyaWJlIHRvIHJldHVybiBlbXB0eSB2YWx1ZVxuICAgKiBbbmctcGFja2FnciBpc3N1ZXMgNjk2XXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gICAqXG4gICAqIEBwYXJhbSAoZXJyb3IpID0+IGFueSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyAoZXJyb3IpID0+IE9ic2VydmFibGU8bmV2ZXI+XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVtcHR5KGNhbGxiYWNrPzogKGVycm9yOiBhbnkpID0+IGFueSkge1xuICAgIGNvbnN0IGYgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZUVtcHR5O1xuICAgIH07XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICAvLyAvKipcbiAgLy8gICogVXNlIG9uIE9ic2VydmFibGUuY2F0Y2ggd2l0aCBzcGVjaWZpYyBza2lwTm90aWZpY2F0aW9uIGZ1bmN0aW9uICEhIVxuICAvLyAgKiBbbmctcGFja2FnciBpc3N1ZXMgNjk2XXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBza2lwTm90aWZpY2F0aW9uXG4gIC8vICAqIEBwYXJhbSBjYWxsYmFja1xuICAvLyAgKiBAcGFyYW0gbmFtZVxuICAvLyAgKiBAcGFyYW0gbWVzc2FnZVxuICAvLyAgKi9cbiAgLy8gcHVibGljIHN0YXRpYyBjYXRjaFNraXAoc2tpcE5vdGlmaWNhdGlvbj86IChlcnJvcjogYW55KSA9PiBhbnksIGNhbGxiYWNrPzogKGVycm9yOiBhbnkpID0+IGFueSwgbmFtZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAvLyAgIGNvbnN0IGYgPSAoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgY29uc3QgX2Vycm9yID0gY2FsbGJhY2sgJiYgY2FsbGJhY2soZXJyb3IpO1xuICAvLyAgICAgY29uc3QgX3NraXBOb3RpZmljYXRpb24gPSBza2lwTm90aWZpY2F0aW9uICYmIHNraXBOb3RpZmljYXRpb24oZXJyb3IpO1xuICAvLyAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IFl1dkVycm9yKF9lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gX2Vycm9yIDogZXJyb3IsIG5hbWUsIG1lc3NhZ2UsIF9za2lwTm90aWZpY2F0aW9uKSk7XG4gIC8vICAgfTtcbiAgLy8gICByZXR1cm4gZjtcbiAgLy8gfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBVc2Ugb24gT2JzZXJ2YWJsZS5jYXRjaCAhISFcbiAgLy8gICogW25nLXBhY2thZ3IgaXNzdWVzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBjYWxsYmFja1xuICAvLyAgKiBAcGFyYW0gbmFtZVxuICAvLyAgKiBAcGFyYW0gbWVzc2FnZVxuICAvLyAgKiBAcGFyYW0gc2tpcE5vdGlmaWNhdGlvblxuICAvLyAgKiBAcmV0dXJuIChlcnJvcikgPT4gT2JzZXJ2YWJsZTxuZXZlcj5cbiAgLy8gICovXG4gIC8vIHB1YmxpYyBzdGF0aWMgY2F0Y2goY2FsbGJhY2s/OiAoZXJyb3I6IGFueSkgPT4gYW55LCBuYW1lPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBza2lwTm90aWZpY2F0aW9uPzogYm9vbGVhbikge1xuICAvLyAgIGNvbnN0IGYgPSAoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgY29uc3QgX2Vycm9yID0gY2FsbGJhY2sgJiYgY2FsbGJhY2soZXJyb3IpO1xuICAvLyAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IFl1dkVycm9yKF9lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gX2Vycm9yIDogZXJyb3IsIG5hbWUsIG1lc3NhZ2UsIHNraXBOb3RpZmljYXRpb24pKTtcbiAgLy8gICB9O1xuICAvLyAgIHJldHVybiBmO1xuICAvLyB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIFVzZSBvbiBPYnNlcnZhYmxlLnN1YnNjcmliZSAhISFcbiAgLy8gICogW25nLXBhY2thZ3IgaXNzdWVzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZGhlcmdlcy9uZy1wYWNrYWdyL2lzc3Vlcy82OTZ9XG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBjYWxsYmFja1xuICAvLyAgKiBAcGFyYW0gbmFtZVxuICAvLyAgKiBAcGFyYW0gbWVzc2FnZVxuICAvLyAgKiBAcGFyYW0gc2tpcE5vdGlmaWNhdGlvblxuICAvLyAgKiBAcmV0dXJuIChlcnJvcikgPT4gdm9pZFxuICAvLyAgKi9cbiAgLy8gcHVibGljIHN0YXRpYyB0aHJvdyhjYWxsYmFjaz86IChlcnJvcjogYW55KSA9PiBhbnksIG5hbWU/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIHNraXBOb3RpZmljYXRpb24/OiBib29sZWFuKSB7XG4gIC8vICAgY29uc3QgZiA9IChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICBjb25zdCBfZXJyb3IgPSBjYWxsYmFjayAmJiBjYWxsYmFjayhlcnJvcik7XG4gIC8vICAgICB0aHJvdyBuZXcgWXV2RXJyb3IoX2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBfZXJyb3IgOiBlcnJvciwgbmFtZSwgbWVzc2FnZSwgc2tpcE5vdGlmaWNhdGlvbik7XG4gIC8vICAgfTtcbiAgLy8gICByZXR1cm4gZjtcbiAgLy8gfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBVc2Ugb24gT2JzZXJ2YWJsZS5zdWJzY3JpYmUgb25seSBpZiB5b3Ugd2FudCB0byBza2lwIG5vdGlmaWNhdGlvbiAvIHRvYXN0ISEhXG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBjYWxsYmFja1xuICAvLyAgKiBAcGFyYW0gbmFtZVxuICAvLyAgKiBAcGFyYW0gbWVzc2FnZVxuICAvLyAgKiBAcGFyYW0gc2tpcE5vdGlmaWNhdGlvblxuICAvLyAgKiBAcmV0dXJuIChlcnJvcikgPT4gdm9pZFxuICAvLyAgKi9cbiAgLy8gcHVibGljIHN0YXRpYyBsb2dFcnJvcihjYWxsYmFjaz86IChlcnJvcjogYW55KSA9PiBhbnksIG5hbWU/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIHNraXBOb3RpZmljYXRpb24gPSB0cnVlKSB7XG4gIC8vICAgcmV0dXJuIFV0aWxzLnRocm93KGNhbGxiYWNrLCBuYW1lLCBtZXNzYWdlLCBza2lwTm90aWZpY2F0aW9uKTtcbiAgLy8gfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBDaGVja3MgaWYgZWxlbWVudCBpcyB2aXNpYmxlXG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSBlbGVtXG4gIC8vICAqIEByZXR1cm4gYm9vbGVhblxuICAvLyAgKi9cbiAgLy8gcHVibGljIHN0YXRpYyBpc1Zpc2libGUoZWxlbTogYW55KTogYm9vbGVhbiB7XG4gIC8vICAgcmV0dXJuICEhKGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCk7XG4gIC8vIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEJhc2VIcmVmKHJlbW92ZVRyYWlsaW5nU2xhc2g/OiBib29sZWFuKSB7XG4gICAgY29uc3QgYmFzZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTtcbiAgICBjb25zdCBiYXNlSHJlZiA9IGJhc2VFbCA/IGJhc2VFbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYmFzZUhyZWYgPyAocmVtb3ZlVHJhaWxpbmdTbGFzaCA/IGJhc2VIcmVmLnN1YnN0cigwLCBiYXNlSHJlZi5sZW5ndGggLSAxKSA6IGJhc2VIcmVmKSA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydW5jYXRlIGEgc3RyaW5nIChmaXJzdCBhcmd1bWVudCkgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aCAoc2Vjb25kIGFyZ3VtZW50KS5cbiAgICogUmV0dXJuIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIHdpdGggYSAuLi4gZW5kaW5nIG9yIHdoYXRzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gc3RyaW5nIHN0clxuICAgKiBAcGFyYW0gbnVtYmVyIG51bVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0cnVuY2F0ZVN0cmluZyhzdHI6IHN0cmluZywgbnVtOiBudW1iZXIsIGVuZGluZyA9ICcuLi4nKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBudW0pIHtcbiAgICAgIGlmIChudW0gPiAzKSB7XG4gICAgICAgIG51bSAtPSAzO1xuICAgICAgfVxuICAgICAgc3RyID0gYCR7c3RyLnN1YnN0cmluZygwLCBudW0pfSR7ZW5kaW5nfWA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBUaW1lWm9uZSBPZmZzZXN0IGFzIG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VGltZXpvbmVPZmZzZXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0byBkYXRlIHdpdGggeXl5eS1tbS1kZCBmb3JtYXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNmb3JtRGF0ZSh2OiBEYXRlIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdiAmJiBuZXcgRGF0ZShuZXcgRGF0ZSh2KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh2KS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNFZGdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKCdFZGdlJywgJ2knKS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0ZpcmVmb3goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJ2ZpcmVmb3gnLCAnaScpLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzU2FmYXJpKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKCdeKCg/IWNocm9tZXxhbmRyb2lkfGNyaW9zfGZ4aW9zKS4pKnNhZmFyaScsICdpJykudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNFbXB0eShvYmo6IGFueSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT09ICcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBpc05hTihvYmopO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgPyBmYWxzZSA6ICFPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNFbXB0eU9yRmFsc2UodmFsOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nID8gIXZhbCA6IFV0aWxzLmlzRW1wdHkodmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZXNjYXBlSHRtbChzdHI6IHN0cmluZykge1xuICAgIHN0ciA9IHN0ciA/IHN0ciA6ICcnO1xuICAgIGNvbnN0IGVudGl0eU1hcDogYW55ID0ge1xuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJzwnOiAnJmx0OycsXG4gICAgICAnPic6ICcmZ3Q7JyxcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgXCInXCI6ICcmIzM5OycsXG4gICAgICAnLyc6ICcmI3gyRjsnXG4gICAgfTtcbiAgICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZSgvWyY8PlwiJ1xcL10vZywgKHMpID0+IGVudGl0eU1hcFtzXSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFycmF5VG9PYmplY3Q8VD4oXG4gICAgYXJyOiBhbnlbXSA9IFtdLFxuICAgIGtleVByb3BlcnR5Pzogc3RyaW5nIHwgKChvOiBhbnkpID0+IHN0cmluZyksXG4gICAgdmFsdWVQcm9wZXJ0eT86IHN0cmluZyB8ICgobzogYW55KSA9PiBhbnkpXG4gICk6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcbiAgICBjb25zdCBrZXkgPSB0eXBlb2Yga2V5UHJvcGVydHkgPT09ICdzdHJpbmcnID8gKG86IGFueSkgPT4gb1trZXlQcm9wZXJ0eV0gOiBrZXlQcm9wZXJ0eTtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZVByb3BlcnR5ID09PSAnc3RyaW5nJyA/IChvOiBhbnkpID0+IG9bdmFsdWVQcm9wZXJ0eV0gOiB2YWx1ZVByb3BlcnR5O1xuICAgIHJldHVybiBhcnIucmVkdWNlKChhY2M6IGFueSwgY3VyLCBpKSA9PiB7XG4gICAgICBhY2Nba2V5ID8ga2V5KGN1cikgOiBpXSA9IHZhbHVlID8gdmFsdWUoY3VyKSA6IGN1cjtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgLy8gcHVibGljIHN0YXRpYyBuYXZpZ2F0ZShuZXdUYWI6IGJvb2xlYW4sIHJvdXRlcjogUm91dGVyLCBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzKTogUHJvbWlzZTxhbnk+IHtcbiAgLy8gICBpZiAobmV3VGFiKSB7XG4gIC8vICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4gVXRpbHMub3BlbldpbmRvdyhyb3V0ZXIuc2VyaWFsaXplVXJsKHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLCBuYXZpZ2F0aW9uRXh0cmFzKSkpKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgcmV0dXJuIHJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywgbmF2aWdhdGlvbkV4dHJhcyk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLy8gcHVibGljIHN0YXRpYyBvcGVuV2luZG93KHVybDogc3RyaW5nID0gJycsIHRhcmdldCA9ICdfYmxhbmsnLCBmZWF0dXJlcz86IHN0cmluZyk6IFdpbmRvdyB8IG51bGwge1xuICAvLyAgIHJldHVybiB3aW5kb3cub3Blbih1cmwubWF0Y2gobmV3IFJlZ0V4cCgnXi8uKycpKSA/IHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoJ14vJyksICcnKSA6IHVybCwgdGFyZ2V0LCBmZWF0dXJlcyk7IC8vIHJlbGF0aXZlIHRvIGhvc3RcbiAgLy8gfVxuXG4gIHB1YmxpYyBzdGF0aWMgZG93bmxvYWRCbG9iKGNvbnRlbnQ6IGFueSwgbWltZVR5cGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGJvbSA9IG5ldyBVaW50OEFycmF5KFsweGVmLCAweGJiLCAweGJmXSk7IC8vIEZPUk0gQk9NXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtib20sIGNvbnRlbnRdLCB7IHR5cGU6ICdvY3RldC9zdHJlYW0nIH0pO1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgIGEuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcbiAgICBhLmNsaWNrKCk7XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICB9XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXV1dmlzLWNsaWVudC1jb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL3l1dXZpcy1jbGllbnQtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -1,20 +0,0 @@
1
- import { OAuthStorage } from 'angular-oauth2-oidc';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "angular-oauth2-oidc";
4
- import * as i2 from "@ngx-translate/core";
5
- import * as i3 from "./client-core.shared.module";
6
- export declare function storageFactory(): OAuthStorage;
7
- /**
8
- * `YuvClientCoreModule` provides a bunch of services to interact with a yuuvis backend.
9
- *
10
- *
11
- */
12
- export declare class YuvClientCoreModule {
13
- /**
14
- * @ignore
15
- */
16
- constructor(parentModule: YuvClientCoreModule);
17
- static ɵfac: i0.ɵɵFactoryDeclaration<YuvClientCoreModule, [{ optional: true; skipSelf: true; }]>;
18
- static ɵmod: i0.ɵɵNgModuleDeclaration<YuvClientCoreModule, never, [typeof i1.OAuthModule, typeof i2.TranslateModule], [typeof i3.YuvClientCoreSharedModule]>;
19
- static ɵinj: i0.ɵɵInjectorDeclaration<YuvClientCoreModule>;
20
- }
@@ -1,10 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "@ngx-translate/core";
3
- /**
4
- * `YuvClientCoreSharedModule` sets up and re-exports the TranslateModule.
5
- */
6
- export declare class YuvClientCoreSharedModule {
7
- static ɵfac: i0.ɵɵFactoryDeclaration<YuvClientCoreSharedModule, never>;
8
- static ɵmod: i0.ɵɵNgModuleDeclaration<YuvClientCoreSharedModule, never, never, [typeof i1.TranslateModule]>;
9
- static ɵinj: i0.ɵɵInjectorDeclaration<YuvClientCoreSharedModule>;
10
- }
@@ -1,16 +0,0 @@
1
- import { OAuthModuleConfig, OAuthService } from 'angular-oauth2-oidc';
2
- import { Observable } from 'rxjs';
3
- import { OpenIdConfig } from '../backend/backend.interface';
4
- import { CoreConfig } from '../config/core-config';
5
- import * as i0 from "@angular/core";
6
- export declare class OidcService {
7
- private oAuthConfig;
8
- config: CoreConfig;
9
- private oauthService;
10
- constructor(oAuthConfig: OAuthModuleConfig, config: CoreConfig, oauthService: OAuthService);
11
- initOpenIdConnect(oidc: OpenIdConfig | undefined): Observable<OpenIdConfig | undefined>;
12
- logout(): void;
13
- setupCookie(viewer: string, path: string, headers: any): Observable<unknown>;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<OidcService, [{ optional: true; }, null, null]>;
15
- static ɵprov: i0.ɵɵInjectableDeclaration<OidcService>;
16
- }