@sinequa/assistant 3.8.0 → 3.9.0

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 (151) hide show
  1. package/chat/charts/chart/chart.component.d.ts +13 -13
  2. package/chat/chat-message/chat-message.component.d.ts +85 -81
  3. package/chat/chat-message/i18n/en.json +11 -0
  4. package/chat/chat-message/i18n/fr.json +11 -0
  5. package/chat/chat-reference/chat-reference.component.d.ts +14 -14
  6. package/chat/chat-reference/i18n/en.json +4 -0
  7. package/chat/chat-reference/i18n/fr.json +4 -0
  8. package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +48 -50
  9. package/chat/chat-settings-v3/i18n/en.json +14 -0
  10. package/chat/chat-settings-v3/i18n/fr.json +14 -0
  11. package/chat/chat.component.d.ts +388 -1405
  12. package/chat/chat.service.d.ts +247 -228
  13. package/chat/debug-message/debug-message.component.d.ts +17 -17
  14. package/chat/debug-message/i18n/en.json +3 -0
  15. package/chat/debug-message/i18n/fr.json +3 -0
  16. package/chat/dialogs/delete-saved-chat.component.d.ts +22 -0
  17. package/chat/dialogs/i18n/en.json +19 -0
  18. package/chat/dialogs/i18n/fr.json +19 -0
  19. package/chat/dialogs/rename-saved-chat.component.d.ts +21 -0
  20. package/chat/dialogs/updates.component.d.ts +15 -0
  21. package/chat/documents-upload/document-list/document-list.component.d.ts +68 -77
  22. package/chat/documents-upload/document-overview/document-overview.component.d.ts +31 -41
  23. package/chat/documents-upload/document-upload/document-upload.component.d.ts +96 -98
  24. package/chat/documents-upload/documents-upload.model.d.ts +66 -66
  25. package/chat/documents-upload/documents-upload.service.d.ts +170 -174
  26. package/chat/documents-upload/i18n/en.json +24 -0
  27. package/chat/documents-upload/i18n/fr.json +24 -0
  28. package/chat/format-icon/format-icon.component.d.ts +10 -10
  29. package/chat/format-icon/icons.d.ts +5 -5
  30. package/chat/i18n/en.json +42 -0
  31. package/chat/i18n/fr.json +42 -0
  32. package/chat/index.d.ts +5 -5
  33. package/chat/initials-avatar/initials-avatar.component.d.ts +35 -35
  34. package/chat/instance-manager.service.d.ts +28 -28
  35. package/chat/pipes/message-content.pipe.d.ts +16 -0
  36. package/chat/prompt.component.d.ts +25 -21
  37. package/chat/public-api.d.ts +17 -17
  38. package/chat/references/i18n/en.json +6 -0
  39. package/chat/references/i18n/fr.json +6 -0
  40. package/chat/references/inline-image-reference.d.ts +21 -0
  41. package/chat/references/inline-page-reference.d.ts +21 -0
  42. package/chat/rest-chat.service.d.ts +31 -33
  43. package/chat/saved-chats/i18n/en.json +4 -0
  44. package/chat/saved-chats/i18n/fr.json +4 -0
  45. package/chat/saved-chats/saved-chats.component.d.ts +30 -36
  46. package/chat/services/app.service.d.ts +8 -0
  47. package/chat/services/dialog.service.d.ts +12 -0
  48. package/chat/services/notification.service.d.ts +10 -0
  49. package/chat/services/principal.service.d.ts +7 -0
  50. package/chat/services/search.service.d.ts +7 -0
  51. package/chat/services/signalR.web.service.d.ts +45 -0
  52. package/chat/services/ui.service.d.ts +13 -0
  53. package/chat/services/user-settings.service.d.ts +7 -0
  54. package/chat/token-progress-bar/i18n/en.json +4 -0
  55. package/chat/token-progress-bar/i18n/fr.json +4 -0
  56. package/chat/token-progress-bar/token-progress-bar.component.d.ts +24 -27
  57. package/chat/tooltip/tooltip.component.d.ts +12 -0
  58. package/chat/tooltip/tooltip.directive.d.ts +81 -0
  59. package/chat/types/message-content.types.d.ts +54 -0
  60. package/chat/types/message-reference.types.d.ts +11 -0
  61. package/chat/types.d.ts +913 -873
  62. package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +3 -0
  63. package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +3 -0
  64. package/chat/utils/assistant-json.d.ts +2 -0
  65. package/chat/websocket-chat.service.d.ts +102 -103
  66. package/esm2022/chat/charts/chart/chart.component.mjs +40 -0
  67. package/esm2022/chat/chat-message/chat-message.component.mjs +351 -0
  68. package/esm2022/chat/chat-reference/chat-reference.component.mjs +40 -0
  69. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +118 -0
  70. package/esm2022/chat/chat.component.mjs +1090 -0
  71. package/esm2022/chat/chat.service.mjs +417 -0
  72. package/esm2022/chat/debug-message/debug-message.component.mjs +43 -0
  73. package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +81 -0
  74. package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +84 -0
  75. package/esm2022/chat/dialogs/updates.component.mjs +61 -0
  76. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +140 -0
  77. package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +65 -0
  78. package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +256 -0
  79. package/{esm2020 → esm2022}/chat/documents-upload/documents-upload.model.mjs +1 -1
  80. package/esm2022/chat/documents-upload/documents-upload.service.mjs +291 -0
  81. package/{esm2020 → esm2022}/chat/format-icon/format-icon.component.mjs +23 -23
  82. package/{esm2020 → esm2022}/chat/format-icon/icons.mjs +137 -137
  83. package/{esm2020 → esm2022}/chat/initials-avatar/initials-avatar.component.mjs +60 -60
  84. package/esm2022/chat/instance-manager.service.mjs +46 -0
  85. package/esm2022/chat/pipes/message-content.pipe.mjs +34 -0
  86. package/esm2022/chat/prompt.component.mjs +88 -0
  87. package/{esm2020 → esm2022}/chat/public-api.mjs +18 -18
  88. package/esm2022/chat/references/inline-image-reference.mjs +110 -0
  89. package/esm2022/chat/references/inline-page-reference.mjs +110 -0
  90. package/esm2022/chat/rest-chat.service.mjs +296 -0
  91. package/esm2022/chat/saved-chats/saved-chats.component.mjs +82 -0
  92. package/esm2022/chat/services/app.service.mjs +19 -0
  93. package/esm2022/chat/services/dialog.service.mjs +40 -0
  94. package/esm2022/chat/services/notification.service.mjs +25 -0
  95. package/esm2022/chat/services/principal.service.mjs +16 -0
  96. package/esm2022/chat/services/search.service.mjs +13 -0
  97. package/esm2022/chat/services/signalR.web.service.mjs +79 -0
  98. package/esm2022/chat/services/ui.service.mjs +61 -0
  99. package/esm2022/chat/services/user-settings.service.mjs +22 -0
  100. package/{esm2020 → esm2022}/chat/sinequa-assistant-chat.mjs +4 -4
  101. package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +52 -0
  102. package/esm2022/chat/tooltip/tooltip.component.mjs +44 -0
  103. package/esm2022/chat/tooltip/tooltip.directive.mjs +203 -0
  104. package/esm2022/chat/types/message-content.types.mjs +2 -0
  105. package/esm2022/chat/types/message-reference.types.mjs +2 -0
  106. package/esm2022/chat/types.mjs +130 -0
  107. package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +57 -0
  108. package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +57 -0
  109. package/esm2022/chat/utils/assistant-json.mjs +12 -0
  110. package/esm2022/chat/websocket-chat.service.mjs +654 -0
  111. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  112. package/{esm2020 → esm2022}/sinequa-assistant.mjs +4 -4
  113. package/fesm2022/sinequa-assistant-chat.mjs +5340 -0
  114. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -0
  115. package/{fesm2015 → fesm2022}/sinequa-assistant.mjs +3 -3
  116. package/index.d.ts +5 -5
  117. package/package.json +52 -25
  118. package/public-api.d.ts +1 -1
  119. package/chat/messages/de.d.ts +0 -4
  120. package/chat/messages/en.d.ts +0 -4
  121. package/chat/messages/fr.d.ts +0 -4
  122. package/chat/messages/index.d.ts +0 -4
  123. package/esm2020/chat/charts/chart/chart.component.mjs +0 -40
  124. package/esm2020/chat/chat-message/chat-message.component.mjs +0 -263
  125. package/esm2020/chat/chat-reference/chat-reference.component.mjs +0 -40
  126. package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -117
  127. package/esm2020/chat/chat.component.mjs +0 -1069
  128. package/esm2020/chat/chat.service.mjs +0 -333
  129. package/esm2020/chat/debug-message/debug-message.component.mjs +0 -43
  130. package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +0 -191
  131. package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +0 -80
  132. package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +0 -258
  133. package/esm2020/chat/documents-upload/documents-upload.service.mjs +0 -289
  134. package/esm2020/chat/instance-manager.service.mjs +0 -46
  135. package/esm2020/chat/messages/de.mjs +0 -4
  136. package/esm2020/chat/messages/en.mjs +0 -4
  137. package/esm2020/chat/messages/fr.mjs +0 -4
  138. package/esm2020/chat/messages/index.mjs +0 -9
  139. package/esm2020/chat/prompt.component.mjs +0 -88
  140. package/esm2020/chat/rest-chat.service.mjs +0 -241
  141. package/esm2020/chat/saved-chats/saved-chats.component.mjs +0 -175
  142. package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +0 -54
  143. package/esm2020/chat/types.mjs +0 -112
  144. package/esm2020/chat/websocket-chat.service.mjs +0 -641
  145. package/fesm2015/sinequa-assistant-chat.mjs +0 -4200
  146. package/fesm2015/sinequa-assistant-chat.mjs.map +0 -1
  147. package/fesm2020/sinequa-assistant-chat.mjs +0 -4171
  148. package/fesm2020/sinequa-assistant-chat.mjs.map +0 -1
  149. package/fesm2020/sinequa-assistant.mjs +0 -9
  150. package/fesm2020/sinequa-assistant.mjs.map +0 -1
  151. /package/{fesm2015 → fesm2022}/sinequa-assistant.mjs.map +0 -0
@@ -1,289 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { LoginService } from '@sinequa/core/login';
3
- import { JsonMethodPluginService } from '@sinequa/core/web-services';
4
- import { BehaviorSubject, catchError, filter, map, take } from 'rxjs';
5
- import { HttpClient, HttpEventType, HttpHeaders } from '@angular/common/http';
6
- import { AppService } from '@sinequa/core/app-utils';
7
- import * as i0 from "@angular/core";
8
- export class DocumentsUploadService {
9
- constructor() {
10
- /** Documents' upload configuration. */
11
- this.uploadConfig$ = new BehaviorSubject(undefined);
12
- this.jsonMethodWebService = inject(JsonMethodPluginService);
13
- this.loginService = inject(LoginService);
14
- this.appService = inject(AppService);
15
- this.http = inject(HttpClient);
16
- }
17
- /**
18
- * Initializes the file upload service with the provided chat service instance.
19
- *
20
- * @param chatService - An instance of ChatService. If not provided, an error is thrown.
21
- * @throws {Error} If the chatService instance is not provided or if there is an error during initialization.
22
- */
23
- init(chatService) {
24
- if (!chatService)
25
- throw new Error('A chatService instance must be provided');
26
- this.chatService = chatService;
27
- try {
28
- this.getRequestsUrl();
29
- this.getUploadConfig();
30
- }
31
- catch (error) {
32
- throw new Error(error);
33
- }
34
- }
35
- /**
36
- * Fetch the endpoint to use for the file upload related requests
37
- * @throws {Error} If the property 'restEndpoint' is not provided in the assistant configuration
38
- */
39
- getRequestsUrl() {
40
- if (!!this.chatService.assistantConfig$.value.connectionSettings.restEndpoint) {
41
- this.REQUEST_URL = this.chatService.assistantConfig$.value.connectionSettings.restEndpoint;
42
- }
43
- else {
44
- throw new Error(`The property 'restEndpoint' must be provided when attempting to use 'REST' in assistant instance`);
45
- }
46
- }
47
- /**
48
- * Retrieves the upload configuration for documents.
49
- * The response, which contains the upload configuration, is emitted to the `uploadConfig$` observable.
50
- *
51
- * @throws {Error} If there is an error invoking the `documentsUploadConfigGet` action.
52
- */
53
- getUploadConfig() {
54
- const data = {
55
- action: "documentsUploadConfigGet",
56
- appName: this.appService.appName,
57
- debug: this.chatService.assistantConfig$.value.defaultValues.debug
58
- };
59
- this.jsonMethodWebService.post(this.REQUEST_URL, data).pipe(take(1), catchError((error) => {
60
- throw new Error(`Error invoking documentsUploadConfigGet: ${error}`);
61
- })).subscribe((res) => this.uploadConfig$.next(res));
62
- }
63
- /**
64
- * Uploads documents to the server.
65
- *
66
- * This method takes a FormData object which should contain all files to be uploaded.
67
- * Each file should be appended to the FormData object with its original name.
68
- *
69
- * For example:
70
- * ```typescript
71
- * const formData = new FormData();
72
- * formData.append(file.name, file.file);
73
- * ```
74
- *
75
- * @param formData - The FormData object containing the files to be uploaded.
76
- * - Each file should be appended to the FormData object with its original name.
77
- * For example:
78
- * ```typescript
79
- * const formData = new FormData();
80
- * formData.append(file.name, file.file);
81
- * ```
82
- *
83
- * @param enableProgress - (Optional) A boolean parameter that controls whether progress reporting is enabled.
84
- * - Defaults to `true`.
85
- * - If `true`, the `reportProgress` option is set in the request options, enabling the track of upload progress based on the underlying browser's progress events.
86
- * - If `false`, progress events are not reported.
87
- *
88
- * @returns An Observable that emits events of type `UploadEvent`:
89
- * - `UploadProgressEvent`: Emitted during the upload process, containing:
90
- * - * `type`: "uploadProgress" - The type of the event.
91
- * - * `loaded`: number - The number of bytes uploaded so far.
92
- * - * `total`: number - The total number of bytes to be uploaded (if available).
93
- * - * `progress`: number - The percentage of upload progress (calculated as `(loaded / total) * 100`).
94
- * - `UploadResponseEvent`: Emitted when the upload is complete, containing:
95
- * - * `type`: "response" - The type of the event.
96
- * - * `body`: `UploadResponse` - The server's response, including:
97
- * - * - * `statusToken`: string - A token to track the status of the indexing process.
98
- * - * - * `executionTime`: string - The time taken to execute the upload.
99
- * - * - * `connectorResponse` (optional): Additional response data from the connector, containing:
100
- * - * - * - * `collection`: string - The collection name.
101
- * - * - * - * `action`: string - The action performed.
102
- * - * - * - * `stats`: object - Statistics about the upload, including:
103
- * - * - * - * - * `nbDocUpdated`: number - The number of documents updated.
104
- *
105
- * @throws {Error} If there is an error invoking the `documentsupload` action.
106
- *
107
- * Example usage:
108
- * ```typescript
109
- * const formData = new FormData();
110
- * formData.append(file.name, file.file);
111
- * this.documentsUploadService.uploadDocuments(formData).subscribe(event => {
112
- * if (event.type === 'uploadProgress') {
113
- * console.log(`Progress: ${event.progress}%`);
114
- * } else if (event.type === 'response') {
115
- * console.log('Upload complete:', event.body);
116
- * }
117
- * });
118
- * ```
119
- */
120
- uploadDocuments(formData, enableProgress = true) {
121
- // Add the required "data" field as a JSON string
122
- const data = {
123
- action: "documentsupload",
124
- appName: this.appService.appName,
125
- debug: this.chatService.assistantConfig$.value.defaultValues.debug
126
- };
127
- formData.append('data', JSON.stringify(data));
128
- const options = {
129
- headers: new HttpHeaders({ 'Accept': 'application/json' }),
130
- observe: 'events',
131
- };
132
- if (enableProgress)
133
- options['reportProgress'] = true;
134
- const url = this.jsonMethodWebService.makeUrl(this.REQUEST_URL);
135
- /**
136
- * Need to use the HttpClient directly to avoid the JSONMethodPluginService's behavior
137
- * because it is altering the request and thus making it unable to properly set the Content-Type header with the boundary
138
- */
139
- return this.http.post(url, formData, options).pipe(filter((event) => event.type === HttpEventType.Response || (enableProgress && event.type === HttpEventType.UploadProgress)), map((event) => {
140
- switch (event.type) {
141
- case HttpEventType.UploadProgress: {
142
- const { loaded = 0, total = 0 } = event;
143
- return { type: 'uploadProgress', loaded, total, progress: total > 0 ? Math.round((loaded / total) * 100) : 0 };
144
- }
145
- case HttpEventType.Response:
146
- return { type: 'response', body: event.body };
147
- default:
148
- throw new Error("Unexpected event type"); // Should not reach here, but for typescript sake.
149
- }
150
- }), catchError((error) => {
151
- throw new Error(`Error invoking documentsupload: ${error}`);
152
- }));
153
- }
154
- /**
155
- * Retrieves the indexing status of a predefined uploaded document(s)
156
- * based on the provided status token returned from the upload process.
157
- *
158
- * @param token - The status token used to track the indexing process.
159
- * @returns An Observable that emits the server response of type `IndexingResponse`.
160
- * The `IndexingResponse` object contains:
161
- * - `docs`: array - An array of document status objects, each containing:
162
- * - * `id`: string - The document ID.
163
- * - * `fileName`: string - The name of the file.
164
- * - * `operation`: "Add" | "Update" - The operation performed on the document.
165
- * - * `status`: "Indexing" | "Indexed" | "Error" - The status of the document.
166
- * - * `previousIndexationTime`: string | null - The previous indexation time.
167
- * - * `currentIndexationTime`: string | null - The current indexation time.
168
- * - `executionTime`: string - The time taken to retrieve the indexing status.
169
- * @throws {Error} If there is an error invoking the `documentsUploadStatus` action.
170
- */
171
- getIndexingStatus(token) {
172
- const data = {
173
- action: "documentsUploadStatus",
174
- appName: this.appService.appName,
175
- statusToken: token,
176
- debug: this.chatService.assistantConfig$.value.defaultValues.debug
177
- };
178
- return this.jsonMethodWebService.post(this.REQUEST_URL, data).pipe(catchError((error) => {
179
- throw new Error(`Error invoking documentsUploadStatus: ${error}`);
180
- }));
181
- }
182
- /**
183
- * Retrieves a list of uploaded documents.
184
- *
185
- * @param {string[]} [columns] - Optional array of additional index columns to include for each document.
186
- * @param {number} [skip] - Optional number of documents to skip for pagination. If set, count also needs to be set. No skip if not set.
187
- * @param {number} [count] - Optional number of documents to take for pagination (unlimited if not set).
188
- * @returns {Observable<UploadedDocuments>} An observable that emits the list of uploaded documents.
189
- * The `UploadedDocuments` object contains:
190
- * - `docs`: array - An array of objects representing a single document with the following properties:
191
- * - * `id`: string - A unique identifier for the document.
192
- * - * `fileName`: string - The name of the file.
193
- * - * `title`: string - The title of the document.
194
- * - * `fileExt`: string - The file extension of the document.
195
- * - * `indexationTime`: string - The time when the document was indexed.
196
- * - * `size`: number - The size of the document.
197
- * - * `sizeDisplay`: string - A human-readable representation of the document size.
198
- * - * `[key: string]`: any - Additional columns asked in the request, value of the column for the document.
199
- * - `count`: number - The count of documents in the current batch or subset.
200
- * - `totalCount`: number - The total count of documents available.
201
- * - `executionTime`: string - The time taken to process the documents.
202
- * @throws {Error} Throws an error if the request fails.
203
- */
204
- getDocumentsList(columns, skip, count) {
205
- const data = {
206
- action: "documentsList",
207
- appName: this.appService.appName,
208
- debug: this.chatService.assistantConfig$.value.defaultValues.debug
209
- };
210
- if (columns)
211
- data["columns"] = columns;
212
- if (skip)
213
- data["skip"] = skip;
214
- if (count)
215
- data["count"] = count;
216
- return this.jsonMethodWebService.post(this.REQUEST_URL, data).pipe(catchError((error) => {
217
- throw new Error(`Error invoking documentsList: ${error}`);
218
- }));
219
- }
220
- /**
221
- * Deletes the uploaded documents with the specified IDs.
222
- *
223
- * @param docIds - An array of document IDs to delete.
224
- * @returns An observable that emits the server response of type `deleteDocumentsResponse`.
225
- * The `deleteDocumentsResponse` object contains:
226
- * - `deletedCount`: number - The number of deleted documents.
227
- * - `executionTime`: string - The time taken to delete the documents.
228
- * @throws {Error} If there is an error invoking the `documentsDelete` action.
229
- */
230
- deleteDocuments(docIds) {
231
- const data = {
232
- action: "documentsDelete",
233
- docIds,
234
- appName: this.appService.appName,
235
- debug: this.chatService.assistantConfig$.value.defaultValues.debug
236
- };
237
- return this.jsonMethodWebService.post(this.REQUEST_URL, data).pipe(catchError((error) => {
238
- throw new Error(`Error invoking documentsDelete: ${error}`);
239
- }));
240
- }
241
- /**
242
- * Deletes all uploaded documents.
243
- *
244
- * @returns An observable that emits the server response of type `deleteDocumentsResponse`.
245
- * The `deleteDocumentsResponse` object contains:
246
- * - `deletedCount`: number - The number of deleted documents.
247
- * - `executionTime`: string - The time taken to delete the documents.
248
- * @throws {Error} If there is an error invoking the `documentsDeleteAll` action.
249
- */
250
- deleteAllDocuments() {
251
- const data = {
252
- action: "documentsDeleteAll",
253
- appName: this.appService.appName,
254
- debug: this.chatService.assistantConfig$.value.defaultValues.debug
255
- };
256
- return this.jsonMethodWebService.post(this.REQUEST_URL, data).pipe(catchError((error) => {
257
- throw new Error(`Error invoking documentsDeleteAll: ${error}`);
258
- }));
259
- }
260
- /**
261
- * Formats the given file size in bytes into a human-readable string.
262
- *
263
- * @param bytes - The size of the file in bytes.
264
- * @returns A string representing the file size in a human-readable format (e.g., "10.24 KB", "1.00 MB").
265
- */
266
- formatFileSize(bytes) {
267
- if (bytes === 0)
268
- return "0 Bytes";
269
- const k = 1024;
270
- const sizes = ["Bytes", "KB", "MB", "GB", "TB"];
271
- const i = Math.floor(Math.log(bytes) / Math.log(k));
272
- return (Number.parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]);
273
- }
274
- /**
275
- * Converts the given file size in bytes into megabytes.
276
- *
277
- * @param bytes - The size of the file in bytes.
278
- * @returns The size of the file in megabytes.
279
- */
280
- convertBytesToMB(bytes) {
281
- return bytes / (1024 * 1024);
282
- }
283
- }
284
- DocumentsUploadService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentsUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
285
- DocumentsUploadService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentsUploadService });
286
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentsUploadService, decorators: [{
287
- type: Injectable
288
- }] });
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLXVwbG9hZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXJFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxGLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBeUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNySCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBR3JELE1BQU0sT0FBTyxzQkFBc0I7SUFEbkM7UUFLRSx1Q0FBdUM7UUFDdkMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBMkIsU0FBUyxDQUFDLENBQUM7UUFHbEUseUJBQW9CLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdkQsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBMFNsQztJQXhTQzs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxXQUFvQztRQUN2QyxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMsV0FBVyxH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LEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FDTCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDeEUsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLEtBQWE7UUFDbkMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7bUhBblRVLHNCQUFzQjt1SEFBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gJ0BzaW5lcXVhL2NvcmUvbG9naW4nO1xuaW1wb3J0IHsgSnNvbk1ldGhvZFBsdWdpblNlcnZpY2UgfSBmcm9tICdAc2luZXF1YS9jb3JlL3dlYi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDaGF0U2VydmljZSB9IGZyb20gJy4uL2NoYXQuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxldGVEb2N1bWVudHNSZXNwb25zZSwgSW5kZXhpbmdJbmZvcywgVXBsb2FkQ29uZmlnLCBVcGxvYWRlZERvY3VtZW50cywgVXBsb2FkRXZlbnQgfSBmcm9tICcuL2RvY3VtZW50cy11cGxvYWQubW9kZWwnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSwgSHR0cFVwbG9hZFByb2dyZXNzRXZlbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnQHNpbmVxdWEvY29yZS9hcHAtdXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIGFzc2lzdGFudCBwbHVnaW4uICovXG4gIHB1YmxpYyBSRVFVRVNUX1VSTDogc3RyaW5nO1xuICAvKiogRG9jdW1lbnRzJyB1cGxvYWQgY29uZmlndXJhdGlvbi4gKi9cbiAgdXBsb2FkQ29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXBsb2FkQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuXG4gIHB1YmxpYyBqc29uTWV0aG9kV2ViU2VydmljZSA9IGluamVjdChKc29uTWV0aG9kUGx1Z2luU2VydmljZSk7XG4gIHB1YmxpYyBsb2dpblNlcnZpY2UgPSBpbmplY3QoTG9naW5TZXJ2aWNlKTtcbiAgcHVibGljIGFwcFNlcnZpY2UgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gIHB1YmxpYyBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgZmlsZSB1cGxvYWQgc2VydmljZSB3aXRoIHRoZSBwcm92aWRlZCBjaGF0IHNlcnZpY2UgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGF0U2VydmljZSAtIEFuIGluc3RhbmNlIG9mIENoYXRTZXJ2aWNlLiBJZiBub3QgcHJvdmlkZWQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjaGF0U2VydmljZSBpbnN0YW5jZSBpcyBub3QgcHJvdmlkZWQgb3IgaWYgdGhlcmUgaXMgYW4gZXJyb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICAgKi9cbiAgaW5pdChjaGF0U2VydmljZTogQ2hhdFNlcnZpY2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlKSB0aHJvdyBuZXcgRXJyb3IoJ0EgY2hhdFNlcnZpY2UgaW5zdGFuY2UgbXVzdCBiZSBwcm92aWRlZCcpO1xuXG4gICAgdGhpcy5jaGF0U2VydmljZSA9IGNoYXRTZXJ2aWNlO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmdldFJlcXVlc3RzVXJsKCk7XG4gICAgICB0aGlzLmdldFVwbG9hZENvbmZpZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgZW5kcG9pbnQgdG8gdXNlIGZvciB0aGUgZmlsZSB1cGxvYWQgcmVsYXRlZCByZXF1ZXN0c1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHByb3BlcnR5ICdyZXN0RW5kcG9pbnQnIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgYXNzaXN0YW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdldFJlcXVlc3RzVXJsKCkge1xuICAgIGlmICghIXRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuY29ubmVjdGlvblNldHRpbmdzLnJlc3RFbmRwb2ludCkge1xuICAgICAgdGhpcy5SRVFVRVNUX1VSTCA9IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuY29ubmVjdGlvblNldHRpbmdzLnJlc3RFbmRwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgJ3Jlc3RFbmRwb2ludCcgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGF0dGVtcHRpbmcgdG8gdXNlICdSRVNUJyBpbiBhc3Npc3RhbnQgaW5zdGFuY2VgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1cGxvYWQgY29uZmlndXJhdGlvbiBmb3IgZG9jdW1lbnRzLlxuICAgKiBUaGUgcmVzcG9uc2UsIHdoaWNoIGNvbnRhaW5zIHRoZSB1cGxvYWQgY29uZmlndXJhdGlvbiwgaXMgZW1pdHRlZCB0byB0aGUgYHVwbG9hZENvbmZpZyRgIG9ic2VydmFibGUuXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbnZva2luZyB0aGUgYGRvY3VtZW50c1VwbG9hZENvbmZpZ0dldGAgYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldFVwbG9hZENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c1VwbG9hZENvbmZpZ0dldFwiLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBkZWJ1ZzogdGhpcy5jaGF0U2VydmljZS5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLmRlYnVnXG4gICAgfTtcblxuICAgIHRoaXMuanNvbk1ldGhvZFdlYlNlcnZpY2UucG9zdCh0aGlzLlJFUVVFU1RfVVJMLCBkYXRhKS5waXBlKFxuICAgICAgdGFrZSgxKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW52b2tpbmcgZG9jdW1lbnRzVXBsb2FkQ29uZmlnR2V0OiAke2Vycm9yfWApO1xuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSgocmVzOiBVcGxvYWRDb25maWcpID0+IHRoaXMudXBsb2FkQ29uZmlnJC5uZXh0KHJlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgZG9jdW1lbnRzIHRvIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IHdoaWNoIHNob3VsZCBjb250YWluIGFsbCBmaWxlcyB0byBiZSB1cGxvYWRlZC5cbiAgICogRWFjaCBmaWxlIHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgRm9ybURhdGEgb2JqZWN0IHdpdGggaXRzIG9yaWdpbmFsIG5hbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAqIGZvcm1EYXRhLmFwcGVuZChmaWxlLm5hbWUsIGZpbGUuZmlsZSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGJlIHVwbG9hZGVkLlxuICAgKiAtIEVhY2ggZmlsZSBzaG91bGQgYmUgYXBwZW5kZWQgdG8gdGhlIEZvcm1EYXRhIG9iamVjdCB3aXRoIGl0cyBvcmlnaW5hbCBuYW1lLlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgKiBmb3JtRGF0YS5hcHBlbmQoZmlsZS5uYW1lLCBmaWxlLmZpbGUpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGVuYWJsZVByb2dyZXNzIC0gKE9wdGlvbmFsKSBBIGJvb2xlYW4gcGFyYW1ldGVyIHRoYXQgY29udHJvbHMgd2hldGhlciBwcm9ncmVzcyByZXBvcnRpbmcgaXMgZW5hYmxlZC5cbiAgICogLSBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqIC0gSWYgYHRydWVgLCB0aGUgYHJlcG9ydFByb2dyZXNzYCBvcHRpb24gaXMgc2V0IGluIHRoZSByZXF1ZXN0IG9wdGlvbnMsIGVuYWJsaW5nIHRoZSB0cmFjayBvZiB1cGxvYWQgcHJvZ3Jlc3MgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgYnJvd3NlcidzIHByb2dyZXNzIGV2ZW50cy5cbiAgICogLSBJZiBgZmFsc2VgLCBwcm9ncmVzcyBldmVudHMgYXJlIG5vdCByZXBvcnRlZC5cbiAgICpcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGV2ZW50cyBvZiB0eXBlIGBVcGxvYWRFdmVudGA6XG4gICAqIC0gYFVwbG9hZFByb2dyZXNzRXZlbnRgOiBFbWl0dGVkIGR1cmluZyB0aGUgdXBsb2FkIHByb2Nlc3MsIGNvbnRhaW5pbmc6XG4gICAqICAgLSAqICBgdHlwZWA6IFwidXBsb2FkUHJvZ3Jlc3NcIiAtIFRoZSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICogICAtICogIGBsb2FkZWRgOiBudW1iZXIgLSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHVwbG9hZGVkIHNvIGZhci5cbiAgICogICAtICogIGB0b3RhbGA6IG51bWJlciAtIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdXBsb2FkZWQgKGlmIGF2YWlsYWJsZSkuXG4gICAqICAgLSAqICBgcHJvZ3Jlc3NgOiBudW1iZXIgLSBUaGUgcGVyY2VudGFnZSBvZiB1cGxvYWQgcHJvZ3Jlc3MgKGNhbGN1bGF0ZWQgYXMgYChsb2FkZWQgLyB0b3RhbCkgKiAxMDBgKS5cbiAgICogLSBgVXBsb2FkUmVzcG9uc2VFdmVudGA6IEVtaXR0ZWQgd2hlbiB0aGUgdXBsb2FkIGlzIGNvbXBsZXRlLCBjb250YWluaW5nOlxuICAgKiAgIC0gKiAgYHR5cGVgOiBcInJlc3BvbnNlXCIgLSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAqICAgLSAqICBgYm9keWA6IGBVcGxvYWRSZXNwb25zZWAgLSBUaGUgc2VydmVyJ3MgcmVzcG9uc2UsIGluY2x1ZGluZzpcbiAgICogICAgIC0gKiAtICogYHN0YXR1c1Rva2VuYDogc3RyaW5nIC0gQSB0b2tlbiB0byB0cmFjayB0aGUgc3RhdHVzIG9mIHRoZSBpbmRleGluZyBwcm9jZXNzLlxuICAgKiAgICAgLSAqIC0gKiAgYGV4ZWN1dGlvblRpbWVgOiBzdHJpbmcgLSBUaGUgdGltZSB0YWtlbiB0byBleGVjdXRlIHRoZSB1cGxvYWQuXG4gICAqICAgICAtICogLSAqICBgY29ubmVjdG9yUmVzcG9uc2VgIChvcHRpb25hbCk6IEFkZGl0aW9uYWwgcmVzcG9uc2UgZGF0YSBmcm9tIHRoZSBjb25uZWN0b3IsIGNvbnRhaW5pbmc6XG4gICAqICAgICAgIC0gKiAtICogLSAqICBgY29sbGVjdGlvbmA6IHN0cmluZyAtIFRoZSBjb2xsZWN0aW9uIG5hbWUuXG4gICAqICAgICAgIC0gKiAtICogLSAqICBgYWN0aW9uYDogc3RyaW5nIC0gVGhlIGFjdGlvbiBwZXJmb3JtZWQuXG4gICAqICAgICAgIC0gKiAtICogLSAqICBgc3RhdHNgOiBvYmplY3QgLSBTdGF0aXN0aWNzIGFib3V0IHRoZSB1cGxvYWQsIGluY2x1ZGluZzpcbiAgICogICAgICAgICAtICogLSAqIC0gKiAtICogYG5iRG9jVXBkYXRlZGA6IG51bWJlciAtIFRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIHVwZGF0ZWQuXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbnZva2luZyB0aGUgYGRvY3VtZW50c3VwbG9hZGAgYWN0aW9uLlxuICAgKlxuICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAqIGZvcm1EYXRhLmFwcGVuZChmaWxlLm5hbWUsIGZpbGUuZmlsZSk7XG4gICAqIHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWREb2N1bWVudHMoZm9ybURhdGEpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAqICAgaWYgKGV2ZW50LnR5cGUgPT09ICd1cGxvYWRQcm9ncmVzcycpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKGBQcm9ncmVzczogJHtldmVudC5wcm9ncmVzc30lYCk7XG4gICAqICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAncmVzcG9uc2UnKSB7XG4gICAqICAgICBjb25zb2xlLmxvZygnVXBsb2FkIGNvbXBsZXRlOicsIGV2ZW50LmJvZHkpO1xuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHVwbG9hZERvY3VtZW50cyhmb3JtRGF0YTogRm9ybURhdGEsIGVuYWJsZVByb2dyZXNzOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8VXBsb2FkRXZlbnQ+IHtcbiAgICAvLyBBZGQgdGhlIHJlcXVpcmVkIFwiZGF0YVwiIGZpZWxkIGFzIGEgSlNPTiBzdHJpbmdcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c3VwbG9hZFwiLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBkZWJ1ZzogdGhpcy5jaGF0U2VydmljZS5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLmRlYnVnXG4gICAgfTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2RhdGEnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cbiAgICBjb25zdCBvcHRpb25zOiBhbnkgID0ge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyB9KSxcbiAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgIH07XG4gICAgaWYgKGVuYWJsZVByb2dyZXNzKSBvcHRpb25zWydyZXBvcnRQcm9ncmVzcyddID0gdHJ1ZTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmpzb25NZXRob2RXZWJTZXJ2aWNlLm1ha2VVcmwodGhpcy5SRVFVRVNUX1VSTCk7XG5cbiAgICAvKipcbiAgICAgKiBOZWVkIHRvIHVzZSB0aGUgSHR0cENsaWVudCBkaXJlY3RseSB0byBhdm9pZCB0aGUgSlNPTk1ldGhvZFBsdWdpblNlcnZpY2UncyBiZWhhdmlvclxuICAgICAqIGJlY2F1c2UgaXQgaXMgYWx0ZXJpbmcgdGhlIHJlcXVlc3QgYW5kIHRodXMgbWFraW5nIGl0IHVuYWJsZSB0byBwcm9wZXJseSBzZXQgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgd2l0aCB0aGUgYm91bmRhcnlcbiAgICAgKi9cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmwsIGZvcm1EYXRhLCBvcHRpb25zKS5waXBlKFxuICAgICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIEh0dHBVcGxvYWRQcm9ncmVzc0V2ZW50IHwgSHR0cFJlc3BvbnNlPGFueT4gPT5cbiAgICAgICAgZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSB8fCAoZW5hYmxlUHJvZ3Jlc3MgJiYgZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcylcbiAgICAgICksXG4gICAgICBtYXAoKGV2ZW50KTogVXBsb2FkRXZlbnQgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbG9hZGVkID0gMCwgdG90YWwgPSAwIH0gPSBldmVudDtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICd1cGxvYWRQcm9ncmVzcycsIGxvYWRlZCwgdG90YWwsIHByb2dyZXNzOiB0b3RhbCA+IDAgPyBNYXRoLnJvdW5kKChsb2FkZWQgLyB0b3RhbCkgKiAxMDApIDogMCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAncmVzcG9uc2UnLCBib2R5OiBldmVudC5ib2R5IH07XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXZlbnQgdHlwZVwiKTsgLy8gU2hvdWxkIG5vdCByZWFjaCBoZXJlLCBidXQgZm9yIHR5cGVzY3JpcHQgc2FrZS5cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c3VwbG9hZDogJHtlcnJvcn1gKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGluZGV4aW5nIHN0YXR1cyBvZiBhIHByZWRlZmluZWQgdXBsb2FkZWQgZG9jdW1lbnQocylcbiAgICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXR1cyB0b2tlbiByZXR1cm5lZCBmcm9tIHRoZSB1cGxvYWQgcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHN0YXR1cyB0b2tlbiB1c2VkIHRvIHRyYWNrIHRoZSBpbmRleGluZyBwcm9jZXNzLlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNlcnZlciByZXNwb25zZSBvZiB0eXBlIGBJbmRleGluZ1Jlc3BvbnNlYC5cbiAgICogVGhlIGBJbmRleGluZ1Jlc3BvbnNlYCBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYGRvY3NgOiBhcnJheSAtIEFuIGFycmF5IG9mIGRvY3VtZW50IHN0YXR1cyBvYmplY3RzLCBlYWNoIGNvbnRhaW5pbmc6XG4gICAqICAgLSAqIGBpZGA6IHN0cmluZyAtIFRoZSBkb2N1bWVudCBJRC5cbiAgICogICAtICogYGZpbGVOYW1lYDogc3RyaW5nIC0gVGhlIG5hbWUgb2YgdGhlIGZpbGUuXG4gICAqICAgLSAqIGBvcGVyYXRpb25gOiBcIkFkZFwiIHwgXCJVcGRhdGVcIiAtIFRoZSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoZSBkb2N1bWVudC5cbiAgICogICAtICogYHN0YXR1c2A6IFwiSW5kZXhpbmdcIiB8IFwiSW5kZXhlZFwiIHwgXCJFcnJvclwiIC0gVGhlIHN0YXR1cyBvZiB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBwcmV2aW91c0luZGV4YXRpb25UaW1lYDogc3RyaW5nIHwgbnVsbCAtIFRoZSBwcmV2aW91cyBpbmRleGF0aW9uIHRpbWUuXG4gICAqICAgLSAqIGBjdXJyZW50SW5kZXhhdGlvblRpbWVgOiBzdHJpbmcgfCBudWxsIC0gVGhlIGN1cnJlbnQgaW5kZXhhdGlvbiB0aW1lLlxuICAgKiAtIGBleGVjdXRpb25UaW1lYDogc3RyaW5nIC0gVGhlIHRpbWUgdGFrZW4gdG8gcmV0cmlldmUgdGhlIGluZGV4aW5nIHN0YXR1cy5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIGludm9raW5nIHRoZSBgZG9jdW1lbnRzVXBsb2FkU3RhdHVzYCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0SW5kZXhpbmdTdGF0dXModG9rZW46IHN0cmluZyk6IE9ic2VydmFibGU8SW5kZXhpbmdJbmZvcz4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiZG9jdW1lbnRzVXBsb2FkU3RhdHVzXCIsXG4gICAgICBhcHBOYW1lOiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZSxcbiAgICAgIHN0YXR1c1Rva2VuOiB0b2tlbixcbiAgICAgIGRlYnVnOiB0aGlzLmNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMuZGVidWdcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuanNvbk1ldGhvZFdlYlNlcnZpY2UucG9zdCh0aGlzLlJFUVVFU1RfVVJMLCBkYXRhKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbnZva2luZyBkb2N1bWVudHNVcGxvYWRTdGF0dXM6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiB1cGxvYWRlZCBkb2N1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFtjb2x1bW5zXSAtIE9wdGlvbmFsIGFycmF5IG9mIGFkZGl0aW9uYWwgaW5kZXggY29sdW1ucyB0byBpbmNsdWRlIGZvciBlYWNoIGRvY3VtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NraXBdIC0gT3B0aW9uYWwgbnVtYmVyIG9mIGRvY3VtZW50cyB0byBza2lwIGZvciBwYWdpbmF0aW9uLiBJZiBzZXQsIGNvdW50IGFsc28gbmVlZHMgdG8gYmUgc2V0LiBObyBza2lwIGlmIG5vdCBzZXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY291bnRdIC0gT3B0aW9uYWwgbnVtYmVyIG9mIGRvY3VtZW50cyB0byB0YWtlIGZvciBwYWdpbmF0aW9uICh1bmxpbWl0ZWQgaWYgbm90IHNldCkuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFVwbG9hZGVkRG9jdW1lbnRzPn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBsaXN0IG9mIHVwbG9hZGVkIGRvY3VtZW50cy5cbiAgICogVGhlIGBVcGxvYWRlZERvY3VtZW50c2Agb2JqZWN0IGNvbnRhaW5zOlxuICAgKiAtIGBkb2NzYDogYXJyYXkgLSBBbiBhcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBkb2N1bWVudCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogICAtICogYGlkYDogc3RyaW5nIC0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGRvY3VtZW50LlxuICAgKiAgIC0gKiBgZmlsZU5hbWVgOiBzdHJpbmcgLSBUaGUgbmFtZSBvZiB0aGUgZmlsZS5cbiAgICogICAtICogYHRpdGxlYDogc3RyaW5nIC0gVGhlIHRpdGxlIG9mIHRoZSBkb2N1bWVudC5cbiAgICogICAtICogYGZpbGVFeHRgOiBzdHJpbmcgLSBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGRvY3VtZW50LlxuICAgKiAgIC0gKiBgaW5kZXhhdGlvblRpbWVgOiBzdHJpbmcgLSBUaGUgdGltZSB3aGVuIHRoZSBkb2N1bWVudCB3YXMgaW5kZXhlZC5cbiAgICogICAtICogYHNpemVgOiBudW1iZXIgLSBUaGUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBzaXplRGlzcGxheWA6IHN0cmluZyAtIEEgaHVtYW4tcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IHNpemUuXG4gICAqICAgLSAqIGBba2V5OiBzdHJpbmddYDogYW55IC0gQWRkaXRpb25hbCBjb2x1bW5zIGFza2VkIGluIHRoZSByZXF1ZXN0LCB2YWx1ZSBvZiB0aGUgY29sdW1uIGZvciB0aGUgZG9jdW1lbnQuXG4gICAqIC0gYGNvdW50YDogbnVtYmVyIC0gVGhlIGNvdW50IG9mIGRvY3VtZW50cyBpbiB0aGUgY3VycmVudCBiYXRjaCBvciBzdWJzZXQuXG4gICAqIC0gYHRvdGFsQ291bnRgOiBudW1iZXIgLSBUaGUgdG90YWwgY291bnQgb2YgZG9jdW1lbnRzIGF2YWlsYWJsZS5cbiAgICogLSBgZXhlY3V0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHRha2VuIHRvIHByb2Nlc3MgdGhlIGRvY3VtZW50cy5cbiAgICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcmVxdWVzdCBmYWlscy5cbiAgICovXG4gIHB1YmxpYyBnZXREb2N1bWVudHNMaXN0KGNvbHVtbnM/OiBzdHJpbmdbXSwgc2tpcD86IG51bWJlciwgY291bnQ/OiBudW1iZXIpOiBPYnNlcnZhYmxlPFVwbG9hZGVkRG9jdW1lbnRzPiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJkb2N1bWVudHNMaXN0XCIsXG4gICAgICBhcHBOYW1lOiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZSxcbiAgICAgIGRlYnVnOiB0aGlzLmNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMuZGVidWdcbiAgICB9O1xuXG4gICAgaWYgKGNvbHVtbnMpIGRhdGFbXCJjb2x1bW5zXCJdID0gY29sdW1ucztcbiAgICBpZiAoc2tpcCkgZGF0YVtcInNraXBcIl0gPSBza2lwO1xuICAgIGlmIChjb3VudCkgZGF0YVtcImNvdW50XCJdID0gY291bnQ7XG5cbiAgICByZXR1cm4gdGhpcy5qc29uTWV0aG9kV2ViU2VydmljZS5wb3N0KHRoaXMuUkVRVUVTVF9VUkwsIGRhdGEpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c0xpc3Q6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXBsb2FkZWQgZG9jdW1lbnRzIHdpdGggdGhlIHNwZWNpZmllZCBJRHMuXG4gICAqXG4gICAqIEBwYXJhbSBkb2NJZHMgLSBBbiBhcnJheSBvZiBkb2N1bWVudCBJRHMgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNlcnZlciByZXNwb25zZSBvZiB0eXBlIGBkZWxldGVEb2N1bWVudHNSZXNwb25zZWAuXG4gICAqIFRoZSBgZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2VgIG9iamVjdCBjb250YWluczpcbiAgICogLSBgZGVsZXRlZENvdW50YDogbnVtYmVyIC0gVGhlIG51bWJlciBvZiBkZWxldGVkIGRvY3VtZW50cy5cbiAgICogLSBgZXhlY3V0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHRha2VuIHRvIGRlbGV0ZSB0aGUgZG9jdW1lbnRzLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW52b2tpbmcgdGhlIGBkb2N1bWVudHNEZWxldGVgIGFjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBkZWxldGVEb2N1bWVudHMoZG9jSWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8ZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c0RlbGV0ZVwiLFxuICAgICAgZG9jSWRzLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBkZWJ1ZzogdGhpcy5jaGF0U2VydmljZS5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLmRlYnVnXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmpzb25NZXRob2RXZWJTZXJ2aWNlLnBvc3QodGhpcy5SRVFVRVNUX1VSTCwgZGF0YSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW52b2tpbmcgZG9jdW1lbnRzRGVsZXRlOiAke2Vycm9yfWApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIHVwbG9hZGVkIGRvY3VtZW50cy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugb2YgdHlwZSBgZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2VgLlxuICAgKiBUaGUgYGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlYCBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYGRlbGV0ZWRDb3VudGA6IG51bWJlciAtIFRoZSBudW1iZXIgb2YgZGVsZXRlZCBkb2N1bWVudHMuXG4gICAqIC0gYGV4ZWN1dGlvblRpbWVgOiBzdHJpbmcgLSBUaGUgdGltZSB0YWtlbiB0byBkZWxldGUgdGhlIGRvY3VtZW50cy5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIGludm9raW5nIHRoZSBgZG9jdW1lbnRzRGVsZXRlQWxsYCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlQWxsRG9jdW1lbnRzKCk6IE9ic2VydmFibGU8ZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c0RlbGV0ZUFsbFwiLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBkZWJ1ZzogdGhpcy5jaGF0U2VydmljZS5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLmRlYnVnXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmpzb25NZXRob2RXZWJTZXJ2aWNlLnBvc3QodGhpcy5SRVFVRVNUX1VSTCwgZGF0YSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW52b2tpbmcgZG9jdW1lbnRzRGVsZXRlQWxsOiAke2Vycm9yfWApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgdGhlIGdpdmVuIGZpbGUgc2l6ZSBpbiBieXRlcyBpbnRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gYnl0ZXMgLSBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBpbiBieXRlcy5cbiAgICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWxlIHNpemUgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtYXQgKGUuZy4sIFwiMTAuMjQgS0JcIiwgXCIxLjAwIE1CXCIpLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuIFwiMCBCeXRlc1wiO1xuICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgIGNvbnN0IHNpemVzID0gW1wiQnl0ZXNcIiwgXCJLQlwiLCBcIk1CXCIsIFwiR0JcIiwgXCJUQlwiXTtcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XG4gICAgcmV0dXJuIChcbiAgICAgIE51bWJlci5wYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDIpKSArIFwiIFwiICsgc2l6ZXNbaV1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBnaXZlbiBmaWxlIHNpemUgaW4gYnl0ZXMgaW50byBtZWdhYnl0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBieXRlcyAtIFRoZSBzaXplIG9mIHRoZSBmaWxlIGluIGJ5dGVzLlxuICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBpbiBtZWdhYnl0ZXMuXG4gICAqL1xuICBwdWJsaWMgY29udmVydEJ5dGVzVG9NQihieXRlczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gYnl0ZXMgLyAoMTAyNCAqIDEwMjQpO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,46 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * A service to create and manage instances of ChatService dynamically based on the provided component references and the implementation type (http or websocket)
5
- * All chat-related components should share the same instance of this InstanceManagerService, which in turn provides the appropriate instance of ChatService
6
- */
7
- export class InstanceManagerService {
8
- constructor() {
9
- this._serviceInstances = new Map();
10
- }
11
- /**
12
- * Store the instance of ChatService in the map
13
- * @param key key differentiator between components used to store their corresponding ChatService instance
14
- * @param service The ChatService instance
15
- */
16
- storeInstance(key, service) {
17
- this._serviceInstances.set(key, service);
18
- }
19
- /**
20
- * @param key key differentiator between components based on which the corresponding ChatService instance is fetched
21
- * @returns The instance of the service corresponding to the instance of the component
22
- */
23
- getInstance(key) {
24
- if (!this.checkInstance(key)) {
25
- throw new Error(`No assistant instance found for the given key : '${key}'`);
26
- }
27
- return this._serviceInstances.get(key);
28
- }
29
- /**
30
- *
31
- * @param key key differentiator between components based on which the check for an existent ChatService instance is performed
32
- * @returns True if a ChatService instance has been already instantiated for the given key. Otherwise, false.
33
- */
34
- checkInstance(key) {
35
- return this._serviceInstances.has(key);
36
- }
37
- }
38
- InstanceManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: InstanceManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
39
- InstanceManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: InstanceManagerService, providedIn: 'root' });
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: InstanceManagerService, decorators: [{
41
- type: Injectable,
42
- args: [{
43
- providedIn: 'root',
44
- }]
45
- }] });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDOzs7R0FHRztBQUlILE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFJVSxzQkFBaUIsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztLQThCakU7SUE1QkM7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxHQUFXLEVBQUUsT0FBb0I7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDN0U7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsR0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQzs7bUhBOUJVLHNCQUFzQjt1SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LnNlcnZpY2UnO1xuXG4vKipcbiAqIEEgc2VydmljZSB0byBjcmVhdGUgYW5kIG1hbmFnZSBpbnN0YW5jZXMgb2YgQ2hhdFNlcnZpY2UgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZWZlcmVuY2VzIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gdHlwZSAoaHR0cCBvciB3ZWJzb2NrZXQpXG4gKiBBbGwgY2hhdC1yZWxhdGVkIGNvbXBvbmVudHMgc2hvdWxkIHNoYXJlIHRoZSBzYW1lIGluc3RhbmNlIG9mIHRoaXMgSW5zdGFuY2VNYW5hZ2VyU2VydmljZSwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyB0aGUgYXBwcm9wcmlhdGUgaW5zdGFuY2Ugb2YgQ2hhdFNlcnZpY2VcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWFuYWdlclNlcnZpY2Uge1xuICBwcml2YXRlIF9zZXJ2aWNlSW5zdGFuY2VzOiBNYXA8c3RyaW5nLCBDaGF0U2VydmljZT4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBpbnN0YW5jZSBvZiBDaGF0U2VydmljZSBpbiB0aGUgbWFwXG4gICAqIEBwYXJhbSBrZXkga2V5IGRpZmZlcmVudGlhdG9yIGJldHdlZW4gY29tcG9uZW50cyB1c2VkIHRvIHN0b3JlIHRoZWlyIGNvcnJlc3BvbmRpbmcgQ2hhdFNlcnZpY2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIHNlcnZpY2UgVGhlIENoYXRTZXJ2aWNlIGluc3RhbmNlXG4gICAqL1xuICBzdG9yZUluc3RhbmNlKGtleTogc3RyaW5nLCBzZXJ2aWNlOiBDaGF0U2VydmljZSk6IHZvaWQge1xuICAgIHRoaXMuX3NlcnZpY2VJbnN0YW5jZXMuc2V0KGtleSwgc2VydmljZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGtleSBrZXkgZGlmZmVyZW50aWF0b3IgYmV0d2VlbiBjb21wb25lbnRzIGJhc2VkIG9uIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nIENoYXRTZXJ2aWNlIGluc3RhbmNlIGlzIGZldGNoZWRcbiAgICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGdldEluc3RhbmNlKGtleTogc3RyaW5nKTogQ2hhdFNlcnZpY2Uge1xuICAgIGlmICghdGhpcy5jaGVja0luc3RhbmNlKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gYXNzaXN0YW50IGluc3RhbmNlIGZvdW5kIGZvciB0aGUgZ2l2ZW4ga2V5IDogJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VJbnN0YW5jZXMuZ2V0KGtleSkhO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBrZXkga2V5IGRpZmZlcmVudGlhdG9yIGJldHdlZW4gY29tcG9uZW50cyBiYXNlZCBvbiB3aGljaCB0aGUgY2hlY2sgZm9yIGFuIGV4aXN0ZW50IENoYXRTZXJ2aWNlIGluc3RhbmNlIGlzIHBlcmZvcm1lZFxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgQ2hhdFNlcnZpY2UgaW5zdGFuY2UgaGFzIGJlZW4gYWxyZWFkeSBpbnN0YW50aWF0ZWQgZm9yIHRoZSBnaXZlbiBrZXkuIE90aGVyd2lzZSwgZmFsc2UuXG4gICAqL1xuICBjaGVja0luc3RhbmNlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VJbnN0YW5jZXMuaGFzKGtleSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +0,0 @@
1
- export default {
2
- "assistant": {}
3
- };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9tZXNzYWdlcy9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlO0lBQ2IsV0FBVyxFQUFFLEVBQUU7Q0FDaEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgXCJhc3Npc3RhbnRcIjoge31cbn1cbiJdfQ==
@@ -1,4 +0,0 @@
1
- export default {
2
- "assistant": {}
3
- };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9tZXNzYWdlcy9lbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlO0lBQ2IsV0FBVyxFQUFFLEVBQUU7Q0FDaEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgXCJhc3Npc3RhbnRcIjoge31cbn1cbiJdfQ==
@@ -1,4 +0,0 @@
1
- export default {
2
- "assistant": {}
3
- };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9tZXNzYWdlcy9mci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlO0lBQ2IsV0FBVyxFQUFFLEVBQUU7Q0FDaEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgXCJhc3Npc3RhbnRcIjoge31cbn1cbiJdfQ==
@@ -1,9 +0,0 @@
1
- import { Utils } from '@sinequa/core/base';
2
- import _enAssistant from './en';
3
- import _frAssistant from './fr';
4
- import _deAssistant from './de';
5
- const enAssistant = Utils.merge({}, _enAssistant);
6
- const frAssistant = Utils.merge({}, _frAssistant);
7
- const deAssistant = Utils.merge({}, _deAssistant);
8
- export { enAssistant, frAssistant, deAssistant };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9tZXNzYWdlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxZQUFZLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sWUFBWSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLFlBQVksTUFBTSxNQUFNLENBQUM7QUFFaEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDbEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDbEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVdGlscyB9IGZyb20gJ0BzaW5lcXVhL2NvcmUvYmFzZSc7XG5pbXBvcnQgX2VuQXNzaXN0YW50IGZyb20gJy4vZW4nO1xuaW1wb3J0IF9mckFzc2lzdGFudCBmcm9tICcuL2ZyJztcbmltcG9ydCBfZGVBc3Npc3RhbnQgZnJvbSAnLi9kZSc7XG5cbmNvbnN0IGVuQXNzaXN0YW50ID0gVXRpbHMubWVyZ2Uoe30sIF9lbkFzc2lzdGFudCk7XG5jb25zdCBmckFzc2lzdGFudCA9IFV0aWxzLm1lcmdlKHt9LCBfZnJBc3Npc3RhbnQpO1xuY29uc3QgZGVBc3Npc3RhbnQgPSBVdGlscy5tZXJnZSh7fSwgX2RlQXNzaXN0YW50KTtcblxuZXhwb3J0IHsgZW5Bc3Npc3RhbnQsIGZyQXNzaXN0YW50LCBkZUFzc2lzdGFudCB9O1xuIl19
@@ -1,88 +0,0 @@
1
- import { Component, Inject } from "@angular/core";
2
- import { CommonModule } from "@angular/common";
3
- import { UntypedFormControl, Validators } from '@angular/forms';
4
- import { MODAL_MODEL, ModalButton } from "@sinequa/core/modal";
5
- import { Utils } from '@sinequa/core/base';
6
- import { BsModalModule } from "@sinequa/components/modal";
7
- import { ValidationModule } from "@sinequa/core/validation";
8
- import { ReactiveFormsModule } from "@angular/forms";
9
- import { IntlModule } from "@sinequa/core/intl";
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@sinequa/core/modal";
12
- import * as i2 from "@angular/forms";
13
- import * as i3 from "@angular/common";
14
- import * as i4 from "@sinequa/components/modal";
15
- import * as i5 from "@sinequa/core/validation";
16
- import * as i6 from "@sinequa/core/intl";
17
- export class ChatPrompt {
18
- constructor(model, modalRef, formBuilder) {
19
- this.model = model;
20
- this.modalRef = modalRef;
21
- this.formBuilder = formBuilder;
22
- this.defaultButtons = [
23
- new ModalButton({
24
- result: -1 /* ModalResult.OK */,
25
- primary: true,
26
- validation: this.form
27
- }),
28
- new ModalButton({
29
- result: -2 /* ModalResult.Cancel */
30
- })
31
- ];
32
- }
33
- ngOnInit() {
34
- this.inputControl = new UntypedFormControl(this.model.output, this.model.validators || Validators.required);
35
- this.form = this.formBuilder.group({
36
- input: this.inputControl
37
- });
38
- this.formChanges = Utils.subscribe(this.form.valueChanges, (value) => {
39
- this.model.output = this.inputControl.value;
40
- });
41
- }
42
- ngOnDestroy() {
43
- this.formChanges.unsubscribe();
44
- }
45
- get title() {
46
- return this.model.title ? this.model.title : "msg#modal.prompt.title";
47
- }
48
- get buttons() {
49
- return (this.model.buttons && this.model.buttons.length > 0) ? this.model.buttons : this.defaultButtons;
50
- }
51
- }
52
- ChatPrompt.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ChatPrompt, deps: [{ token: MODAL_MODEL }, { token: i1.ModalRef }, { token: i2.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
53
- ChatPrompt.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ChatPrompt, isStandalone: true, selector: "sq-chat-prompt", ngImport: i0, template: `
54
- <form name="prompt" novalidate [formGroup]="form">
55
- <sq-modal [title]="title" [buttons]="buttons">
56
- <div class="mb-3 sq-form-group">
57
- <label class="form-label" for="input">{{model.message | sqMessage:model.messageParams}}</label>
58
- <input [sqValidation]="form" type="text" class="form-control" id="input" formControlName="input" spellcheck="off" sqAutofocus *ngIf="!model.rowCount">
59
- <textarea [sqValidation]="form" type="text" class="form-control" id="input" formControlName="input" spellcheck="on" rows="{{model.rowCount}}" sqAutofocus *ngIf="!!model.rowCount">
60
- </textarea>
61
- </div>
62
- </sq-modal>
63
- </form>
64
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: BsModalModule }, { kind: "component", type: i4.BsModal, selector: "sq-modal", inputs: ["title", "buttons", "showHeader", "showFooter", "isProcessingState"] }, { kind: "ngmodule", type: ValidationModule }, { kind: "directive", type: i5.ValidationDirective, selector: "[sqValidation]", inputs: ["sqValidation"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IntlModule }, { kind: "pipe", type: i6.MessagePipe, name: "sqMessage" }] });
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ChatPrompt, decorators: [{
66
- type: Component,
67
- args: [{
68
- selector: "sq-chat-prompt",
69
- template: `
70
- <form name="prompt" novalidate [formGroup]="form">
71
- <sq-modal [title]="title" [buttons]="buttons">
72
- <div class="mb-3 sq-form-group">
73
- <label class="form-label" for="input">{{model.message | sqMessage:model.messageParams}}</label>
74
- <input [sqValidation]="form" type="text" class="form-control" id="input" formControlName="input" spellcheck="off" sqAutofocus *ngIf="!model.rowCount">
75
- <textarea [sqValidation]="form" type="text" class="form-control" id="input" formControlName="input" spellcheck="on" rows="{{model.rowCount}}" sqAutofocus *ngIf="!!model.rowCount">
76
- </textarea>
77
- </div>
78
- </sq-modal>
79
- </form>
80
- `,
81
- standalone: true,
82
- imports: [CommonModule, BsModalModule, ValidationModule, ReactiveFormsModule, IntlModule],
83
- }]
84
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
85
- type: Inject,
86
- args: [MODAL_MODEL]
87
- }] }, { type: i1.ModalRef }, { type: i2.UntypedFormBuilder }]; } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3Byb21wdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQXNCLFVBQVUsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RyxPQUFPLEVBQUUsV0FBVyxFQUEyQixXQUFXLEVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFtQmhELE1BQU0sT0FBTyxVQUFVO0lBTW5CLFlBQ2dDLEtBQW9CLEVBQ3RDLFFBQWtCLEVBQ2xCLFdBQStCO1FBRmIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUN0QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLElBQUksV0FBVyxDQUFDO2dCQUNaLE1BQU0seUJBQWdCO2dCQUN0QixPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDeEIsQ0FBQztZQUNGLElBQUksV0FBVyxDQUFDO2dCQUNaLE1BQU0sNkJBQW9CO2FBQzdCLENBQUM7U0FDSCxDQUFDO0lBQ1IsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQzNCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFDckQsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUM7SUFDMUUsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzVHLENBQUM7O3VHQTNDUSxVQUFVLGtCQU9QLFdBQVc7MkZBUGQsVUFBVSwwRUFmVDs7Ozs7Ozs7Ozs7S0FXVCwyREFFUyxZQUFZLGtJQUFFLGFBQWEsNEtBQUUsZ0JBQWdCLHlJQUFFLG1CQUFtQiw0OEJBQUUsVUFBVTsyRkFFL0UsVUFBVTtrQkFqQnRCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFOzs7Ozs7Ozs7OztLQVdUO29CQUNELFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQztpQkFDNUY7OzBCQVFRLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTU9EQUxfTU9ERUwsIFByb21wdE9wdGlvbnMsIE1vZGFsUmVmLCBNb2RhbEJ1dHRvbiwgTW9kYWxSZXN1bHQgfSBmcm9tIFwiQHNpbmVxdWEvY29yZS9tb2RhbFwiO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICdAc2luZXF1YS9jb3JlL2Jhc2UnO1xuaW1wb3J0IHsgQnNNb2RhbE1vZHVsZSB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL21vZGFsXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTW9kdWxlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgSW50bE1vZHVsZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL2ludGxcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwic3EtY2hhdC1wcm9tcHRcIixcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8Zm9ybSBuYW1lPVwicHJvbXB0XCIgbm92YWxpZGF0ZSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgICAgIDxzcS1tb2RhbCBbdGl0bGVdPVwidGl0bGVcIiBbYnV0dG9uc109XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgc3EtZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiaW5wdXRcIj57e21vZGVsLm1lc3NhZ2UgfCBzcU1lc3NhZ2U6bW9kZWwubWVzc2FnZVBhcmFtc319PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtzcVZhbGlkYXRpb25dPVwiZm9ybVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5wdXRcIiBzcGVsbGNoZWNrPVwib2ZmXCIgc3FBdXRvZm9jdXMgKm5nSWY9XCIhbW9kZWwucm93Q291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIFtzcVZhbGlkYXRpb25dPVwiZm9ybVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5wdXRcIiBzcGVsbGNoZWNrPVwib25cIiByb3dzPVwie3ttb2RlbC5yb3dDb3VudH19XCIgc3FBdXRvZm9jdXMgKm5nSWY9XCIhIW1vZGVsLnJvd0NvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NxLW1vZGFsPlxuICAgICAgICA8L2Zvcm0+XG4gICAgYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJzTW9kYWxNb2R1bGUsIFZhbGlkYXRpb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEludGxNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0UHJvbXB0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGlucHV0Q29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gICAgZm9ybUNoYW5nZXM6IFN1YnNjcmlwdGlvbjtcbiAgICBkZWZhdWx0QnV0dG9uczogTW9kYWxCdXR0b25bXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KE1PREFMX01PREVMKSBwdWJsaWMgbW9kZWw6IFByb21wdE9wdGlvbnMsXG4gICAgICAgIHByb3RlY3RlZCBtb2RhbFJlZjogTW9kYWxSZWYsXG4gICAgICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0QnV0dG9ucyA9IFtcbiAgICAgICAgICAgIG5ldyBNb2RhbEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgcmVzdWx0OiBNb2RhbFJlc3VsdC5PSyxcbiAgICAgICAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHRoaXMuZm9ybVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kYWxCdXR0b24oe1xuICAgICAgICAgICAgICAgIHJlc3VsdDogTW9kYWxSZXN1bHQuQ2FuY2VsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF07XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5wdXRDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLm1vZGVsLm91dHB1dCwgdGhpcy5tb2RlbC52YWxpZGF0b3JzIHx8IFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLmlucHV0Q29udHJvbFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtQ2hhbmdlcyA9IFV0aWxzLnN1YnNjcmliZSh0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLFxuICAgICAgICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5vdXRwdXQgPSB0aGlzLmlucHV0Q29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmZvcm1DaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnRpdGxlID8gdGhpcy5tb2RlbC50aXRsZSA6IFwibXNnI21vZGFsLnByb21wdC50aXRsZVwiO1xuICAgIH1cblxuICAgIGdldCBidXR0b25zKCk6IE1vZGFsQnV0dG9uW10ge1xuICAgICAgICByZXR1cm4gKHRoaXMubW9kZWwuYnV0dG9ucyAmJiB0aGlzLm1vZGVsLmJ1dHRvbnMubGVuZ3RoID4gMCkgPyB0aGlzLm1vZGVsLmJ1dHRvbnMgOiB0aGlzLmRlZmF1bHRCdXR0b25zO1xuICAgIH1cblxufVxuIl19