@arsedizioni/ars-utils 18.1.62 → 18.1.64

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 (61) hide show
  1. package/core/definitions.d.ts +7 -7
  2. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +3 -3
  3. package/esm2022/clipper.ui/ui/document/document.component.mjs +3 -3
  4. package/esm2022/clipper.ui/ui/last-15-days/last-15-days.component.mjs +3 -3
  5. package/esm2022/clipper.ui/ui/references/references.component.mjs +3 -3
  6. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +3 -3
  7. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +3 -3
  8. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +3 -3
  9. package/esm2022/core/definitions.mjs +1 -1
  10. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +3 -3
  11. package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +15 -15
  12. package/esm2022/support.common/common/services/support.service.mjs +30 -29
  13. package/esm2022/support.common/common/support.mjs +1 -1
  14. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +46 -51
  15. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +73 -74
  16. package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +24 -24
  17. package/esm2022/ui/ui/definitions.mjs +1 -1
  18. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
  19. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
  20. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
  21. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
  22. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
  23. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
  24. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
  25. package/esm2022/ui.application/ui/definitions.mjs +1 -1
  26. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
  27. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
  28. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
  29. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
  30. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
  31. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
  32. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +3 -3
  33. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
  34. package/esm2022/ui.application/ui/filters.mjs +2 -1
  35. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +14 -14
  36. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  37. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  38. package/fesm2022/arsedizioni-ars-utils-help.mjs +2 -2
  39. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  40. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +41 -40
  41. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  42. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +108 -112
  43. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
  44. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +23 -23
  45. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
  46. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +19 -18
  47. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  48. package/fesm2022/arsedizioni-ars-utils-ui.mjs +12 -12
  49. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  50. package/package.json +7 -7
  51. package/styles/ui.scss +36 -4
  52. package/support.common/common/interceptors/auth.interceptor.d.ts +2 -5
  53. package/support.common/common/services/support.service.d.ts +4 -6
  54. package/support.common/common/support.d.ts +6 -6
  55. package/support.ui/ui/notifications-browser/notification/notification.component.d.ts +13 -12
  56. package/support.ui/ui/notifications-browser/notifications-browser.component.d.ts +19 -23
  57. package/tinymce/full-screen-editor/full-screen-editor.component.d.ts +11 -11
  58. package/ui/ui/definitions.d.ts +3 -3
  59. package/ui.application/ui/definitions.d.ts +10 -10
  60. package/ui.application/ui/dialogs/send-to/send-to-dialog.component.d.ts +5 -5
  61. package/ui.application/ui/filters.d.ts +17 -17
@@ -1,12 +1,10 @@
1
- import * as i1 from '@angular/common/http';
2
- import { HttpHeaders, HTTP_INTERCEPTORS } from '@angular/common/http';
1
+ import { HttpClient, HttpHeaders, HTTP_INTERCEPTORS } from '@angular/common/http';
3
2
  import * as i0 from '@angular/core';
4
- import { Injectable, NgModule } from '@angular/core';
3
+ import { inject, Injectable, NgModule } from '@angular/core';
5
4
  import { timer, EMPTY, throwError, of, catchError as catchError$1 } from 'rxjs';
6
- import * as i2 from '@arsedizioni/ars-utils/core';
7
- import { SystemUtils } from '@arsedizioni/ars-utils/core';
5
+ import { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';
8
6
  import { switchMap, shareReplay, catchError, map } from 'rxjs/operators';
9
- import * as i2$1 from '@arsedizioni/ars-utils/ui';
7
+ import { DialogService } from '@arsedizioni/ars-utils/ui';
10
8
 
11
9
  const SupportMessages = {
12
10
  /**
@@ -22,6 +20,21 @@ const SupportMessages = {
22
20
  };
23
21
 
24
22
  class SupportService {
23
+ constructor() {
24
+ this.REFRESH_INTERVAL = 60000 * 50; //50 min
25
+ this.httpClient = inject(HttpClient);
26
+ this.broadcastService = inject(BroadcastService);
27
+ this.refreshing = false;
28
+ this.tokenRefreshTimer = null;
29
+ this.tokenRefreshTimerSubscription = null;
30
+ this.messageWatcher = null;
31
+ this._loginInfo = null;
32
+ this._loggedIn = false;
33
+ this._loggingIn = false;
34
+ this._serviceUri = "https://support.arsedizioni.it";
35
+ this._servicePrefix = "";
36
+ this._unreadNotifications = null;
37
+ }
25
38
  get loginInfo() { return this._loginInfo; }
26
39
  ;
27
40
  set loginInfo(value) {
@@ -66,18 +79,6 @@ class SupportService {
66
79
  get unreadNotifications() {
67
80
  return this._unreadNotifications;
68
81
  }
69
- constructor(http, $broadcast) {
70
- this.http = http;
71
- this.$broadcast = $broadcast;
72
- this.REFRESH_INTERVAL = 60000 * 50; //50 min
73
- this.refreshing = false;
74
- this._loginInfo = null;
75
- this._loggedIn = false;
76
- this._loggingIn = false;
77
- this._serviceUri = "https://support.arsedizioni.it";
78
- this._servicePrefix = "";
79
- this._unreadNotifications = null;
80
- }
81
82
  ngOnDestroy() {
82
83
  // Clean-up
83
84
  if (this.tokenRefreshTimerSubscription)
@@ -103,7 +104,7 @@ class SupportService {
103
104
  this._products = products;
104
105
  // React to message broadcasting
105
106
  if (!this.messageWatcher) {
106
- this.messageWatcher = this.$broadcast.getMessage().subscribe((message) => {
107
+ this.messageWatcher = this.broadcastService.getMessage().subscribe((message) => {
107
108
  if (message.id === SupportMessages.LOGIN_CHANGED) {
108
109
  setTimeout(() => {
109
110
  this.login(message.data.email, message.data.oauth, message.data.oauthAccessToken).subscribe((r) => {
@@ -192,7 +193,7 @@ class SupportService {
192
193
  login(email = null, oauth = null, oauthAccessToken = null) {
193
194
  this.clear();
194
195
  this.loggingIn = true;
195
- return this.http
196
+ return this.httpClient
196
197
  .post(this._serviceUri + '/login', {
197
198
  user: oauth > 0 ? null : email,
198
199
  clientId: localStorage.getItem("support_client_id"),
@@ -235,7 +236,7 @@ class SupportService {
235
236
  * Perform logout
236
237
  */
237
238
  logout() {
238
- return this.http
239
+ return this.httpClient
239
240
  .post(this._serviceUri + '/logout', {}).pipe(map((r) => { return r; }), catchError((_e) => {
240
241
  this.clear();
241
242
  return of([]);
@@ -268,7 +269,7 @@ class SupportService {
268
269
  * Perform token refresh
269
270
  */
270
271
  refresh() {
271
- return this.http.post(this._serviceUri + '/refresh', {}).pipe(map((r) => {
272
+ return this.httpClient.post(this._serviceUri + '/refresh', {}).pipe(map((r) => {
272
273
  // Update token
273
274
  this.setToken(r.value.token);
274
275
  }));
@@ -289,7 +290,7 @@ class SupportService {
289
290
  * Count unread notifications
290
291
  */
291
292
  countUnreadNotifications() {
292
- this.http.get(this._serviceUri + '/notifications/count-unread/?products=' + (this.products ?? 0) + "&modules=" + (this.productModules ?? 0)).subscribe((r) => {
293
+ this.httpClient.get(this._serviceUri + '/notifications/count-unread/?products=' + (this.products ?? 0) + "&modules=" + (this.productModules ?? 0)).subscribe((r) => {
293
294
  if (r.success) {
294
295
  this._unreadNotifications = r.value > 0 ? r.value : null;
295
296
  }
@@ -302,14 +303,14 @@ class SupportService {
302
303
  queryNotifications(params) {
303
304
  params.products = this.products ?? 0;
304
305
  params.productModules = this.productModules ?? 0;
305
- return this.http.post(this._serviceUri + '/notifications', params);
306
+ return this.httpClient.post(this._serviceUri + '/notifications', params);
306
307
  }
307
308
  /**
308
309
  * Retrieve a notification
309
310
  * @param id: the notification id
310
311
  */
311
312
  getNotification(id) {
312
- return this.http.get(this._serviceUri +
313
+ return this.httpClient.get(this._serviceUri +
313
314
  '/notifications/' +
314
315
  id);
315
316
  }
@@ -318,16 +319,16 @@ class SupportService {
318
319
  * @param ids: the array of notification's ids to set as read
319
320
  */
320
321
  markNotifications(params) {
321
- return this.http.post(this._serviceUri + '/notifications/mark', params);
322
+ return this.httpClient.post(this._serviceUri + '/notifications/mark', params);
322
323
  }
323
324
  /**
324
325
  * Download a notification document
325
326
  * @param documentId : the notification document id
326
327
  */
327
328
  dowloadNotificationDocument(documentId) {
328
- return this.http.get(this._serviceUri + '/documents/download/' + documentId, { responseType: 'blob' });
329
+ return this.httpClient.get(this._serviceUri + '/documents/download/' + documentId, { responseType: 'blob' });
329
330
  }
330
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportService, deps: [{ token: i1.HttpClient }, { token: i2.BroadcastService }], target: i0.ɵɵFactoryTarget.Injectable }); }
331
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
331
332
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportService, providedIn: 'root' }); }
332
333
  }
333
334
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportService, decorators: [{
@@ -335,19 +336,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
335
336
  args: [{
336
337
  providedIn: 'root',
337
338
  }]
338
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.BroadcastService }] });
339
+ }] });
339
340
 
340
341
  class SupportJwtAuthInterceptor {
341
- constructor($support, $dialog) {
342
- this.$support = $support;
343
- this.$dialog = $dialog;
342
+ constructor() {
343
+ this.supportService = inject(SupportService);
344
+ this.dialogService = inject(DialogService);
344
345
  }
345
346
  intercept(request, next) {
346
347
  // Add width-credentials
347
348
  request = request.clone({ withCredentials: true });
348
349
  return next.handle(this.addTokenToRequest(request))
349
350
  .pipe(catchError$1((err) => {
350
- if (request.url.startsWith(this.$support.serviceUri)) {
351
+ if (request.url.startsWith(this.supportService.serviceUri)) {
351
352
  // Get the message
352
353
  let message = err.error?.message || err.message || "Impossibile eseguire l'operazione richiesta.";
353
354
  let invalidSession = err.status === 401;
@@ -369,10 +370,10 @@ class SupportJwtAuthInterceptor {
369
370
  // Display message
370
371
  if (message) {
371
372
  setTimeout(() => {
372
- this.$dialog.error(message, null, 'Errore in ARS Support', 'Ok', 500, invalidSession ? 5000 : null).afterClosed().subscribe(() => {
373
+ this.dialogService.error(message, null, 'Errore in ARS Support', 'Ok', 500, invalidSession ? 5000 : null).afterClosed().subscribe(() => {
373
374
  if (invalidSession) {
374
- if (this.$support.loggedIn) {
375
- this.$support.reset();
375
+ if (this.supportService.loggedIn) {
376
+ this.supportService.reset();
376
377
  }
377
378
  }
378
379
  });
@@ -388,9 +389,9 @@ class SupportJwtAuthInterceptor {
388
389
  * @param token: the token or null to use curre3nt
389
390
  */
390
391
  addTokenToRequest(request, token = null) {
391
- if (request.url.startsWith(this.$support.serviceUri)) {
392
+ if (request.url.startsWith(this.supportService.serviceUri)) {
392
393
  if (!token)
393
- token = this.$support.getToken();
394
+ token = this.supportService.getToken();
394
395
  if (token) {
395
396
  return request.clone({
396
397
  setHeaders: {
@@ -402,12 +403,12 @@ class SupportJwtAuthInterceptor {
402
403
  }
403
404
  return request;
404
405
  }
405
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportJwtAuthInterceptor, deps: [{ token: SupportService }, { token: i2$1.DialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
406
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportJwtAuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
406
407
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportJwtAuthInterceptor }); }
407
408
  }
408
409
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportJwtAuthInterceptor, decorators: [{
409
410
  type: Injectable
410
- }], ctorParameters: () => [{ type: SupportService }, { type: i2$1.DialogService }] });
411
+ }] });
411
412
 
412
413
  class ArsSupportCommonModule {
413
414
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ArsSupportCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-support.common.mjs","sources":["../../../projects/ars-utils/support.common/common/messages.ts","../../../projects/ars-utils/support.common/common/services/support.service.ts","../../../projects/ars-utils/support.common/common/interceptors/auth.interceptor.ts","../../../projects/ars-utils/support.common/common/common.module.ts","../../../projects/ars-utils/support.common/common/support.ts","../../../projects/ars-utils/support.common/public_api.ts","../../../projects/ars-utils/support.common/arsedizioni-ars-utils-support.common.ts"],"sourcesContent":["export const SupportMessages = {\r\n /**\r\n * Messages\r\n */\r\n\r\n // Login\r\n LOGIN_CHANGED: '§support-login-changed',\r\n LOGIN_COMPLETED: '§support-login-completed',\r\n LOGIN_DISCONNECTED: '§support-login-disconnected',\r\n LOGOUT_COMPLETED: '§support-logout-completed',\r\n\r\n // Notifications\r\n NOTIFICATION_READ: '§support-notification-read',\r\n};\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { ApiResult, BroadcastService, LoginInfo, LoginResult, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { EMPTY, Observable, of, Subscription, throwError, timer } from 'rxjs';\r\nimport { catchError, map, shareReplay, switchMap } from 'rxjs/operators';\r\nimport { SupportMessages } from '../messages';\r\nimport { SupportNotificationsSearchParams, SupportProduct, SupportProductModule } from '../support';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SupportService implements OnDestroy {\r\n\r\n private readonly REFRESH_INTERVAL = 60000 * 50; //50 min\r\n\r\n private refreshing: boolean = false;\r\n private tokenRefreshTimer?: Observable<number | void> | null;\r\n private tokenRefreshTimerSubscription?: Subscription;\r\n private messageWatcher: Subscription;\r\n\r\n\r\n\r\n private _loginInfo: LoginInfo = null;\r\n get loginInfo(): LoginInfo { return this._loginInfo };\r\n set loginInfo(value: LoginInfo) {\r\n this._loginInfo = value;\r\n }\r\n\r\n private _loggedIn: boolean = false;\r\n get loggedIn(): boolean {\r\n return this._loggedIn;\r\n }\r\n set loggedIn(value: boolean) {\r\n this._loggedIn = value;\r\n }\r\n\r\n private _loggingIn: boolean = false;\r\n get loggingIn(): boolean {\r\n return this._loggingIn;\r\n }\r\n set loggingIn(value: boolean) {\r\n this._loggingIn = value;\r\n }\r\n\r\n private _serviceUri: string = \"https://support.arsedizioni.it\"\r\n get serviceUri(): string {\r\n return this._serviceUri;\r\n }\r\n set serviceUri(value: string) {\r\n this._serviceUri = value;\r\n }\r\n private _servicePrefix: string = \"\"\r\n get servicePrefix(): string {\r\n return this._servicePrefix;\r\n }\r\n set servicePrefix(value: string) {\r\n this._servicePrefix = value;\r\n }\r\n\r\n private _products: SupportProduct;\r\n get products(): SupportProduct {\r\n return this._products;\r\n }\r\n set products(value: SupportProduct) {\r\n this._products = value;\r\n }\r\n\r\n private _productModules: SupportProductModule;\r\n get productModules(): SupportProductModule {\r\n return this._productModules;\r\n }\r\n set productModules(value: SupportProductModule) {\r\n this._productModules = value;\r\n }\r\n\r\n private _unreadNotifications: number = null;\r\n get unreadNotifications(): number {\r\n return this._unreadNotifications;\r\n }\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private $broadcast: BroadcastService) {\r\n\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n // Clean-up\r\n if (this.tokenRefreshTimerSubscription)\r\n this.tokenRefreshTimerSubscription.unsubscribe();\r\n if (this.messageWatcher) this.messageWatcher.unsubscribe();\r\n }\r\n\r\n /**\r\n * Initialize service\r\n * @param serviceUri : the service uri\r\n * @param servicePrefix : the service prefix used to manage local storage \r\n * @param products: the supported products\r\n */\r\n initialize(\r\n serviceUri: string = null,\r\n servicePrefix: string = null,\r\n products: number = 0) {\r\n\r\n // Create unique client id\r\n if (!localStorage.getItem('support_client_id'))\r\n localStorage.setItem('support_client_id', SystemUtils.generateUUID());\r\n\r\n // Initialize uris\r\n if (serviceUri)\r\n this._serviceUri = serviceUri;\r\n this._servicePrefix = servicePrefix;\r\n if (products)\r\n this._products = products;\r\n\r\n // React to message broadcasting\r\n if (!this.messageWatcher) {\r\n this.messageWatcher = this.$broadcast.getMessage().subscribe((message: any) => {\r\n if (message.id === SupportMessages.LOGIN_CHANGED) {\r\n setTimeout(() => {\r\n this.login(message.data.email, message.data.oauth, message.data.oauthAccessToken).subscribe((r: any) => {\r\n if (r.success) {\r\n this.countUnreadNotifications();\r\n }\r\n });\r\n }, 500);\r\n } else if (message.id === SupportMessages.LOGOUT_COMPLETED ||\r\n message.id === SupportMessages.LOGIN_DISCONNECTED) {\r\n if (!this.loggedIn) {\r\n this.clear();\r\n } else {\r\n this.logout().subscribe({\r\n complete: () => {\r\n this.clear();\r\n }\r\n });\r\n }\r\n } else if (message.id === SupportMessages.NOTIFICATION_READ) {\r\n this.countUnreadNotifications();\r\n }\r\n });\r\n }\r\n\r\n // Eveluate current session storage in case of page refresh (F5)\r\n if (!this.loggedIn && this.getToken()) {\r\n // Auto login\r\n this.loggedIn = true;\r\n\r\n // Start refresh timer\r\n this.enableTokenRefresh();\r\n }\r\n }\r\n\r\n /**\r\n * Set JWT token\r\n * @param token : The token to store\r\n */\r\n private setToken(token: string) {\r\n sessionStorage.setItem('support_jwt', token);\r\n if (token) {\r\n this.enableTokenRefresh();\r\n }\r\n }\r\n\r\n /**\r\n * Enable JWT token auto refresh\r\n */\r\n private enableTokenRefresh() {\r\n if (!this.tokenRefreshTimerSubscription) {\r\n this.tokenRefreshTimer =\r\n timer(this.REFRESH_INTERVAL, this.REFRESH_INTERVAL)\r\n .pipe(\r\n switchMap(() => {\r\n if (this.refreshing || !this.loggedIn) return EMPTY;\r\n this.refreshing = true;\r\n this.refresh().subscribe(\r\n {\r\n error: () => { this.refreshing = false; },\r\n complete: () => { this.refreshing = false; }\r\n });\r\n return EMPTY;\r\n }),\r\n shareReplay(1));\r\n this.tokenRefreshTimerSubscription = this.tokenRefreshTimer.subscribe();\r\n }\r\n }\r\n\r\n /**\r\n * Return current JWT token\r\n * @returns: the string JWT token or string empty if none\r\n */\r\n getToken(): string {\r\n let token = sessionStorage.getItem('support_jwt');\r\n if (token) {\r\n if (token[0] === '\"') token = token.substring(1, token.length - 1);\r\n return token;\r\n }\r\n return '';\r\n }\r\n\r\n\r\n /**\r\n* Perform login \r\n* @param email: the guest email\r\n* @param oauth: the optional open authentication supported\r\n* @param oauthAccessToken: the optional oauth2 access token\r\n* @returns: the login result\r\n*/\r\n login(email: string | null | undefined = null,\r\n oauth: number | null | undefined = null,\r\n oauthAccessToken: string | null | undefined = null) {\r\n this.clear();\r\n this.loggingIn = true;\r\n return this.http\r\n .post<ApiResult<LoginResult>>(\r\n this._serviceUri + '/login',\r\n {\r\n user: oauth > 0 ? null : email,\r\n clientId: localStorage.getItem(\"support_client_id\"),\r\n OAUTH: oauth\r\n },\r\n {\r\n headers:\r\n !oauth\r\n ? new HttpHeaders()\r\n : new HttpHeaders()\r\n .set(\"Authorization\", oauthAccessToken)\r\n })\r\n .pipe(\r\n catchError((err) => {\r\n this.loggingIn = false;\r\n return throwError(() => err);\r\n }),\r\n map((r: ApiResult<LoginResult>) => {\r\n this.loggingIn = false;\r\n if (r.success) {\r\n this.products = this.products;\r\n this.productModules = this.productModules;\r\n return this.handleLoginResult(r);\r\n }\r\n return r;\r\n })\r\n );\r\n\r\n return null;\r\n }\r\n\r\n\r\n /**\r\n * Handle login result\r\n * @param loginResult : the current login result\r\n * @returns: the final login result\r\n */\r\n private handleLoginResult(\r\n loginResult: ApiResult<LoginResult>\r\n ): ApiResult<LoginResult> {\r\n if (loginResult.success) {\r\n // Store access token\r\n this.setToken(loginResult.value.token);\r\n\r\n this._loginInfo = loginResult.value.context;\r\n this._loggedIn = true;\r\n }\r\n return loginResult;\r\n }\r\n\r\n /**\r\n * Perform logout\r\n */\r\n logout() {\r\n return this.http\r\n .post<any>(this._serviceUri + '/logout', {}).pipe(\r\n map((r: any) => { return r; }),\r\n catchError((_e) => {\r\n this.clear();\r\n return of([]);\r\n }));\r\n\r\n }\r\n\r\n /**\r\n * Reset login refresh timer and logins state\r\n */\r\n reset() {\r\n // Clear subscriptions\r\n if (this.tokenRefreshTimerSubscription) {\r\n this.tokenRefreshTimerSubscription.unsubscribe();\r\n this.tokenRefreshTimerSubscription = null;\r\n }\r\n this.tokenRefreshTimer = null;\r\n\r\n // Clear login info\r\n this._loginInfo = null;\r\n this._loggedIn = false;\r\n }\r\n\r\n /**\r\n * Clear login data\r\n */\r\n clear() {\r\n // Reset login\r\n this.reset();\r\n\r\n // Clear local storage\r\n sessionStorage.removeItem('support_jwt');\r\n }\r\n\r\n /**\r\n * Perform token refresh\r\n */\r\n private refresh() {\r\n return this.http.post<ApiResult<LoginResult>>(\r\n this._serviceUri + '/refresh', {}\r\n ).pipe(map((r: ApiResult<LoginResult>) => {\r\n // Update token\r\n this.setToken(r.value.token);\r\n }));\r\n }\r\n\r\n /**\r\n * Navigate to support service\r\n */\r\n open() {\r\n let uri = this.serviceUri ?? '';\r\n if (uri.endsWith('/api'))\r\n uri = uri.substring(0, uri.length - 4)\r\n window.open(uri);\r\n }\r\n\r\n ////\r\n // NOTIFICATIONS\r\n ////\r\n\r\n /**\r\n * Count unread notifications\r\n */\r\n countUnreadNotifications() {\r\n this.http.get<ApiResult<any>>(\r\n this._serviceUri + '/notifications/count-unread/?products=' + (this.products ?? 0) + \"&modules=\" + (this.productModules ?? 0)\r\n ).subscribe((r: any) => {\r\n if (r.success) {\r\n this._unreadNotifications = r.value > 0 ? r.value : null\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Query notifications\r\n * @param params: query parameters\r\n */\r\n queryNotifications(params: SupportNotificationsSearchParams) {\r\n params.products = this.products ?? 0;\r\n params.productModules = this.productModules ?? 0;\r\n return this.http.post<ApiResult<any>>(\r\n this._serviceUri + '/notifications',\r\n params\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve a notification\r\n * @param id: the notification id\r\n */\r\n getNotification(id: number) {\r\n return this.http.get<ApiResult<any>>(\r\n this._serviceUri +\r\n '/notifications/' +\r\n id\r\n );\r\n }\r\n\r\n /**\r\n * Mark a group of notifications as read\r\n * @param ids: the array of notification's ids to set as read\r\n */\r\n markNotifications(params: any) {\r\n return this.http.post<ApiResult<any>>(\r\n this._serviceUri + '/notifications/mark',\r\n params\r\n );\r\n }\r\n\r\n /**\r\n * Download a notification document\r\n * @param documentId : the notification document id\r\n */\r\n dowloadNotificationDocument(documentId: number) {\r\n return this.http.get(\r\n this._serviceUri + '/documents/download/' + documentId,\r\n { responseType: 'blob' }\r\n );\r\n }\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, catchError, throwError } from 'rxjs';\r\nimport { SupportService } from '../services/support.service';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Injectable()\r\nexport class SupportJwtAuthInterceptor implements HttpInterceptor {\r\n constructor(\r\n private $support: SupportService,\r\n private $dialog: DialogService\r\n ) { }\r\n\r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n // Add width-credentials\r\n request = request.clone({ withCredentials: true });\r\n return next.handle(this.addTokenToRequest(request))\r\n .pipe(\r\n catchError((err: any) => {\r\n if (request.url.startsWith(this.$support.serviceUri)) {\r\n // Get the message\r\n let message = err.error?.message || err.message || \"Impossibile eseguire l'operazione richiesta.\";\r\n let invalidSession = err.status === 401;\r\n switch (err.status) {\r\n case 0:\r\n case 500:\r\n case 502:\r\n case 503:\r\n case 504:\r\n message = null; // No messages\r\n break;\r\n case 403:\r\n message = \"<p>Non hai i permessi necessari per eseguire l'operazione richiesta.</p>\";\r\n break;\r\n default:\r\n message = '<p>' + message.replaceAll('\\r\\n', '</p><p>') + '</p>';\r\n break;\r\n }\r\n // Display message\r\n if (message) {\r\n setTimeout(() => {\r\n this.$dialog.error(message, null, 'Errore in ARS Support', 'Ok', 500, invalidSession ? 5000 : null).afterClosed().subscribe(() => {\r\n if (invalidSession) {\r\n if (this.$support.loggedIn) {\r\n this.$support.reset();\r\n }\r\n }\r\n });\r\n }, 250);\r\n }\r\n }\r\n return throwError(() => err);\r\n }));\r\n }\r\n\r\n\r\n /**\r\n * Add token to request\r\n * @param request : the request\r\n * @param token: the token or null to use curre3nt\r\n */\r\n private addTokenToRequest(\r\n request: HttpRequest<any>,\r\n token: string = null\r\n ): HttpRequest<any> {\r\n if (request.url.startsWith(this.$support.serviceUri)) {\r\n if (!token) token = this.$support.getToken();\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: 'Bearer ' + token,\r\n 'ngsw-bypass': 'ngsw-bypass'\r\n },\r\n });\r\n }\r\n }\r\n return request;\r\n }\r\n\r\n}\r\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { SupportJwtAuthInterceptor as SupportAuthInterceptor } from './interceptors/auth.interceptor';\r\n\r\n@NgModule({\r\n providers: [ \r\n { provide: HTTP_INTERCEPTORS, useClass: SupportAuthInterceptor, multi: true }, \r\n ]\r\n})\r\nexport class ArsSupportCommonModule {}\r\n","\r\nexport interface SupportNotificationsSearchParams {\r\n any?: string,\r\n products?: number,\r\n productModules?: number,\r\n first?: number,\r\n count?: number\r\n}\r\n\r\nexport interface SupportNotificationsInfo {\r\n unread?: number;\r\n}\r\n\r\nexport enum SupportProduct {\r\n Clipper = 1,\r\n Evolution = 1 << 1,\r\n DGInfo = 1 << 2\r\n}\r\n\r\nexport enum SupportProductModule {\r\n EvoFormazione = 1,\r\n EvoDPI = 1 << 1,\r\n EvoSorveglianzaSanitaria = 1 << 2,\r\n EvoRegistroEScadenzario = 1 << 3,\r\n EvoAttrezzatureEImpianti = 1 << 4,\r\n EvoMonitoraggio = 1 << 5,\r\n EvoBollettino = 1 << 6,\r\n DgiADR = 1 << 7,\r\n DgiRID = 1 << 8,\r\n DgiIMDG = 1 << 9,\r\n DgiCLP = 1 << 10,\r\n}\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './common/common.module';\r\nexport * from './common/messages';\r\nexport * from './common/support';\r\nexport * from './common/services/support.service';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["catchError","i1.SupportService","i2","SupportAuthInterceptor"],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-support.common.mjs","sources":["../../../projects/ars-utils/support.common/common/messages.ts","../../../projects/ars-utils/support.common/common/services/support.service.ts","../../../projects/ars-utils/support.common/common/interceptors/auth.interceptor.ts","../../../projects/ars-utils/support.common/common/common.module.ts","../../../projects/ars-utils/support.common/common/support.ts","../../../projects/ars-utils/support.common/public_api.ts","../../../projects/ars-utils/support.common/arsedizioni-ars-utils-support.common.ts"],"sourcesContent":["export const SupportMessages = {\r\n /**\r\n * Messages\r\n */\r\n\r\n // Login\r\n LOGIN_CHANGED: '§support-login-changed',\r\n LOGIN_COMPLETED: '§support-login-completed',\r\n LOGIN_DISCONNECTED: '§support-login-disconnected',\r\n LOGOUT_COMPLETED: '§support-logout-completed',\r\n\r\n // Notifications\r\n NOTIFICATION_READ: '§support-notification-read',\r\n};\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport { ApiResult, BroadcastService, LoginInfo, LoginResult, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { EMPTY, Observable, of, Subscription, throwError, timer } from 'rxjs';\r\nimport { catchError, map, shareReplay, switchMap } from 'rxjs/operators';\r\nimport { SupportMessages } from '../messages';\r\nimport { SupportNotificationsSearchParams, SupportProduct, SupportProductModule } from '../support';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SupportService implements OnDestroy {\r\n\r\n private readonly REFRESH_INTERVAL = 60000 * 50; //50 min\r\n\r\n private httpClient = inject(HttpClient);\r\n private broadcastService = inject(BroadcastService);\r\n\r\n private refreshing: boolean = false;\r\n private tokenRefreshTimer?: Observable<number | void> | null = null;\r\n private tokenRefreshTimerSubscription?: Subscription | null = null;\r\n private messageWatcher?: Subscription | null = null;\r\n\r\n\r\n\r\n private _loginInfo: LoginInfo = null;\r\n get loginInfo(): LoginInfo { return this._loginInfo };\r\n set loginInfo(value: LoginInfo) {\r\n this._loginInfo = value;\r\n }\r\n\r\n private _loggedIn: boolean = false;\r\n get loggedIn(): boolean {\r\n return this._loggedIn;\r\n }\r\n set loggedIn(value: boolean) {\r\n this._loggedIn = value;\r\n }\r\n\r\n private _loggingIn: boolean = false;\r\n get loggingIn(): boolean {\r\n return this._loggingIn;\r\n }\r\n set loggingIn(value: boolean) {\r\n this._loggingIn = value;\r\n }\r\n\r\n private _serviceUri: string = \"https://support.arsedizioni.it\"\r\n get serviceUri(): string {\r\n return this._serviceUri;\r\n }\r\n set serviceUri(value: string) {\r\n this._serviceUri = value;\r\n }\r\n private _servicePrefix: string = \"\"\r\n get servicePrefix(): string {\r\n return this._servicePrefix;\r\n }\r\n set servicePrefix(value: string) {\r\n this._servicePrefix = value;\r\n }\r\n\r\n private _products: SupportProduct;\r\n get products(): SupportProduct {\r\n return this._products;\r\n }\r\n set products(value: SupportProduct) {\r\n this._products = value;\r\n }\r\n\r\n private _productModules: SupportProductModule;\r\n get productModules(): SupportProductModule {\r\n return this._productModules;\r\n }\r\n set productModules(value: SupportProductModule) {\r\n this._productModules = value;\r\n }\r\n\r\n private _unreadNotifications: number = null;\r\n get unreadNotifications(): number {\r\n return this._unreadNotifications;\r\n }\r\n\r\n ngOnDestroy() {\r\n // Clean-up\r\n if (this.tokenRefreshTimerSubscription)\r\n this.tokenRefreshTimerSubscription.unsubscribe();\r\n if (this.messageWatcher) this.messageWatcher.unsubscribe();\r\n }\r\n\r\n /**\r\n * Initialize service\r\n * @param serviceUri : the service uri\r\n * @param servicePrefix : the service prefix used to manage local storage \r\n * @param products: the supported products\r\n */\r\n initialize(\r\n serviceUri: string = null,\r\n servicePrefix: string = null,\r\n products: number = 0) {\r\n\r\n // Create unique client id\r\n if (!localStorage.getItem('support_client_id'))\r\n localStorage.setItem('support_client_id', SystemUtils.generateUUID());\r\n\r\n // Initialize uris\r\n if (serviceUri)\r\n this._serviceUri = serviceUri;\r\n this._servicePrefix = servicePrefix;\r\n if (products)\r\n this._products = products;\r\n\r\n // React to message broadcasting\r\n if (!this.messageWatcher) {\r\n this.messageWatcher = this.broadcastService.getMessage().subscribe((message: any) => {\r\n if (message.id === SupportMessages.LOGIN_CHANGED) {\r\n setTimeout(() => {\r\n this.login(message.data.email, message.data.oauth, message.data.oauthAccessToken).subscribe((r: any) => {\r\n if (r.success) {\r\n this.countUnreadNotifications();\r\n }\r\n });\r\n }, 500);\r\n } else if (message.id === SupportMessages.LOGOUT_COMPLETED ||\r\n message.id === SupportMessages.LOGIN_DISCONNECTED) {\r\n if (!this.loggedIn) {\r\n this.clear();\r\n } else {\r\n this.logout().subscribe({\r\n complete: () => {\r\n this.clear();\r\n }\r\n });\r\n }\r\n } else if (message.id === SupportMessages.NOTIFICATION_READ) {\r\n this.countUnreadNotifications();\r\n }\r\n });\r\n }\r\n\r\n // Eveluate current session storage in case of page refresh (F5)\r\n if (!this.loggedIn && this.getToken()) {\r\n // Auto login\r\n this.loggedIn = true;\r\n\r\n // Start refresh timer\r\n this.enableTokenRefresh();\r\n }\r\n }\r\n\r\n /**\r\n * Set JWT token\r\n * @param token : The token to store\r\n */\r\n private setToken(token: string) {\r\n sessionStorage.setItem('support_jwt', token);\r\n if (token) {\r\n this.enableTokenRefresh();\r\n }\r\n }\r\n\r\n /**\r\n * Enable JWT token auto refresh\r\n */\r\n private enableTokenRefresh() {\r\n if (!this.tokenRefreshTimerSubscription) {\r\n this.tokenRefreshTimer =\r\n timer(this.REFRESH_INTERVAL, this.REFRESH_INTERVAL)\r\n .pipe(\r\n switchMap(() => {\r\n if (this.refreshing || !this.loggedIn) return EMPTY;\r\n this.refreshing = true;\r\n this.refresh().subscribe(\r\n {\r\n error: () => { this.refreshing = false; },\r\n complete: () => { this.refreshing = false; }\r\n });\r\n return EMPTY;\r\n }),\r\n shareReplay(1));\r\n this.tokenRefreshTimerSubscription = this.tokenRefreshTimer.subscribe();\r\n }\r\n }\r\n\r\n /**\r\n * Return current JWT token\r\n * @returns: the string JWT token or string empty if none\r\n */\r\n getToken(): string {\r\n let token = sessionStorage.getItem('support_jwt');\r\n if (token) {\r\n if (token[0] === '\"') token = token.substring(1, token.length - 1);\r\n return token;\r\n }\r\n return '';\r\n }\r\n\r\n\r\n /**\r\n* Perform login \r\n* @param email: the guest email\r\n* @param oauth: the optional open authentication supported\r\n* @param oauthAccessToken: the optional oauth2 access token\r\n* @returns: the login result\r\n*/\r\n login(email: string | null | undefined = null,\r\n oauth: number | null | undefined = null,\r\n oauthAccessToken: string | null | undefined = null) {\r\n this.clear();\r\n this.loggingIn = true;\r\n return this.httpClient\r\n .post<ApiResult<LoginResult>>(\r\n this._serviceUri + '/login',\r\n {\r\n user: oauth > 0 ? null : email,\r\n clientId: localStorage.getItem(\"support_client_id\"),\r\n OAUTH: oauth\r\n },\r\n {\r\n headers:\r\n !oauth\r\n ? new HttpHeaders()\r\n : new HttpHeaders()\r\n .set(\"Authorization\", oauthAccessToken)\r\n })\r\n .pipe(\r\n catchError((err) => {\r\n this.loggingIn = false;\r\n return throwError(() => err);\r\n }),\r\n map((r: ApiResult<LoginResult>) => {\r\n this.loggingIn = false;\r\n if (r.success) {\r\n this.products = this.products;\r\n this.productModules = this.productModules;\r\n return this.handleLoginResult(r);\r\n }\r\n return r;\r\n })\r\n );\r\n\r\n return null;\r\n }\r\n\r\n\r\n /**\r\n * Handle login result\r\n * @param loginResult : the current login result\r\n * @returns: the final login result\r\n */\r\n private handleLoginResult(\r\n loginResult: ApiResult<LoginResult>\r\n ): ApiResult<LoginResult> {\r\n if (loginResult.success) {\r\n // Store access token\r\n this.setToken(loginResult.value.token);\r\n\r\n this._loginInfo = loginResult.value.context;\r\n this._loggedIn = true;\r\n }\r\n return loginResult;\r\n }\r\n\r\n /**\r\n * Perform logout\r\n */\r\n logout() {\r\n return this.httpClient\r\n .post<any>(this._serviceUri + '/logout', {}).pipe(\r\n map((r: any) => { return r; }),\r\n catchError((_e) => {\r\n this.clear();\r\n return of([]);\r\n }));\r\n\r\n }\r\n\r\n /**\r\n * Reset login refresh timer and logins state\r\n */\r\n reset() {\r\n // Clear subscriptions\r\n if (this.tokenRefreshTimerSubscription) {\r\n this.tokenRefreshTimerSubscription.unsubscribe();\r\n this.tokenRefreshTimerSubscription = null;\r\n }\r\n this.tokenRefreshTimer = null;\r\n\r\n // Clear login info\r\n this._loginInfo = null;\r\n this._loggedIn = false;\r\n }\r\n\r\n /**\r\n * Clear login data\r\n */\r\n clear() {\r\n // Reset login\r\n this.reset();\r\n\r\n // Clear local storage\r\n sessionStorage.removeItem('support_jwt');\r\n }\r\n\r\n /**\r\n * Perform token refresh\r\n */\r\n private refresh() {\r\n return this.httpClient.post<ApiResult<LoginResult>>(\r\n this._serviceUri + '/refresh', {}\r\n ).pipe(map((r: ApiResult<LoginResult>) => {\r\n // Update token\r\n this.setToken(r.value.token);\r\n }));\r\n }\r\n\r\n /**\r\n * Navigate to support service\r\n */\r\n open() {\r\n let uri = this.serviceUri ?? '';\r\n if (uri.endsWith('/api'))\r\n uri = uri.substring(0, uri.length - 4)\r\n window.open(uri);\r\n }\r\n\r\n ////\r\n // NOTIFICATIONS\r\n ////\r\n\r\n /**\r\n * Count unread notifications\r\n */\r\n countUnreadNotifications() {\r\n this.httpClient.get<ApiResult<any>>(\r\n this._serviceUri + '/notifications/count-unread/?products=' + (this.products ?? 0) + \"&modules=\" + (this.productModules ?? 0)\r\n ).subscribe((r: any) => {\r\n if (r.success) {\r\n this._unreadNotifications = r.value > 0 ? r.value : null\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Query notifications\r\n * @param params: query parameters\r\n */\r\n queryNotifications(params: SupportNotificationsSearchParams) {\r\n params.products = this.products ?? 0;\r\n params.productModules = this.productModules ?? 0;\r\n return this.httpClient.post<ApiResult<any>>(\r\n this._serviceUri + '/notifications',\r\n params\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve a notification\r\n * @param id: the notification id\r\n */\r\n getNotification(id: number) {\r\n return this.httpClient.get<ApiResult<any>>(\r\n this._serviceUri +\r\n '/notifications/' +\r\n id\r\n );\r\n }\r\n\r\n /**\r\n * Mark a group of notifications as read\r\n * @param ids: the array of notification's ids to set as read\r\n */\r\n markNotifications(params: any) {\r\n return this.httpClient.post<ApiResult<any>>(\r\n this._serviceUri + '/notifications/mark',\r\n params\r\n );\r\n }\r\n\r\n /**\r\n * Download a notification document\r\n * @param documentId : the notification document id\r\n */\r\n dowloadNotificationDocument(documentId: number) {\r\n return this.httpClient.get(\r\n this._serviceUri + '/documents/download/' + documentId,\r\n { responseType: 'blob' }\r\n );\r\n }\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable, catchError, throwError } from 'rxjs';\r\nimport { SupportService } from '../services/support.service';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Injectable()\r\nexport class SupportJwtAuthInterceptor implements HttpInterceptor {\r\n\r\n private supportService = inject(SupportService);\r\n private dialogService = inject(DialogService);\r\n \r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n // Add width-credentials\r\n request = request.clone({ withCredentials: true });\r\n return next.handle(this.addTokenToRequest(request))\r\n .pipe(\r\n catchError((err: any) => {\r\n if (request.url.startsWith(this.supportService.serviceUri)) {\r\n // Get the message\r\n let message = err.error?.message || err.message || \"Impossibile eseguire l'operazione richiesta.\";\r\n let invalidSession = err.status === 401;\r\n switch (err.status) {\r\n case 0:\r\n case 500:\r\n case 502:\r\n case 503:\r\n case 504:\r\n message = null; // No messages\r\n break;\r\n case 403:\r\n message = \"<p>Non hai i permessi necessari per eseguire l'operazione richiesta.</p>\";\r\n break;\r\n default:\r\n message = '<p>' + message.replaceAll('\\r\\n', '</p><p>') + '</p>';\r\n break;\r\n }\r\n // Display message\r\n if (message) {\r\n setTimeout(() => {\r\n this.dialogService.error(message, null, 'Errore in ARS Support', 'Ok', 500, invalidSession ? 5000 : null).afterClosed().subscribe(() => {\r\n if (invalidSession) {\r\n if (this.supportService.loggedIn) {\r\n this.supportService.reset();\r\n }\r\n }\r\n });\r\n }, 250);\r\n }\r\n }\r\n return throwError(() => err);\r\n }));\r\n }\r\n\r\n\r\n /**\r\n * Add token to request\r\n * @param request : the request\r\n * @param token: the token or null to use curre3nt\r\n */\r\n private addTokenToRequest(\r\n request: HttpRequest<any>,\r\n token: string = null\r\n ): HttpRequest<any> {\r\n if (request.url.startsWith(this.supportService.serviceUri)) {\r\n if (!token) token = this.supportService.getToken();\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: 'Bearer ' + token,\r\n 'ngsw-bypass': 'ngsw-bypass'\r\n },\r\n });\r\n }\r\n }\r\n return request;\r\n }\r\n\r\n}\r\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { SupportJwtAuthInterceptor as SupportAuthInterceptor } from './interceptors/auth.interceptor';\r\n\r\n@NgModule({\r\n providers: [ \r\n { provide: HTTP_INTERCEPTORS, useClass: SupportAuthInterceptor, multi: true }, \r\n ]\r\n})\r\nexport class ArsSupportCommonModule {}\r\n","\r\nexport interface SupportNotificationsSearchParams {\r\n any?: string | null;\r\n products?: number | null;\r\n productModules?: number | null;\r\n first?: number | null;\r\n count?: number | null;\r\n}\r\n\r\nexport interface SupportNotificationsInfo {\r\n unread?: number | null;\r\n}\r\n\r\nexport enum SupportProduct {\r\n Clipper = 1,\r\n Evolution = 1 << 1,\r\n DGInfo = 1 << 2\r\n}\r\n\r\nexport enum SupportProductModule {\r\n EvoFormazione = 1,\r\n EvoDPI = 1 << 1,\r\n EvoSorveglianzaSanitaria = 1 << 2,\r\n EvoRegistroEScadenzario = 1 << 3,\r\n EvoAttrezzatureEImpianti = 1 << 4,\r\n EvoMonitoraggio = 1 << 5,\r\n EvoBollettino = 1 << 6,\r\n DgiADR = 1 << 7,\r\n DgiRID = 1 << 8,\r\n DgiIMDG = 1 << 9,\r\n DgiCLP = 1 << 10,\r\n}\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './common/common.module';\r\nexport * from './common/messages';\r\nexport * from './common/support';\r\nexport * from './common/services/support.service';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["catchError","SupportAuthInterceptor"],"mappings":";;;;;;;;AAAa,MAAA,eAAe,GAAG;AAC7B;;AAEG;;AAGH,IAAA,aAAa,EAAE,wBAAwB;AACvC,IAAA,eAAe,EAAE,0BAA0B;AAC3C,IAAA,kBAAkB,EAAE,6BAA6B;AACjD,IAAA,gBAAgB,EAAE,2BAA2B;;AAG7C,IAAA,iBAAiB,EAAE,4BAA4B;;;MCApC,cAAc,CAAA;AAH3B,IAAA,WAAA,GAAA;AAKmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,GAAG,EAAE,CAAC;AAEvC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAE5C,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAC5B,IAAiB,CAAA,iBAAA,GAAsC,IAAI,CAAC;QAC5D,IAA6B,CAAA,6BAAA,GAAyB,IAAI,CAAC;QAC3D,IAAc,CAAA,cAAA,GAAyB,IAAI,CAAC;QAI5C,IAAU,CAAA,UAAA,GAAc,IAAI,CAAC;QAM7B,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAQ3B,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAQ5B,IAAW,CAAA,WAAA,GAAW,gCAAgC,CAAA;QAOtD,IAAc,CAAA,cAAA,GAAW,EAAE,CAAA;QAwB3B,IAAoB,CAAA,oBAAA,GAAW,IAAI,CAAC;AAuT7C,KAAA;IA3WC,IAAI,SAAS,KAAgB,OAAO,IAAI,CAAC,UAAU,CAAA,EAAE;;IACrD,IAAI,SAAS,CAAC,KAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB;AAGD,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;AAGD,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IACD,IAAI,SAAS,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB;AAGD,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IACD,IAAI,UAAU,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;AAED,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IACD,IAAI,aAAa,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;AAGD,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,KAAqB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;AAGD,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IACD,IAAI,cAAc,CAAC,KAA2B,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;AAGD,IAAA,IAAI,mBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;KAClC;IAED,WAAW,GAAA;;QAET,IAAI,IAAI,CAAC,6BAA6B;AACpC,YAAA,IAAI,CAAC,6BAA6B,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KAC5D;AAED;;;;;AAKG;IACH,UAAU,CACR,aAAqB,IAAI,EACzB,gBAAwB,IAAI,EAC5B,WAAmB,CAAC,EAAA;;AAGpB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAC5C,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;;AAGxE,QAAA,IAAI,UAAU;AACZ,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAChC,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AACpC,QAAA,IAAI,QAAQ;AACV,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;AAG5B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,OAAY,KAAI;gBAClF,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,aAAa,EAAE;oBAChD,UAAU,CAAC,MAAK;wBACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAM,KAAI;AACrG,4BAAA,IAAI,CAAC,CAAC,OAAO,EAAE;gCACb,IAAI,CAAC,wBAAwB,EAAE,CAAC;6BACjC;AACH,yBAAC,CAAC,CAAC;qBACJ,EAAE,GAAG,CAAC,CAAC;iBACT;AAAM,qBAAA,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,gBAAgB;AACxD,oBAAA,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,kBAAkB,EAAE;AACnD,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;wBAClB,IAAI,CAAC,KAAK,EAAE,CAAC;qBACd;yBAAM;AACL,wBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;4BACtB,QAAQ,EAAE,MAAK;gCACb,IAAI,CAAC,KAAK,EAAE,CAAC;6BACd;AACF,yBAAA,CAAC,CAAC;qBACJ;iBACF;qBAAM,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,iBAAiB,EAAE;oBAC3D,IAAI,CAAC,wBAAwB,EAAE,CAAC;iBACjC;AACH,aAAC,CAAC,CAAC;SACJ;;QAGD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;;AAErC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;YAGrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;KACF;AAED;;;AAGC;AACO,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;KACF;AAED;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE;AACvC,YAAA,IAAI,CAAC,iBAAiB;gBACpB,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAChD,qBAAA,IAAI,CACH,SAAS,CAAC,MAAK;AACb,oBAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,wBAAA,OAAO,KAAK,CAAC;AACpD,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,oBAAA,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CACtB;wBACE,KAAK,EAAE,MAAQ,EAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE;wBACzC,QAAQ,EAAE,MAAQ,EAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE;AAC7C,qBAAA,CAAC,CAAC;AACL,oBAAA,OAAO,KAAK,CAAC;AACf,iBAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC;SACzE;KACF;AAED;;;AAGG;IACH,QAAQ,GAAA;QACN,IAAI,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;AAAE,gBAAA,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnE,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAGD;;;;;;AAMA;IACA,KAAK,CAAC,QAAmC,IAAI,EAC3C,QAAmC,IAAI,EACvC,mBAA8C,IAAI,EAAA;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,UAAU;AACnB,aAAA,IAAI,CACH,IAAI,CAAC,WAAW,GAAG,QAAQ,EAC3B;YACE,IAAI,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AAC9B,YAAA,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACnD,YAAA,KAAK,EAAE,KAAK;SACb,EACD;YACE,OAAO,EACL,CAAC,KAAK;kBACF,IAAI,WAAW,EAAE;kBACjB,IAAI,WAAW,EAAE;AAChB,qBAAA,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC;SAC9C,CAAC;AACH,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAyB,KAAI;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAC1C,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;aAClC;AACD,YAAA,OAAO,CAAC,CAAC;SACV,CAAC,CACH,CAAC;AAEJ,QAAA,OAAO,IAAI,CAAC;KACb;AAGD;;;;AAIG;AACK,IAAA,iBAAiB,CACvB,WAAmC,EAAA;AAEnC,QAAA,IAAI,WAAW,CAAC,OAAO,EAAE;;YAEvB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEvC,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5C,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACvB;AACD,QAAA,OAAO,WAAW,CAAC;KACpB;AAED;;AAEG;IACH,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,UAAU;AACnB,aAAA,IAAI,CAAM,IAAI,CAAC,WAAW,GAAG,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,CAAC,CAAM,KAAI,EAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAC9B,UAAU,CAAC,CAAC,EAAE,KAAI;YAChB,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;SACf,CAAC,CAAC,CAAC;KAET;AAED;;AAEG;IACH,KAAK,GAAA;;AAEH,QAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE;AACtC,YAAA,IAAI,CAAC,6BAA6B,CAAC,WAAW,EAAE,CAAC;AACjD,YAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;SAC3C;AACD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;;AAG9B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;AAED;;AAEG;IACH,KAAK,GAAA;;QAEH,IAAI,CAAC,KAAK,EAAE,CAAC;;AAGb,QAAA,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;KAC1C;AAED;;AAEG;IACK,OAAO,GAAA;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,IAAI,CAAC,WAAW,GAAG,UAAU,EAAE,EAAE,CAClC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAyB,KAAI;;YAEvC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC9B,CAAC,CAAC,CAAC;KACL;AAED;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;AAChC,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtB,YAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AACxC,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClB;;;;AAMD;;AAEG;IACH,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,IAAI,CAAC,WAAW,GAAG,wCAAwC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,WAAW,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAC9H,CAAC,SAAS,CAAC,CAAC,CAAM,KAAI;AACrB,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,gBAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAA;aACzD;AACH,SAAC,CAAC,CAAC;KACJ;AAED;;;AAGG;AACH,IAAA,kBAAkB,CAAC,MAAwC,EAAA;QACzD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,IAAI,CAAC,WAAW,GAAG,gBAAgB,EACnC,MAAM,CACP,CAAC;KACH;AAED;;;AAGG;AACH,IAAA,eAAe,CAAC,EAAU,EAAA;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,WAAW;YAChB,iBAAiB;AACjB,YAAA,EAAE,CACH,CAAC;KACH;AAED;;;AAGG;AACH,IAAA,iBAAiB,CAAC,MAAW,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,IAAI,CAAC,WAAW,GAAG,qBAAqB,EACxC,MAAM,CACP,CAAC;KACH;AAED;;;AAGC;AACD,IAAA,2BAA2B,CAAC,UAAkB,EAAA;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,IAAI,CAAC,WAAW,GAAG,sBAAsB,GAAG,UAAU,EACtD,EAAE,YAAY,EAAE,MAAM,EAAE,CACzB,CAAC;KACH;8GAzXU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCJY,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAGU,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAuE/C,KAAA;IArEC,SAAS,CACP,OAAyB,EACzB,IAAiB,EAAA;;QAGjB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAChD,aAAA,IAAI,CACHA,YAAU,CAAC,CAAC,GAAQ,KAAI;AACtB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;;AAE1D,gBAAA,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,8CAA8C,CAAC;AAClG,gBAAA,IAAI,cAAc,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC;AACxC,gBAAA,QAAQ,GAAG,CAAC,MAAM;AAChB,oBAAA,KAAK,CAAC,CAAC;AACP,oBAAA,KAAK,GAAG,CAAC;AACT,oBAAA,KAAK,GAAG,CAAC;AACT,oBAAA,KAAK,GAAG,CAAC;AACT,oBAAA,KAAK,GAAG;AACN,wBAAA,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;AACR,oBAAA,KAAK,GAAG;wBACN,OAAO,GAAG,0EAA0E,CAAC;wBACrF,MAAM;AACR,oBAAA;AACE,wBAAA,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC;wBACjE,MAAM;iBACT;;gBAED,IAAI,OAAO,EAAE;oBACX,UAAU,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAK;4BACrI,IAAI,cAAc,EAAE;AAClB,gCAAA,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAChC,oCAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;iCAC7B;6BACF;AACH,yBAAC,CAAC,CAAC;qBACJ,EAAE,GAAG,CAAC,CAAC;iBACT;aACF;AACD,YAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;SAC9B,CAAC,CAAC,CAAC;KACT;AAGD;;;;AAIG;AACK,IAAA,iBAAiB,CACvB,OAAyB,EACzB,KAAA,GAAgB,IAAI,EAAA;AAEpB,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;AAC1D,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YACnD,IAAI,KAAK,EAAE;gBACT,OAAO,OAAO,CAAC,KAAK,CAAC;AACnB,oBAAA,UAAU,EAAE;wBACV,aAAa,EAAE,SAAS,GAAG,KAAK;AAChC,wBAAA,aAAa,EAAE,aAAa;AAC7B,qBAAA;AACF,iBAAA,CAAC,CAAC;aACJ;SACF;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;8GAxEU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAzB,yBAAyB,EAAA,CAAA,CAAA,EAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;;;MCGE,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAtB,sBAAsB,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAJtB,SAAA,EAAA;YACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAEC,yBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9E,SAAA,EAAA,CAAA,CAAA,EAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAEA,yBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9E,qBAAA;AACF,iBAAA,CAAA;;;ICKW,eAIX;AAJD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,cAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,cAAA,CAAA,cAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAkB,CAAA;AAClB,IAAA,cAAA,CAAA,cAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAe,CAAA;AACjB,CAAC,EAJW,cAAc,KAAd,cAAc,GAIzB,EAAA,CAAA,CAAA,CAAA;IAEW,qBAYX;AAZD,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB,IAAA,oBAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAe,CAAA;AACf,IAAA,oBAAA,CAAA,oBAAA,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA,GAAA,0BAAiC,CAAA;AACjC,IAAA,oBAAA,CAAA,oBAAA,CAAA,yBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,yBAAgC,CAAA;AAChC,IAAA,oBAAA,CAAA,oBAAA,CAAA,0BAAA,CAAA,GAAA,EAAA,CAAA,GAAA,0BAAiC,CAAA;AACjC,IAAA,oBAAA,CAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAwB,CAAA;AACxB,IAAA,oBAAA,CAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,EAAA,CAAA,GAAA,eAAsB,CAAA;AACtB,IAAA,oBAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,GAAA,CAAA,GAAA,QAAe,CAAA;AACf,IAAA,oBAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,GAAA,CAAA,GAAA,QAAe,CAAA;AACf,IAAA,oBAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAgB,CAAA;AAChB,IAAA,oBAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAgB,CAAA;AAClB,CAAC,EAZW,oBAAoB,KAApB,oBAAoB,GAY/B,EAAA,CAAA,CAAA;;AC/BD;;AAEG;;ACFH;;AAEG;;;;"}