@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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1jb3JlL3NyYy9saWIvc2VydmljZS91cGxvYWQvdXBsb2FkLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG4vKipcbiAqIEludHJlZmljZSBmb3IgcHJvdmlkaW5nIGFuIHVwbG9hZGluZyBzdGF0dXMgb2YgYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NTdGF0dXMge1xuICBpdGVtczogUHJvZ3Jlc3NTdGF0dXNJdGVtW107XG4gIGVycjogbnVtYmVyO1xufVxuLyoqXG4gKiBJcyBwYXJ0IG9mIHRoZSBgUHJvZ3Jlc3NTdGF0dXNgIGludGVyZmFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzU3RhdHVzSXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIHByb2dyZXNzOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICByZXN1bHQ/OiBVcGxvYWRSZXN1bHRbXTtcbiAgZXJyPzoge1xuICAgIGNvZGU6IG51bWJlcjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gIH07XG59XG4vKipcbiAqIGlzIGEgcGFydCBvZiBgQ3JlYXRlZE9iamVjdGAgaW50ZXJmYWNlXG4gKi9cbmludGVyZmFjZSBDb250ZW50U3RyZWFtIHtcbiAgY29udGVudFN0cmVhbUlkOiBzdHJpbmc7XG4gIHJlcG9zaXRvcnlJZDogc3RyaW5nO1xuICBkaWdlc3Q6IHN0cmluZztcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgYXJjaGl2ZVBhdGg6IHN0cmluZztcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIG1pbWVUeXBlOiBzdHJpbmc7XG59XG4vKipcbiAqIEludGVyZmFjZSBwcm92aWRuZyBwcm9wZXJ0aWVzIG9mIHVwbG9hZGVkIG9iamVjdCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkUmVzdWx0IHtcbiAgb2JqZWN0SWQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICBjb250ZW50U3RyZWFtSWQ6IHN0cmluZztcbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRoYXQgd2FzIHVzZWQgYnkgdXBsb2FkIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVkT2JqZWN0IHtcbiAgYm9keT86IHtcbiAgICBvYmplY3RzOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBhbnk7XG4gICAgICBjb250ZW50U3RyZWFtcz86IENvbnRlbnRTdHJlYW1bXTtcbiAgICB9W107XG4gIH07XG59XG4iXX0=
@@ -1,228 +0,0 @@
1
- import { HttpClient, HttpEventType, HttpRequest, HttpResponse } from '@angular/common/http';
2
- import { inject, Injectable } from '@angular/core';
3
- import { BehaviorSubject, Observable, ReplaySubject, Subject, throwError } from 'rxjs';
4
- import { catchError, filter, map, scan, tap } from 'rxjs/operators';
5
- import { Utils } from '../../util/utils';
6
- import { BackendService } from '../backend/backend.service';
7
- import { Logger } from '../logger/logger';
8
- import { BaseObjectTypeField } from '../system/system.enum';
9
- import * as i0 from "@angular/core";
10
- const transformResponse = () => map((res) => (res && res.body ? res.body.objects.map((val) => val) : null));
11
- /**
12
- * Service for providing upload of different object types into a client.
13
- */
14
- export class UploadService {
15
- constructor() {
16
- this.#backend = inject(BackendService);
17
- this.#http = inject(HttpClient);
18
- this.#logger = inject(Logger);
19
- this.#status = { err: 0, items: [] };
20
- this.#statusSource = new ReplaySubject();
21
- this.status$ = this.#statusSource.pipe(scan((acc, newVal) => ({ ...acc, ...newVal }), this.#status));
22
- this.#uploadStatus = new BehaviorSubject(null);
23
- this.uploadStatus$ = this.#uploadStatus.asObservable();
24
- }
25
- #backend;
26
- #http;
27
- #logger;
28
- #status;
29
- #statusSource;
30
- #uploadStatus;
31
- /**
32
- * Upload a file.
33
- * @param url The URL to upload the file to
34
- * @param file The file to be uploaded
35
- * @param label A label that will show up in the upload overlay dialog while uploading
36
- */
37
- upload(url, file, label, silent) {
38
- return this.#executeUpload(url, file, label || file.name, silent);
39
- }
40
- /**
41
- * Upload files using multipart upload.
42
- * @param url The URL to upload the files to
43
- * @param files The files to be uploaded
44
- * @param data Data to be send along with the files
45
- * @param label A label that will show up in the upload overlay dialog while uploading
46
- */
47
- uploadMultipart(url, files, data, label, silent) {
48
- return this.#executeMultipartUpload(url, files, label || 'Upload', data, silent);
49
- }
50
- createDocument(url, data) {
51
- const formData = this.#createFormData({ data });
52
- const request = this.#createHttpRequest(url, { formData }, false);
53
- return this.#http.request(request).pipe(filter((obj) => obj && obj.body), transformResponse(), catchError((err) => throwError(() => err)));
54
- }
55
- /**
56
- * Cancels an upload request and removes it from the list of files being uploaded.
57
- * @param id ID of the UploadItem to be canceled
58
- */
59
- cancelItem(id) {
60
- if (id) {
61
- const match = this.#status.items.find((i) => i.id === id);
62
- if (match) {
63
- match.subscription.unsubscribe();
64
- this.#status.items = this.#status.items.filter((i) => i.id !== id);
65
- }
66
- }
67
- else {
68
- this.#status.items.forEach((element) => element.subscription.unsubscribe());
69
- this.#status.items = [];
70
- }
71
- this.#status.err = this.#status.items.filter((i) => i.err).length;
72
- this.#statusSource.next(this.#status);
73
- }
74
- /**
75
- * Prepares Formdata for multipart upload.
76
- * @param from contains form and or file
77
- */
78
- #createFormData({ file, data }) {
79
- const formData = new FormData();
80
- (file || []).forEach((f) => formData.append('files', f, f.name));
81
- data ? formData.append('data', new Blob([JSON.stringify(data)], { type: 'application/json' })) : null;
82
- return formData;
83
- }
84
- /**
85
- * Prepares Http Request.
86
- * @param url The URL to upload the file to
87
- * @param content formdata or single file
88
- * @param reportProgress Request should report upload progress
89
- * @param method Request method
90
- */
91
- #createHttpRequest(url, content, reportProgress, method = 'POST') {
92
- const { formData, file } = content;
93
- // add request param to bypass the serviceworker
94
- url += `${url.indexOf('?') === -1 ? '?' : '&'}ngsw-bypass=1`;
95
- let headers = this.#backend.getAuthHeaders();
96
- if (file) {
97
- headers = headers.set('Content-Disposition', `attachment; filename*=utf-8''${encodeURIComponent(file.name)}`);
98
- }
99
- return new HttpRequest(method, url, file || formData, { headers, reportProgress });
100
- }
101
- /**
102
- * Prepares single file POST upload.
103
- * @param url The URL to upload the file to
104
- * @param file The file to be uploaded
105
- * @param label A label that will show up in the upload overlay dialog while uploading
106
- */
107
- #executeUpload(url, file, label, silent = false) {
108
- const request = this.#createHttpRequest(url, { file }, true);
109
- return silent ? this.#http.request(request) : this.#startUploadWithFile(request, label).pipe(transformResponse());
110
- }
111
- /**
112
- * Prepare multipart upload.
113
- * @param url The URL to upload the file to
114
- * @param file Array of files to be uploaded
115
- * @param label A label that will show up in the upload overlay dialog while uploading
116
- * @param data Data to be send along with the files
117
- */
118
- #executeMultipartUpload(url, file, label, data, silent = false) {
119
- const formData = this.#createFormData({ file, data });
120
- const request = this.#createHttpRequest(url, { formData }, true);
121
- return silent ? this.#http.request(request) : this.#startUploadWithFile(request, label).pipe(transformResponse());
122
- }
123
- #generateResult(result) {
124
- const objects = result.body?.objects;
125
- if (objects && objects.length > 1) {
126
- const data = objects[0];
127
- // const bp = this.#system.getBaseProperties();
128
- // const label = data.properties[bp.title] ? data.properties[bp.title].value : '...';
129
- // TODO: Get the label from somewhere
130
- const label = '...';
131
- return [
132
- {
133
- objectId: objects.map((val) => val.properties[BaseObjectTypeField.OBJECT_ID].value),
134
- contentStreamId: data.contentStreams[0]?.contentStreamId,
135
- filename: data.contentStreams[0]?.fileName,
136
- label: `(${objects.length}) ${label}`
137
- }
138
- ];
139
- }
140
- else {
141
- return result.body.objects.map((o) => ({
142
- objectId: o.properties[BaseObjectTypeField.OBJECT_ID].value,
143
- contentStreamId: o.contentStreams[0]?.contentStreamId,
144
- filename: o.contentStreams[0]?.fileName,
145
- // label: o.properties[bp.title] ? o.properties[bp.title].value : o.contentStreams![0]?.fileName
146
- // TODO: Get the label from somewhere
147
- label: o.contentStreams[0]?.fileName
148
- }));
149
- }
150
- }
151
- #createProgressStatus(event, progress, id) {
152
- if (event.type === HttpEventType.UploadProgress) {
153
- const percentDone = Math.round((100 * event.loaded) / event.total);
154
- progress.next(percentDone);
155
- }
156
- else if (event instanceof HttpResponse) {
157
- progress.complete();
158
- // add upload response
159
- // this.status.items = this.status.items.filter(s => s.id !== id);
160
- const idx = this.#status.items.findIndex((s) => s.id === id);
161
- if (idx !== -1) {
162
- this.#status.items[idx].result = this.#generateResult(event);
163
- this.#statusSource.next(this.#status);
164
- }
165
- }
166
- }
167
- #createUploadError(err, progress, id) {
168
- const statusItem = this.#status.items.find((s) => s.id === id);
169
- statusItem.err = {
170
- code: err.status,
171
- message: err.error ? err.error.errorMessage : err.message
172
- };
173
- this.#logger.error('upload failed', statusItem);
174
- this.#status.err++;
175
- this.#statusSource.next(this.#status);
176
- progress.next(0);
177
- return throwError(() => new Error(err.message));
178
- }
179
- /**
180
- * Actually starts the upload process.
181
- * @param request Request to be executed
182
- * @param label A label that will show up in the upload overlay dialog while uploading
183
- */
184
- #startUploadWithFile(request, label) {
185
- return new Observable((o) => {
186
- const id = Utils.uuid();
187
- const progress = new Subject();
188
- let result;
189
- // Create a subscription from the http request that will be applied to the upload
190
- // status item in order to be able to cancel the request later on.
191
- this.#uploadStatus.next(false);
192
- const subscription = this.#http
193
- .request(request)
194
- .pipe(catchError((err) => this.#createUploadError(err, progress, id)), tap((event) => this.#createProgressStatus(event, progress, id)))
195
- // actual return value of this function
196
- .subscribe({
197
- next: (res) => (res.status ? (result = res) : null),
198
- error: (err) => {
199
- o.error(err);
200
- this.#uploadStatus.next(true);
201
- o.complete();
202
- },
203
- complete: () => {
204
- o.next(result);
205
- this.#uploadStatus.next(true);
206
- o.complete();
207
- }
208
- });
209
- this.#status.items.push({
210
- id,
211
- filename: label,
212
- progress: progress.asObservable(),
213
- subscription,
214
- err: undefined
215
- });
216
- this.#statusSource.next(this.#status);
217
- });
218
- }
219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
220
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UploadService, providedIn: 'root' }); }
221
- }
222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UploadService, decorators: [{
223
- type: Injectable,
224
- args: [{
225
- providedIn: 'root'
226
- }]
227
- }] });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2UvdXBsb2FkL3VwbG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWdDLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHNUQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRTNIOztHQUVHO0FBSUgsTUFBTSxPQUFP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LElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDZixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLENBQUM7YUFDRixDQUFDLENBQUM7WUFFTCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLFFBQVEsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pDLFlBQVk7Z0JBQ1osR0FBRyxFQUFFLFNBQVM7YUFDZixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQXhOVSxhQUFhO21IQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIHNjYW4sIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlscyc7XG5pbXBvcnQgeyBCYWNrZW5kU2VydmljZSB9IGZyb20gJy4uL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci9sb2dnZXInO1xuaW1wb3J0IHsgQmFzZU9iamVjdFR5cGVGaWVsZCB9IGZyb20gJy4uL3N5c3RlbS9zeXN0ZW0uZW51bSc7XG5pbXBvcnQgeyBDcmVhdGVkT2JqZWN0LCBQcm9ncmVzc1N0YXR1cywgVXBsb2FkUmVzdWx0IH0gZnJvbSAnLi91cGxvYWQuaW50ZXJmYWNlJztcblxuY29uc3QgdHJhbnNmb3JtUmVzcG9uc2UgPSAoKSA9PiBtYXAoKHJlczogQ3JlYXRlZE9iamVjdCkgPT4gKHJlcyAmJiByZXMuYm9keSA/IHJlcy5ib2R5Lm9iamVjdHMubWFwKCh2YWwpID0+IHZhbCkgOiBudWxsKSk7XG5cbi8qKlxuICogU2VydmljZSBmb3IgcHJvdmlkaW5nIHVwbG9hZCBvZiBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzIGludG8gYSBjbGllbnQuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZFNlcnZpY2Uge1xuICByZWFkb25seSAjYmFja2VuZCA9IGluamVjdChCYWNrZW5kU2VydmljZSk7XG4gIHJlYWRvbmx5ICNodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICByZWFkb25seSAjbG9nZ2VyID0gaW5qZWN0KExvZ2dlcik7XG5cbiAgI3N0YXR1czogUHJvZ3Jlc3NTdGF0dXMgPSB7IGVycjogMCwgaXRlbXM6IFtdIH07XG4gICNzdGF0dXNTb3VyY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxQcm9ncmVzc1N0YXR1cz4oKTtcbiAgc3RhdHVzJDogT2JzZXJ2YWJsZTxQcm9ncmVzc1N0YXR1cz4gPSB0aGlzLiNzdGF0dXNTb3VyY2UucGlwZShzY2FuKChhY2M6IFByb2dyZXNzU3RhdHVzLCBuZXdWYWwpID0+ICh7IC4uLmFjYywgLi4ubmV3VmFsIH0pLCB0aGlzLiNzdGF0dXMpKTtcbiAgI3VwbG9hZFN0YXR1cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbiB8IG51bGw+KG51bGwpO1xuICB1cGxvYWRTdGF0dXMkOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBudWxsPiA9IHRoaXMuI3VwbG9hZFN0YXR1cy5hc09ic2VydmFibGUoKTtcblxuICAvKipcbiAgICogVXBsb2FkIGEgZmlsZS5cbiAgICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIHVwbG9hZCB0aGUgZmlsZSB0b1xuICAgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byBiZSB1cGxvYWRlZFxuICAgKiBAcGFyYW0gbGFiZWwgQSBsYWJlbCB0aGF0IHdpbGwgc2hvdyB1cCBpbiB0aGUgdXBsb2FkIG92ZXJsYXkgZGlhbG9nIHdoaWxlIHVwbG9hZGluZ1xuICAgKi9cbiAgdXBsb2FkKHVybDogc3RyaW5nLCBmaWxlOiBGaWxlLCBsYWJlbD86IHN0cmluZywgc2lsZW50PzogYm9vbGVhbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGVVcGxvYWQodXJsLCBmaWxlLCBsYWJlbCB8fCBmaWxlLm5hbWUsIHNpbGVudCk7XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkIGZpbGVzIHVzaW5nIG11bHRpcGFydCB1cGxvYWQuXG4gICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB1cGxvYWQgdGhlIGZpbGVzIHRvXG4gICAqIEBwYXJhbSBmaWxlcyBUaGUgZmlsZXMgdG8gYmUgdXBsb2FkZWRcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBzZW5kIGFsb25nIHdpdGggdGhlIGZpbGVzXG4gICAqIEBwYXJhbSBsYWJlbCBBIGxhYmVsIHRoYXQgd2lsbCBzaG93IHVwIGluIHRoZSB1cGxvYWQgb3ZlcmxheSBkaWFsb2cgd2hpbGUgdXBsb2FkaW5nXG4gICAqL1xuICB1cGxvYWRNdWx0aXBhcnQodXJsOiBzdHJpbmcsIGZpbGVzOiBGaWxlW10sIGRhdGE/OiBhbnksIGxhYmVsPzogc3RyaW5nLCBzaWxlbnQ/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jZXhlY3V0ZU11bHRpcGFydFVwbG9hZCh1cmwsIGZpbGVzLCBsYWJlbCB8fCAnVXBsb2FkJywgZGF0YSwgc2lsZW50KTtcbiAgfVxuXG4gIGNyZWF0ZURvY3VtZW50KHVybDogc3RyaW5nLCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IHRoaXMuI2NyZWF0ZUZvcm1EYXRhKHsgZGF0YSB9KTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy4jY3JlYXRlSHR0cFJlcXVlc3QodXJsLCB7IGZvcm1EYXRhIH0sIGZhbHNlKTtcbiAgICByZXR1cm4gdGhpcy4jaHR0cC5yZXF1ZXN0KHJlcXVlc3QpLnBpcGUoXG4gICAgICBmaWx0ZXIoKG9iajogYW55KSA9PiBvYmogJiYgb2JqLmJvZHkpLFxuICAgICAgdHJhbnNmb3JtUmVzcG9uc2UoKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gdGhyb3dFcnJvcigoKSA9PiBlcnIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBhbiB1cGxvYWQgcmVxdWVzdCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBsaXN0IG9mIGZpbGVzIGJlaW5nIHVwbG9hZGVkLlxuICAgKiBAcGFyYW0gaWQgSUQgb2YgdGhlIFVwbG9hZEl0ZW0gdG8gYmUgY2FuY2VsZWRcbiAgICovXG4gIGNhbmNlbEl0ZW0oaWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy4jc3RhdHVzLml0ZW1zLmZpbmQoKGkpID0+IGkuaWQgPT09IGlkKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy4jc3RhdHVzLml0ZW1zID0gdGhpcy4jc3RhdHVzLml0ZW1zLmZpbHRlcigoaSkgPT4gaS5pZCAhPT0gaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNzdGF0dXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICB0aGlzLiNzdGF0dXMuaXRlbXMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy4jc3RhdHVzLmVyciA9IHRoaXMuI3N0YXR1cy5pdGVtcy5maWx0ZXIoKGkpID0+IGkuZXJyKS5sZW5ndGg7XG4gICAgdGhpcy4jc3RhdHVzU291cmNlLm5leHQodGhpcy4jc3RhdHVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBGb3JtZGF0YSBmb3IgbXVsdGlwYXJ0IHVwbG9hZC5cbiAgICogQHBhcmFtIGZyb20gY29udGFpbnMgZm9ybSBhbmQgb3IgZmlsZVxuICAgKi9cbiAgI2NyZWF0ZUZvcm1EYXRhKHsgZmlsZSwgZGF0YSB9OiB7IGRhdGE/OiBhbnk7IGZpbGU/OiBGaWxlW10gfSk6IEZvcm1EYXRhIHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAoZmlsZSB8fCBbXSkuZm9yRWFjaCgoZikgPT4gZm9ybURhdGEuYXBwZW5kKCdmaWxlcycsIGYsIGYubmFtZSkpO1xuICAgIGRhdGEgPyBmb3JtRGF0YS5hcHBlbmQoJ2RhdGEnLCBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZGF0YSldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KSkgOiBudWxsO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBIdHRwIFJlcXVlc3QuXG4gICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB1cGxvYWQgdGhlIGZpbGUgdG9cbiAgICogQHBhcmFtIGNvbnRlbnQgZm9ybWRhdGEgb3Igc2luZ2xlIGZpbGVcbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIFJlcXVlc3Qgc2hvdWxkIHJlcG9ydCB1cGxvYWQgcHJvZ3Jlc3NcbiAgICogQHBhcmFtIG1ldGhvZCBSZXF1ZXN0IG1ldGhvZFxuICAgKi9cbiAgI2NyZWF0ZUh0dHBSZXF1ZXN0KHVybDogc3RyaW5nLCBjb250ZW50OiBQYXJ0aWFsPHsgZm9ybURhdGE6IEZvcm1EYXRhOyBmaWxlOiBGaWxlIH0+LCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiwgbWV0aG9kID0gJ1BPU1QnKTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgY29uc3QgeyBmb3JtRGF0YSwgZmlsZSB9ID0gY29udGVudDtcbiAgICAvLyBhZGQgcmVxdWVzdCBwYXJhbSB0byBieXBhc3MgdGhlIHNlcnZpY2V3b3JrZXJcbiAgICB1cmwgKz0gYCR7dXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9bmdzdy1ieXBhc3M9MWA7XG5cbiAgICBsZXQgaGVhZGVycyA9IHRoaXMuI2JhY2tlbmQuZ2V0QXV0aEhlYWRlcnMoKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7IGZpbGVuYW1lKj11dGYtOCcnJHtlbmNvZGVVUklDb21wb25lbnQoZmlsZS5uYW1lKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEh0dHBSZXF1ZXN0KG1ldGhvZCwgdXJsLCBmaWxlIHx8IGZvcm1EYXRhLCB7IGhlYWRlcnMsIHJlcG9ydFByb2dyZXNzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHNpbmdsZSBmaWxlIFBPU1QgdXBsb2FkLlxuICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gdXBsb2FkIHRoZSBmaWxlIHRvXG4gICAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIGJlIHVwbG9hZGVkXG4gICAqIEBwYXJhbSBsYWJlbCBBIGxhYmVsIHRoYXQgd2lsbCBzaG93IHVwIGluIHRoZSB1cGxvYWQgb3ZlcmxheSBkaWFsb2cgd2hpbGUgdXBsb2FkaW5nXG4gICAqL1xuICAjZXhlY3V0ZVVwbG9hZCh1cmw6IHN0cmluZywgZmlsZTogRmlsZSwgbGFiZWw6IHN0cmluZywgc2lsZW50ID0gZmFsc2UpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLiNjcmVhdGVIdHRwUmVxdWVzdCh1cmwsIHsgZmlsZSB9LCB0cnVlKTtcbiAgICByZXR1cm4gc2lsZW50ID8gdGhpcy4jaHR0cC5yZXF1ZXN0KHJlcXVlc3QpIDogdGhpcy4jc3RhcnRVcGxvYWRXaXRoRmlsZShyZXF1ZXN0LCBsYWJlbCkucGlwZSh0cmFuc2Zvcm1SZXNwb25zZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIG11bHRpcGFydCB1cGxvYWQuXG4gICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB1cGxvYWQgdGhlIGZpbGUgdG9cbiAgICogQHBhcmFtIGZpbGUgQXJyYXkgb2YgZmlsZXMgdG8gYmUgdXBsb2FkZWRcbiAgICogQHBhcmFtIGxhYmVsIEEgbGFiZWwgdGhhdCB3aWxsIHNob3cgdXAgaW4gdGhlIHVwbG9hZCBvdmVybGF5IGRpYWxvZyB3aGlsZSB1cGxvYWRpbmdcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBzZW5kIGFsb25nIHdpdGggdGhlIGZpbGVzXG4gICAqL1xuICAjZXhlY3V0ZU11bHRpcGFydFVwbG9hZCh1cmw6IHN0cmluZywgZmlsZTogRmlsZVtdLCBsYWJlbDogc3RyaW5nLCBkYXRhPzogYW55LCBzaWxlbnQgPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gdGhpcy4jY3JlYXRlRm9ybURhdGEoeyBmaWxlLCBkYXRhIH0pO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLiNjcmVhdGVIdHRwUmVxdWVzdCh1cmwsIHsgZm9ybURhdGEgfSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHNpbGVudCA/IHRoaXMuI2h0dHAucmVxdWVzdChyZXF1ZXN0KSA6IHRoaXMuI3N0YXJ0VXBsb2FkV2l0aEZpbGUocmVxdWVzdCwgbGFiZWwpLnBpcGUodHJhbnNmb3JtUmVzcG9uc2UoKSk7XG4gIH1cblxuICAjZ2VuZXJhdGVSZXN1bHQocmVzdWx0OiBDcmVhdGVkT2JqZWN0KTogVXBsb2FkUmVzdWx0W10ge1xuICAgIGNvbnN0IG9iamVjdHMgPSByZXN1bHQuYm9keT8ub2JqZWN0cztcbiAgICBpZiAob2JqZWN0cyAmJiBvYmplY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBvYmplY3RzWzBdO1xuICAgICAgLy8gY29uc3QgYnAgPSB0aGlzLiNzeXN0ZW0uZ2V0QmFzZVByb3BlcnRpZXMoKTtcbiAgICAgIC8vIGNvbnN0IGxhYmVsID0gZGF0YS5wcm9wZXJ0aWVzW2JwLnRpdGxlXSA/IGRhdGEucHJvcGVydGllc1ticC50aXRsZV0udmFsdWUgOiAnLi4uJztcbiAgICAgIC8vIFRPRE86IEdldCB0aGUgbGFiZWwgZnJvbSBzb21ld2hlcmVcbiAgICAgIGNvbnN0IGxhYmVsID0gJy4uLic7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdHMubWFwKCh2YWw6IGFueSkgPT4gdmFsLnByb3BlcnRpZXNbQmFzZU9iamVjdFR5cGVGaWVsZC5PQkpFQ1RfSURdLnZhbHVlKSxcbiAgICAgICAgICBjb250ZW50U3RyZWFtSWQ6IGRhdGEuY29udGVudFN0cmVhbXMhWzBdPy5jb250ZW50U3RyZWFtSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGRhdGEuY29udGVudFN0cmVhbXMhWzBdPy5maWxlTmFtZSxcbiAgICAgICAgICBsYWJlbDogYCgke29iamVjdHMubGVuZ3RofSkgJHtsYWJlbH1gXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQuYm9keSEub2JqZWN0cy5tYXAoKG8pID0+ICh7XG4gICAgICAgIG9iamVjdElkOiBvLnByb3BlcnRpZXNbQmFzZU9iamVjdFR5cGVGaWVsZC5PQkpFQ1RfSURdLnZhbHVlLFxuICAgICAgICBjb250ZW50U3RyZWFtSWQ6IG8uY29udGVudFN0cmVhbXMhWzBdPy5jb250ZW50U3RyZWFtSWQsXG4gICAgICAgIGZpbGVuYW1lOiBvLmNvbnRlbnRTdHJlYW1zIVswXT8uZmlsZU5hbWUsXG4gICAgICAgIC8vIGxhYmVsOiBvLnByb3BlcnRpZXNbYnAudGl0bGVdID8gby5wcm9wZXJ0aWVzW2JwLnRpdGxlXS52YWx1ZSA6IG8uY29udGVudFN0cmVhbXMhWzBdPy5maWxlTmFtZVxuICAgICAgICAvLyBUT0RPOiBHZXQgdGhlIGxhYmVsIGZyb20gc29tZXdoZXJlXG4gICAgICAgIGxhYmVsOiBvLmNvbnRlbnRTdHJlYW1zIVswXT8uZmlsZU5hbWVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICAjY3JlYXRlUHJvZ3Jlc3NTdGF0dXMoZXZlbnQ6IGFueSwgcHJvZ3Jlc3M6IFN1YmplY3Q8bnVtYmVyPiwgaWQ6IHN0cmluZykge1xuICAgIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG4gICAgICBjb25zdCBwZXJjZW50RG9uZSA9IE1hdGgucm91bmQoKDEwMCAqIGV2ZW50LmxvYWRlZCkgLyBldmVudC50b3RhbCk7XG4gICAgICBwcm9ncmVzcy5uZXh0KHBlcmNlbnREb25lKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICBwcm9ncmVzcy5jb21wbGV0ZSgpO1xuICAgICAgLy8gYWRkIHVwbG9hZCByZXNwb25zZVxuICAgICAgLy8gdGhpcy5zdGF0dXMuaXRlbXMgPSB0aGlzLnN0YXR1cy5pdGVtcy5maWx0ZXIocyA9PiBzLmlkICE9PSBpZCk7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLiNzdGF0dXMuaXRlbXMuZmluZEluZGV4KChzKSA9PiBzLmlkID09PSBpZCk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLiNzdGF0dXMuaXRlbXNbaWR4XS5yZXN1bHQgPSB0aGlzLiNnZW5lcmF0ZVJlc3VsdChldmVudCk7XG4gICAgICAgIHRoaXMuI3N0YXR1c1NvdXJjZS5uZXh0KHRoaXMuI3N0YXR1cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2NyZWF0ZVVwbG9hZEVycm9yKGVycjogSHR0cEVycm9yUmVzcG9uc2UsIHByb2dyZXNzOiBTdWJqZWN0PG51bWJlcj4sIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEh0dHBFcnJvclJlc3BvbnNlPiB7XG4gICAgY29uc3Qgc3RhdHVzSXRlbSA9IHRoaXMuI3N0YXR1cy5pdGVtcy5maW5kKChzKSA9PiBzLmlkID09PSBpZCk7XG4gICAgc3RhdHVzSXRlbSEuZXJyID0ge1xuICAgICAgY29kZTogZXJyLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IGVyci5lcnJvciA/IGVyci5lcnJvci5lcnJvck1lc3NhZ2UgOiBlcnIubWVzc2FnZVxuICAgIH07XG4gICAgdGhpcy4jbG9nZ2VyLmVycm9yKCd1cGxvYWQgZmFpbGVkJywgc3RhdHVzSXRlbSk7XG4gICAgdGhpcy4jc3RhdHVzLmVycisrO1xuICAgIHRoaXMuI3N0YXR1c1NvdXJjZS5uZXh0KHRoaXMuI3N0YXR1cyk7XG4gICAgcHJvZ3Jlc3MubmV4dCgwKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxseSBzdGFydHMgdGhlIHVwbG9hZCBwcm9jZXNzLlxuICAgKiBAcGFyYW0gcmVxdWVzdCBSZXF1ZXN0IHRvIGJlIGV4ZWN1dGVkXG4gICAqIEBwYXJhbSBsYWJlbCBBIGxhYmVsIHRoYXQgd2lsbCBzaG93IHVwIGluIHRoZSB1cGxvYWQgb3ZlcmxheSBkaWFsb2cgd2hpbGUgdXBsb2FkaW5nXG4gICAqL1xuICAjc3RhcnRVcGxvYWRXaXRoRmlsZShyZXF1ZXN0OiBhbnksIGxhYmVsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENyZWF0ZWRPYmplY3Q+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG86IGFueSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBVdGlscy51dWlkKCk7XG4gICAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICAgIC8vIENyZWF0ZSBhIHN1YnNjcmlwdGlvbiBmcm9tIHRoZSBodHRwIHJlcXVlc3QgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHVwbG9hZFxuICAgICAgLy8gc3RhdHVzIGl0ZW0gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjYW5jZWwgdGhlIHJlcXVlc3QgbGF0ZXIgb24uXG4gICAgICB0aGlzLiN1cGxvYWRTdGF0dXMubmV4dChmYWxzZSk7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLiNodHRwXG4gICAgICAgIC5yZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuI2NyZWF0ZVVwbG9hZEVycm9yKGVyciwgcHJvZ3Jlc3MsIGlkKSksXG4gICAgICAgICAgdGFwKChldmVudDogSHR0cEVycm9yUmVzcG9uc2UgfCBIdHRwRXZlbnQ8dW5rbm93bj4pID0+IHRoaXMuI2NyZWF0ZVByb2dyZXNzU3RhdHVzKGV2ZW50LCBwcm9ncmVzcywgaWQpKVxuICAgICAgICApXG4gICAgICAgIC8vIGFjdHVhbCByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvblxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IChyZXMuc3RhdHVzID8gKHJlc3VsdCA9IHJlcykgOiBudWxsKSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgby5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy4jdXBsb2FkU3RhdHVzLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgby5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLiN1cGxvYWRTdGF0dXMubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIG8uY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNzdGF0dXMuaXRlbXMucHVzaCh7XG4gICAgICAgIGlkLFxuICAgICAgICBmaWxlbmFtZTogbGFiZWwsXG4gICAgICAgIHByb2dyZXNzOiBwcm9ncmVzcy5hc09ic2VydmFibGUoKSxcbiAgICAgICAgc3Vic2NyaXB0aW9uLFxuICAgICAgICBlcnI6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICB0aGlzLiNzdGF0dXNTb3VyY2UubmV4dCh0aGlzLiNzdGF0dXMpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,38 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { switchMap } from 'rxjs';
3
- import { BackendService } from '../backend/backend.service';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Service providing user related remote storage. This service is used load and
7
- * store user related data from any device.
8
- */
9
- export class UserStorageService {
10
- #backend = inject(BackendService);
11
- #USERS_SETTINGS = '/users/settings';
12
- // prefix to be added to every section key to be able to later distinguish
13
- // between user settings and other settings
14
- #SECTION_PREFIX = 'x-user-';
15
- /**
16
- *
17
- * @param section section key for
18
- * @param value value to be stored
19
- */
20
- getItem(section) {
21
- return this.#backend.get(`${this.#USERS_SETTINGS}/${this.#sanitizeSection(this.#SECTION_PREFIX + section)}`);
22
- }
23
- setItem(section, data) {
24
- return this.getItem(section).pipe(switchMap((current) => this.#backend.post(`${this.#USERS_SETTINGS}/${this.#sanitizeSection(this.#SECTION_PREFIX + section)}`, { ...current, ...data })));
25
- }
26
- #sanitizeSection(section) {
27
- return encodeURIComponent(section);
28
- }
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
30
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserStorageService, providedIn: 'root' }); }
31
- }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserStorageService, decorators: [{
33
- type: Injectable,
34
- args: [{
35
- providedIn: 'root'
36
- }]
37
- }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2UvdXNlci91c2VyLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFNUQ7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRWxDLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztJQUNwQywwRUFBMEU7SUFDMUUsMkNBQTJDO0lBQzNDLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFFNUI7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWUsRUFBRSxJQUF5QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMvQixTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ3hKLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixPQUFPLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7K0dBekJVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFja2VuZFNlcnZpY2UgfSBmcm9tICcuLi9iYWNrZW5kL2JhY2tlbmQuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljZSBwcm92aWRpbmcgdXNlciByZWxhdGVkIHJlbW90ZSBzdG9yYWdlLiBUaGlzIHNlcnZpY2UgaXMgdXNlZCBsb2FkIGFuZFxuICogc3RvcmUgdXNlciByZWxhdGVkIGRhdGEgZnJvbSBhbnkgZGV2aWNlLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyU3RvcmFnZVNlcnZpY2Uge1xuICAjYmFja2VuZCA9IGluamVjdChCYWNrZW5kU2VydmljZSk7XG5cbiAgI1VTRVJTX1NFVFRJTkdTID0gJy91c2Vycy9zZXR0aW5ncyc7XG4gIC8vIHByZWZpeCB0byBiZSBhZGRlZCB0byBldmVyeSBzZWN0aW9uIGtleSB0byBiZSBhYmxlIHRvIGxhdGVyIGRpc3Rpbmd1aXNoXG4gIC8vIGJldHdlZW4gdXNlciBzZXR0aW5ncyBhbmQgb3RoZXIgc2V0dGluZ3NcbiAgI1NFQ1RJT05fUFJFRklYID0gJ3gtdXNlci0nO1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gc2VjdGlvbiBzZWN0aW9uIGtleSBmb3JcbiAgICogQHBhcmFtIHZhbHVlICB2YWx1ZSB0byBiZSBzdG9yZWRcbiAgICovXG4gIGdldEl0ZW0oc2VjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuI2JhY2tlbmQuZ2V0KGAke3RoaXMuI1VTRVJTX1NFVFRJTkdTfS8ke3RoaXMuI3Nhbml0aXplU2VjdGlvbih0aGlzLiNTRUNUSU9OX1BSRUZJWCArIHNlY3Rpb24pfWApO1xuICB9XG5cbiAgc2V0SXRlbShzZWN0aW9uOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oc2VjdGlvbikucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoY3VycmVudCkgPT4gdGhpcy4jYmFja2VuZC5wb3N0KGAke3RoaXMuI1VTRVJTX1NFVFRJTkdTfS8ke3RoaXMuI3Nhbml0aXplU2VjdGlvbih0aGlzLiNTRUNUSU9OX1BSRUZJWCArIHNlY3Rpb24pfWAsIHsgLi4uY3VycmVudCwgLi4uZGF0YSB9KSlcbiAgICApO1xuICB9XG5cbiAgI3Nhbml0aXplU2VjdGlvbihzZWN0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHNlY3Rpb24pO1xuICB9XG59XG4iXX0=
@@ -1,211 +0,0 @@
1
- import { HttpParams } from '@angular/common/http';
2
- import { Injectable } from '@angular/core';
3
- import { TranslateService } from '@ngx-translate/core';
4
- import { BehaviorSubject, forkJoin, of } from 'rxjs';
5
- import { catchError, map, switchMap, tap } from 'rxjs/operators';
6
- import { YuvUser } from '../../model/yuv-user.model';
7
- import { OidcService } from '../auth/oidc.service';
8
- import { BackendService } from '../backend/backend.service';
9
- import { Direction } from '../config/config.interface';
10
- import { ConfigService } from '../config/config.service';
11
- import { EventService } from '../event/event.service';
12
- import { YuvEventType } from '../event/events';
13
- import { Logger } from '../logger/logger';
14
- import { AdministrationRoles } from '../system/system.enum';
15
- import { SystemService } from '../system/system.service';
16
- import * as i0 from "@angular/core";
17
- import * as i1 from "../backend/backend.service";
18
- import * as i2 from "@ngx-translate/core";
19
- import * as i3 from "../logger/logger";
20
- import * as i4 from "../system/system.service";
21
- import * as i5 from "../auth/oidc.service";
22
- import * as i6 from "../event/event.service";
23
- import * as i7 from "../config/config.service";
24
- /**
25
- * Service providing user account configurations.
26
- */
27
- export class UserService {
28
- // #GLOBAL_SETTINGS = '/users/globalsettings/';
29
- #USERS_SETTINGS;
30
- #DEFAULT_SETTINGS;
31
- #SETTINGS_SECTION_OBJECTCONFIG;
32
- #user;
33
- #userSource;
34
- /**
35
- * @ignore
36
- */
37
- constructor(backend, translate, logger, system, oidc, eventService, config) {
38
- this.backend = backend;
39
- this.translate = translate;
40
- this.logger = logger;
41
- this.system = system;
42
- this.oidc = oidc;
43
- this.eventService = eventService;
44
- this.config = config;
45
- // #GLOBAL_SETTINGS = '/users/globalsettings/';
46
- this.#USERS_SETTINGS = '/users/settings/';
47
- this.#DEFAULT_SETTINGS = '/users/settings';
48
- this.#SETTINGS_SECTION_OBJECTCONFIG = 'object-config';
49
- this.#userSource = new BehaviorSubject(this.#user);
50
- this.user$ = this.#userSource.asObservable();
51
- this.globalSettings = new Map();
52
- this.canCreateObjects = false;
53
- }
54
- getUiDirection(iso) {
55
- // languages that are read right to left
56
- const rtlLanguages = ['ar', 'arc', 'dv', 'fa', 'ha', 'he', 'khw', 'ks', 'ku', 'ps', 'ur', 'yi'];
57
- return rtlLanguages.indexOf(iso) === -1 ? Direction.LTR : Direction.RTL;
58
- }
59
- /**
60
- * Set a new current user
61
- * @param user The user to be set as current user
62
- */
63
- setCurrentUser(user) {
64
- this.#user = user;
65
- this.changeClientLocale('', false);
66
- this.#userSource.next(this.#user);
67
- }
68
- getCurrentUser() {
69
- return this.#user;
70
- }
71
- get hasAdminRole() {
72
- return this.#user?.authorities?.includes(AdministrationRoles.ADMIN) || false;
73
- }
74
- get hasSystemRole() {
75
- return this.#user?.authorities?.includes(AdministrationRoles.SYSTEM) || false;
76
- }
77
- get hasAdministrationRoles() {
78
- return this.hasAdminRole || this.hasSystemRole;
79
- }
80
- get hasManageSettingsRole() {
81
- const customRole = this.config.get('core.permissions.manageSettingsRole');
82
- const manageSettingsRole = customRole || AdministrationRoles.MANAGE_SETTINGS;
83
- return this.#user?.authorities?.includes(manageSettingsRole) || false;
84
- }
85
- get isAdvancedUser() {
86
- const customRole = this.config.get('core.permissions.advancedUserRole');
87
- const advancedUserRole = customRole || AdministrationRoles.MANAGE_SETTINGS;
88
- return this.#user?.authorities?.includes(advancedUserRole) || false;
89
- }
90
- get isRetentionManager() {
91
- const customRole = this.config.get('core.permissions.retentionManagerRole');
92
- const retenetionManagerRole = customRole || AdministrationRoles.MANAGE_SETTINGS;
93
- return this.#user?.authorities?.includes(retenetionManagerRole) || false;
94
- }
95
- /**
96
- * Change the users client locale
97
- * @param iso ISO locale string to be set as new client locale
98
- */
99
- changeClientLocale(iso, persist = true) {
100
- if (this.#user) {
101
- const languages = this.config.getClientLocales().map((lang) => lang.iso);
102
- iso = iso || this.#user.getClientLocale(this.config.getDefaultClientLocale());
103
- if (!languages.includes(iso)) {
104
- iso = this.config.getDefaultClientLocale();
105
- }
106
- this.logger.debug("Changed client locale to '" + iso + "'");
107
- this.backend.setHeader('Accept-Language', iso);
108
- this.#user.uiDirection = this.getUiDirection(iso);
109
- this.#user.userSettings.locale = iso;
110
- if (this.translate.currentLang !== iso || this.system.authData?.language !== iso) {
111
- const ob = persist
112
- ? forkJoin([
113
- this.translate.use(iso),
114
- this.system.updateLocalizations(iso),
115
- this.saveUserSettings(this.#user.userSettings).pipe(tap(() => {
116
- // this.#userSource.next(this.#user);
117
- this.logger.debug('Loading system definitions i18n resources for new locale.');
118
- }))
119
- ])
120
- : this.translate.use(iso);
121
- ob.subscribe(() => this.eventService.trigger(YuvEventType.CLIENT_LOCALE_CHANGED, iso));
122
- }
123
- }
124
- }
125
- saveUserSettings(settings) {
126
- if (this.#user) {
127
- console.log(this.#user.userSettings);
128
- this.#user.userSettings = { ...this.#user.userSettings, ...settings };
129
- return this.backend.post(this.#DEFAULT_SETTINGS, this.#user.userSettings).pipe(tap(() => this.#userSource.next(this.#user)));
130
- }
131
- else
132
- return of(null);
133
- }
134
- fetchUserSettings() {
135
- return this.backend.get('/dms/permissions').pipe(catchError((e) => of(undefined)), switchMap((res) => {
136
- this.setUserPermissions(res);
137
- return this.backend.get(this.#DEFAULT_SETTINGS);
138
- }));
139
- }
140
- setUserPermissions(res) {
141
- this.userPermissions = {
142
- create: this.mapPermissions('CREATE', res),
143
- write: this.mapPermissions('WRITE', res),
144
- read: this.mapPermissions('READ', res),
145
- delete: this.mapPermissions('DELETE', res)
146
- };
147
- const sp = {
148
- createableObjectTypes: [
149
- ...this.userPermissions.create.folderTypes,
150
- ...this.userPermissions.create.objectTypes,
151
- ...this.userPermissions.create.secondaryObjectTypes
152
- ],
153
- searchableObjectTypes: [
154
- ...this.userPermissions.read.folderTypes,
155
- ...this.userPermissions.read.objectTypes,
156
- ...this.userPermissions.read.secondaryObjectTypes
157
- ]
158
- };
159
- this.system.setPermissions(sp);
160
- this.canCreateObjects = sp.createableObjectTypes.length > 0;
161
- }
162
- mapPermissions(section, apiResponse) {
163
- const res = apiResponse[section] || {};
164
- return {
165
- folderTypes: res['folderTypeIds'] || [],
166
- objectTypes: res['objectTypeIds'] || [],
167
- secondaryObjectTypes: res['secondaryObjectTypeIds'] || []
168
- };
169
- }
170
- /**
171
- * Search for a user based on a search term
172
- * @param term Search term
173
- * @param excludeMe whether or not to exclude myself from the result list
174
- * @param roles narrow down the search results by certain roles
175
- */
176
- queryUser(term, excludeMe, roles) {
177
- let params = new HttpParams().set('search', term).set('excludeMe', `${!!excludeMe}`);
178
- roles?.length && roles.map((r) => (params = params.append(`roles`, r)));
179
- return this.backend.get(`/idm/users?${params}`).pipe(map((users) => (!users ? [] : users.map((u) => new YuvUser(u)))));
180
- }
181
- getUserById(id) {
182
- return this.backend.get(`/idm/users/${id}`).pipe(map((user) => new YuvUser(user, this.#user.userSettings)));
183
- }
184
- logout(redirRoute) {
185
- if (this.backend.authUsesOpenIdConnect()) {
186
- this.oidc.logout();
187
- }
188
- else {
189
- const redir = redirRoute ? `?redir=${redirRoute}` : '';
190
- window.location.href = `${this.backend.getApiBase('logout')}${redir}`;
191
- }
192
- }
193
- getSettings(section) {
194
- return this.#user ? this.backend.get(this.#USERS_SETTINGS + encodeURIComponent(section)) : of(null);
195
- }
196
- saveObjectConfig(objectConfigs) {
197
- return this.backend.post(this.#USERS_SETTINGS + encodeURIComponent(this.#SETTINGS_SECTION_OBJECTCONFIG), objectConfigs);
198
- }
199
- loadObjectConfig() {
200
- return this.getSettings(this.#SETTINGS_SECTION_OBJECTCONFIG).pipe(catchError(() => of(undefined)));
201
- }
202
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserService, deps: [{ token: i1.BackendService }, { token: i2.TranslateService }, { token: i3.Logger }, { token: i4.SystemService }, { token: i5.OidcService }, { token: i6.EventService }, { token: i7.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
203
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserService, providedIn: 'root' }); }
204
- }
205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserService, decorators: [{
206
- type: Injectable,
207
- args: [{
208
- providedIn: 'root'
209
- }]
210
- }], ctorParameters: () => [{ type: i1.BackendService }, { type: i2.TranslateService }, { type: i3.Logger }, { type: i4.SystemService }, { type: i5.OidcService }, { type: i6.EventService }, { type: i7.ConfigService }] });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlL3VzZXIvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFnQixPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7QUFHekQ7O0dBRUc7QUFJSCxNQUFN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cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVzZXJTZXR0aW5ncywgWXV2VXNlciB9IGZyb20gJy4uLy4uL21vZGVsL3l1di11c2VyLm1vZGVsJztcbmltcG9ydCB7IE9pZGNTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9vaWRjLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2VuZFNlcnZpY2UgfSBmcm9tICcuLi9iYWNrZW5kL2JhY2tlbmQuc2VydmljZSc7XG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICcuLi9jb25maWcvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4uL2V2ZW50L2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgWXV2RXZlbnRUeXBlIH0gZnJvbSAnLi4vZXZlbnQvZXZlbnRzJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci9sb2dnZXInO1xuaW1wb3J0IHsgQWRtaW5pc3RyYXRpb25Sb2xlcyB9IGZyb20gJy4uL3N5c3RlbS9zeXN0ZW0uZW51bSc7XG5pbXBvcnQgeyBVc2VyUGVybWlzc2lvbnMsIFVzZXJQZXJtaXNzaW9uc1NlY3Rpb24gfSBmcm9tICcuLi9zeXN0ZW0vc3lzdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnLi4vc3lzdGVtL3N5c3RlbS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JlZE9iamVjdENvbmZpZyB9IGZyb20gJy4uL29iamVjdC1jb25maWcvb2JqZWN0LWNvbmZpZy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFNlcnZpY2UgcHJvdmlkaW5nIHVzZXIgYWNjb3VudCBjb25maWd1cmF0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xuICAvLyAjR0xPQkFMX1NFVFRJTkdTID0gJy91c2Vycy9nbG9iYWxzZXR0aW5ncy8nO1xuICAjVVNFUlNfU0VUVElOR1MgPSAnL3VzZXJzL3NldHRpbmdzLyc7XG4gICNERUZBVUxUX1NFVFRJTkdTID0gJy91c2Vycy9zZXR0aW5ncyc7XG5cbiAgI1NFVFRJTkdTX1NFQ1RJT05fT0JKRUNUQ09ORklHID0gJ29iamVjdC1jb25maWcnO1xuXG4gICN1c2VyPzogWXV2VXNlcjtcbiAgI3VzZXJTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFl1dlVzZXIgfCB1bmRlZmluZWQ+KHRoaXMuI3VzZXIpO1xuICB1c2VyJDogT2JzZXJ2YWJsZTxZdXZVc2VyIHwgdW5kZWZpbmVkPiA9IHRoaXMuI3VzZXJTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgZ2xvYmFsU2V0dGluZ3MgPSBuZXcgTWFwKCk7XG4gIHVzZXJQZXJtaXNzaW9ucz86IFVzZXJQZXJtaXNzaW9ucztcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgb2lkYzogT2lkY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZVxuICApIHt9XG5cbiAgcHJpdmF0ZSBnZXRVaURpcmVjdGlvbihpc286IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gbGFuZ3VhZ2VzIHRoYXQgYXJlIHJlYWQgcmlnaHQgdG8gbGVmdFxuICAgIGNvbnN0IHJ0bExhbmd1YWdlcyA9IFsnYXInLCAnYXJjJywgJ2R2JywgJ2ZhJywgJ2hhJywgJ2hlJywgJ2todycsICdrcycsICdrdScsICdwcycsICd1cicsICd5aSddO1xuICAgIHJldHVybiBydGxMYW5ndWFnZXMuaW5kZXhPZihpc28pID09PSAtMSA/IERpcmVjdGlvbi5MVFIgOiBEaXJlY3Rpb24uUlRMO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5ldyBjdXJyZW50IHVzZXJcbiAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXIgdG8gYmUgc2V0IGFzIGN1cnJlbnQgdXNlclxuICAgKi9cbiAgcHVibGljIHNldEN1cnJlbnRVc2VyKHVzZXI6IFl1dlVzZXIpIHtcbiAgICB0aGlzLiN1c2VyID0gdXNlcjtcbiAgICB0aGlzLmNoYW5nZUNsaWVudExvY2FsZSgnJywgZmFsc2UpO1xuICAgIHRoaXMuI3VzZXJTb3VyY2UubmV4dCh0aGlzLiN1c2VyKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRVc2VyKCk6IFl1dlVzZXIge1xuICAgIHJldHVybiB0aGlzLiN1c2VyITtcbiAgfVxuXG4gIGdldCBoYXNBZG1pblJvbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI3VzZXI/LmF1dGhvcml0aWVzPy5pbmNsdWRlcyhBZG1pbmlzdHJhdGlvblJvbGVzLkFETUlOKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBoYXNTeXN0ZW1Sb2xlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiN1c2VyPy5hdXRob3JpdGllcz8uaW5jbHVkZXMoQWRtaW5pc3RyYXRpb25Sb2xlcy5TWVNURU0pIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGhhc0FkbWluaXN0cmF0aW9uUm9sZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQWRtaW5Sb2xlIHx8IHRoaXMuaGFzU3lzdGVtUm9sZTtcbiAgfVxuXG4gIGdldCBoYXNNYW5hZ2VTZXR0aW5nc1JvbGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VzdG9tUm9sZSA9IHRoaXMuY29uZmlnLmdldCgnY29yZS5wZXJtaXNzaW9ucy5tYW5hZ2VTZXR0aW5nc1JvbGUnKTtcbiAgICBjb25zdCBtYW5hZ2VTZXR0aW5nc1JvbGUgPSBjdXN0b21Sb2xlIHx8IEFkbWluaXN0cmF0aW9uUm9sZXMuTUFOQUdFX1NFVFRJTkdTO1xuICAgIHJldHVybiB0aGlzLiN1c2VyPy5hdXRob3JpdGllcz8uaW5jbHVkZXMobWFuYWdlU2V0dGluZ3NSb2xlKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBpc0FkdmFuY2VkVXNlcigpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXN0b21Sb2xlID0gdGhpcy5jb25maWcuZ2V0KCdjb3JlLnBlcm1pc3Npb25zLmFkdmFuY2VkVXNlclJvbGUnKTtcbiAgICBjb25zdCBhZHZhbmNlZFVzZXJSb2xlID0gY3VzdG9tUm9sZSB8fCBBZG1pbmlzdHJhdGlvblJvbGVzLk1BTkFHRV9TRVRUSU5HUztcbiAgICByZXR1cm4gdGhpcy4jdXNlcj8uYXV0aG9yaXRpZXM/LmluY2x1ZGVzKGFkdmFuY2VkVXNlclJvbGUpIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzUmV0ZW50aW9uTWFuYWdlcigpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXN0b21Sb2xlID0gdGhpcy5jb25maWcuZ2V0KCdjb3JlLnBlcm1pc3Npb25zLnJldGVudGlvbk1hbmFnZXJSb2xlJyk7XG4gICAgY29uc3QgcmV0ZW5ldGlvbk1hbmFnZXJSb2xlID0gY3VzdG9tUm9sZSB8fCBBZG1pbmlzdHJhdGlvblJvbGVzLk1BTkFHRV9TRVRUSU5HUztcbiAgICByZXR1cm4gdGhpcy4jdXNlcj8uYXV0aG9yaXRpZXM/LmluY2x1ZGVzKHJldGVuZXRpb25NYW5hZ2VyUm9sZSkgfHwgZmFsc2U7XG4gIH1cblxuICBjYW5DcmVhdGVPYmplY3RzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgdXNlcnMgY2xpZW50IGxvY2FsZVxuICAgKiBAcGFyYW0gaXNvIElTTyBsb2NhbGUgc3RyaW5nIHRvIGJlIHNldCBhcyBuZXcgY2xpZW50IGxvY2FsZVxuICAgKi9cbiAgY2hhbmdlQ2xpZW50TG9jYWxlKGlzbzogc3RyaW5nLCBwZXJzaXN0ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLiN1c2VyKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZXMgPSB0aGlzLmNvbmZpZy5nZXRDbGllbnRMb2NhbGVzKCkubWFwKChsYW5nKSA9PiBsYW5nLmlzbyk7XG4gICAgICBpc28gPSBpc28gfHwgdGhpcy4jdXNlci5nZXRDbGllbnRMb2NhbGUodGhpcy5jb25maWcuZ2V0RGVmYXVsdENsaWVudExvY2FsZSgpKTtcbiAgICAgIGlmICghbGFuZ3VhZ2VzLmluY2x1ZGVzKGlzbykpIHtcbiAgICAgICAgaXNvID0gdGhpcy5jb25maWcuZ2V0RGVmYXVsdENsaWVudExvY2FsZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJDaGFuZ2VkIGNsaWVudCBsb2NhbGUgdG8gJ1wiICsgaXNvICsgXCInXCIpO1xuICAgICAgdGhpcy5iYWNrZW5kLnNldEhlYWRlcignQWNjZXB0LUxhbmd1YWdlJywgaXNvKTtcbiAgICAgIHRoaXMuI3VzZXIudWlEaXJlY3Rpb24gPSB0aGlzLmdldFVpRGlyZWN0aW9uKGlzbyk7XG4gICAgICB0aGlzLiN1c2VyLnVzZXJTZXR0aW5ncy5sb2NhbGUgPSBpc287XG4gICAgICBpZiAodGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgIT09IGlzbyB8fCB0aGlzLnN5c3RlbS5hdXRoRGF0YT8ubGFuZ3VhZ2UgIT09IGlzbykge1xuICAgICAgICBjb25zdCBvYiA9IHBlcnNpc3RcbiAgICAgICAgICA/IGZvcmtKb2luKFtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGlzbyksXG4gICAgICAgICAgICAgIHRoaXMuc3lzdGVtLnVwZGF0ZUxvY2FsaXphdGlvbnMoaXNvKSxcbiAgICAgICAgICAgICAgdGhpcy5zYXZlVXNlclNldHRpbmdzKHRoaXMuI3VzZXIudXNlclNldHRpbmdzKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLiN1c2VyU291cmNlLm5leHQodGhpcy4jdXNlcik7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzeXN0ZW0gZGVmaW5pdGlvbnMgaTE4biByZXNvdXJjZXMgZm9yIG5ldyBsb2NhbGUuJyk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlLnVzZShpc28pO1xuICAgICAgICBvYi5zdWJzY3JpYmUoKCkgPT4gdGhpcy5ldmVudFNlcnZpY2UudHJpZ2dlcihZdXZFdmVudFR5cGUuQ0xJRU5UX0xPQ0FMRV9DSEFOR0VELCBpc28pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlVXNlclNldHRpbmdzKHNldHRpbmdzOiBQYXJ0aWFsPFVzZXJTZXR0aW5ncz4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLiN1c2VyKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLiN1c2VyLnVzZXJTZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMuI3VzZXIudXNlclNldHRpbmdzID0geyAuLi50aGlzLiN1c2VyLnVzZXJTZXR0aW5ncywgLi4uc2V0dGluZ3MgfTtcbiAgICAgIHJldHVybiB0aGlzLmJhY2tlbmQucG9zdCh0aGlzLiNERUZBVUxUX1NFVFRJTkdTLCB0aGlzLiN1c2VyLnVzZXJTZXR0aW5ncykucGlwZSh0YXAoKCkgPT4gdGhpcy4jdXNlclNvdXJjZS5uZXh0KHRoaXMuI3VzZXIpKSk7XG4gICAgfSBlbHNlIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIGZldGNoVXNlclNldHRpbmdzKCk6IE9ic2VydmFibGU8VXNlclNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXQoJy9kbXMvcGVybWlzc2lvbnMnKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZSkgPT4gb2YodW5kZWZpbmVkKSksXG4gICAgICBzd2l0Y2hNYXAoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLnNldFVzZXJQZXJtaXNzaW9ucyhyZXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldCh0aGlzLiNERUZBVUxUX1NFVFRJTkdTKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXNlclBlcm1pc3Npb25zKHJlczogYW55KTogdm9pZCB7XG4gICAgdGhpcy51c2VyUGVybWlzc2lvbnMgPSB7XG4gICAgICBjcmVhdGU6IHRoaXMubWFwUGVybWlzc2lvbnMoJ0NSRUFURScsIHJlcyksXG4gICAgICB3cml0ZTogdGhpcy5tYXBQZXJtaXNzaW9ucygnV1JJVEUnLCByZXMpLFxuICAgICAgcmVhZDogdGhpcy5tYXBQZXJtaXNzaW9ucygnUkVBRCcsIHJlcyksXG4gICAgICBkZWxldGU6IHRoaXMubWFwUGVybWlzc2lvbnMoJ0RFTEVURScsIHJlcylcbiAgICB9O1xuICAgIGNvbnN0IHNwID0ge1xuICAgICAgY3JlYXRlYWJsZU9iamVjdFR5cGVzOiBbXG4gICAgICAgIC4uLnRoaXMudXNlclBlcm1pc3Npb25zLmNyZWF0ZS5mb2xkZXJUeXBlcyxcbiAgICAgICAgLi4udGhpcy51c2VyUGVybWlzc2lvbnMuY3JlYXRlLm9iamVjdFR5cGVzLFxuICAgICAgICAuLi50aGlzLnVzZXJQZXJtaXNzaW9ucy5jcmVhdGUuc2Vjb25kYXJ5T2JqZWN0VHlwZXNcbiAgICAgIF0sXG4gICAgICBzZWFyY2hhYmxlT2JqZWN0VHlwZXM6IFtcbiAgICAgICAgLi4udGhpcy51c2VyUGVybWlzc2lvbnMucmVhZC5mb2xkZXJUeXBlcyxcbiAgICAgICAgLi4udGhpcy51c2VyUGVybWlzc2lvbnMucmVhZC5vYmplY3RUeXBlcyxcbiAgICAgICAgLi4udGhpcy51c2VyUGVybWlzc2lvbnMucmVhZC5zZWNvbmRhcnlPYmplY3RUeXBlc1xuICAgICAgXVxuICAgIH07XG4gICAgdGhpcy5zeXN0ZW0uc2V0UGVybWlzc2lvbnMoc3ApO1xuICAgIHRoaXMuY2FuQ3JlYXRlT2JqZWN0cyA9IHNwLmNyZWF0ZWFibGVPYmplY3RUeXBlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBQZXJtaXNzaW9ucyhzZWN0aW9uOiAnQ1JFQVRFJyB8ICdSRUFEJyB8ICdXUklURScgfCAnREVMRVRFJywgYXBpUmVzcG9uc2U6IGFueSk6IFVzZXJQZXJtaXNzaW9uc1NlY3Rpb24ge1xuICAgIGNvbnN0IHJlcyA9IGFwaVJlc3BvbnNlW3NlY3Rpb25dIHx8IHt9O1xuICAgIHJldHVybiB7XG4gICAgICBmb2xkZXJUeXBlczogcmVzWydmb2xkZXJUeXBlSWRzJ10gfHwgW10sXG4gICAgICBvYmplY3RUeXBlczogcmVzWydvYmplY3RUeXBlSWRzJ10gfHwgW10sXG4gICAgICBzZWNvbmRhcnlPYmplY3RUeXBlczogcmVzWydzZWNvbmRhcnlPYmplY3RUeXBlSWRzJ10gfHwgW11cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgYSB1c2VyIGJhc2VkIG9uIGEgc2VhcmNoIHRlcm1cbiAgICogQHBhcmFtIHRlcm0gU2VhcmNoIHRlcm1cbiAgICogQHBhcmFtIGV4Y2x1ZGVNZSB3aGV0aGVyIG9yIG5vdCB0byBleGNsdWRlIG15c2VsZiBmcm9tIHRoZSByZXN1bHQgbGlzdFxuICAgKiBAcGFyYW0gcm9sZXMgbmFycm93IGRvd24gdGhlIHNlYXJjaCByZXN1bHRzIGJ5IGNlcnRhaW4gcm9sZXNcbiAgICovXG4gIHF1ZXJ5VXNlcih0ZXJtOiBzdHJpbmcsIGV4Y2x1ZGVNZT86IGJvb2xlYW4sIHJvbGVzPzogc3RyaW5nW10pOiBPYnNlcnZhYmxlPFl1dlVzZXJbXT4ge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldCgnc2VhcmNoJywgdGVybSkuc2V0KCdleGNsdWRlTWUnLCBgJHshIWV4Y2x1ZGVNZX1gKTtcbiAgICByb2xlcz8ubGVuZ3RoICYmIHJvbGVzLm1hcCgocikgPT4gKHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoYHJvbGVzYCwgcikpKTtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldChgL2lkbS91c2Vycz8ke3BhcmFtc31gKS5waXBlKG1hcCgodXNlcnMpID0+ICghdXNlcnMgPyBbXSA6IHVzZXJzLm1hcCgodTogYW55KSA9PiBuZXcgWXV2VXNlcih1KSkpKSk7XG4gIH1cblxuICBnZXRVc2VyQnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxZdXZVc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXQoYC9pZG0vdXNlcnMvJHtpZH1gKS5waXBlKG1hcCgodXNlcikgPT4gbmV3IFl1dlVzZXIodXNlciwgdGhpcy4jdXNlciEudXNlclNldHRpbmdzKSkpO1xuICB9XG5cbiAgbG9nb3V0KHJlZGlyUm91dGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iYWNrZW5kLmF1dGhVc2VzT3BlbklkQ29ubmVjdCgpKSB7XG4gICAgICB0aGlzLm9pZGMubG9nb3V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlZGlyID0gcmVkaXJSb3V0ZSA/IGA/cmVkaXI9JHtyZWRpclJvdXRlfWAgOiAnJztcbiAgICAgICh3aW5kb3cgYXMgYW55KS5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5iYWNrZW5kLmdldEFwaUJhc2UoJ2xvZ291dCcpfSR7cmVkaXJ9YDtcbiAgICB9XG4gIH1cblxuICBnZXRTZXR0aW5ncyhzZWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLiN1c2VyID8gdGhpcy5iYWNrZW5kLmdldCh0aGlzLiNVU0VSU19TRVRUSU5HUyArIGVuY29kZVVSSUNvbXBvbmVudChzZWN0aW9uKSkgOiBvZihudWxsKTtcbiAgfVxuXG4gIHNhdmVPYmplY3RDb25maWcob2JqZWN0Q29uZmlnczogU3RvcmVkT2JqZWN0Q29uZmlnKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLnBvc3QodGhpcy4jVVNFUlNfU0VUVElOR1MgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy4jU0VUVElOR1NfU0VDVElPTl9PQkpFQ1RDT05GSUcpLCBvYmplY3RDb25maWdzKTtcbiAgfVxuXG4gIGxvYWRPYmplY3RDb25maWcoKTogT2JzZXJ2YWJsZTxTdG9yZWRPYmplY3RDb25maWcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyh0aGlzLiNTRVRUSU5HU19TRUNUSU9OX09CSkVDVENPTkZJRykucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodW5kZWZpbmVkKSksXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,15 +0,0 @@
1
- export var Sort;
2
- (function (Sort) {
3
- Sort["ASC"] = "asc";
4
- Sort["DESC"] = "desc";
5
- })(Sort || (Sort = {}));
6
- export var ClassificationPrefix;
7
- (function (ClassificationPrefix) {
8
- ClassificationPrefix["EMAIL"] = "mailto:";
9
- ClassificationPrefix["EMAIL_ICON"] = "envelope";
10
- ClassificationPrefix["PHONE"] = "tel:";
11
- ClassificationPrefix["PHONE_ICON"] = "phone";
12
- ClassificationPrefix["URL"] = "";
13
- ClassificationPrefix["URL_ICON"] = "globe";
14
- })(ClassificationPrefix || (ClassificationPrefix = {}));
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuaGVscGVyLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3V0aWwvdXRpbHMuaGVscGVyLmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksSUFHWDtBQUhELFdBQVksSUFBSTtJQUNkLG1CQUFXLENBQUE7SUFDWCxxQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhXLElBQUksS0FBSixJQUFJLFFBR2Y7QUFFRCxNQUFNLENBQU4sSUFBWSxvQkFPWDtBQVBELFdBQVksb0JBQW9CO0lBQzlCLHlDQUFpQixDQUFBO0lBQ2pCLCtDQUF1QixDQUFBO0lBQ3ZCLHNDQUFjLENBQUE7SUFDZCw0Q0FBb0IsQ0FBQTtJQUNwQixnQ0FBUSxDQUFBO0lBQ1IsMENBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQVBXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFPL0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBTb3J0IHtcbiAgQVNDID0gJ2FzYycsXG4gIERFU0MgPSAnZGVzYydcbn1cblxuZXhwb3J0IGVudW0gQ2xhc3NpZmljYXRpb25QcmVmaXgge1xuICBFTUFJTCA9ICdtYWlsdG86JyxcbiAgRU1BSUxfSUNPTiA9ICdlbnZlbG9wZScsXG4gIFBIT05FID0gJ3RlbDonLFxuICBQSE9ORV9JQ09OID0gJ3Bob25lJyxcbiAgVVJMID0gJycsXG4gIFVSTF9JQ09OID0gJ2dsb2JlJ1xufVxuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZWRNYWlsVG8gPSBzdHJpbmcgfCBzdHJpbmdbXTtcbiJdfQ==