@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.
- package/core/definitions.d.ts +7 -7
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/document/document.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/last-15-days/last-15-days.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/references/references.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +3 -3
- package/esm2022/core/definitions.mjs +1 -1
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +3 -3
- package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +15 -15
- package/esm2022/support.common/common/services/support.service.mjs +30 -29
- package/esm2022/support.common/common/support.mjs +1 -1
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +46 -51
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +73 -74
- package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +24 -24
- package/esm2022/ui/ui/definitions.mjs +1 -1
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
- package/esm2022/ui.application/ui/definitions.mjs +1 -1
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/filters.mjs +2 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +14 -14
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +2 -2
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +41 -40
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +108 -112
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +23 -23
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +19 -18
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/package.json +7 -7
- package/styles/ui.scss +36 -4
- package/support.common/common/interceptors/auth.interceptor.d.ts +2 -5
- package/support.common/common/services/support.service.d.ts +4 -6
- package/support.common/common/support.d.ts +6 -6
- package/support.ui/ui/notifications-browser/notification/notification.component.d.ts +13 -12
- package/support.ui/ui/notifications-browser/notifications-browser.component.d.ts +19 -23
- package/tinymce/full-screen-editor/full-screen-editor.component.d.ts +11 -11
- package/ui/ui/definitions.d.ts +3 -3
- package/ui.application/ui/definitions.d.ts +10 -10
- package/ui.application/ui/dialogs/send-to/send-to-dialog.component.d.ts +5 -5
- package/ui.application/ui/filters.d.ts +17 -17
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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: [
|
|
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
|
-
}]
|
|
339
|
+
}] });
|
|
339
340
|
|
|
340
341
|
class SupportJwtAuthInterceptor {
|
|
341
|
-
constructor(
|
|
342
|
-
this
|
|
343
|
-
this
|
|
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
|
|
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
|
|
373
|
+
this.dialogService.error(message, null, 'Errore in ARS Support', 'Ok', 500, invalidSession ? 5000 : null).afterClosed().subscribe(() => {
|
|
373
374
|
if (invalidSession) {
|
|
374
|
-
if (this
|
|
375
|
-
this
|
|
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
|
|
392
|
+
if (request.url.startsWith(this.supportService.serviceUri)) {
|
|
392
393
|
if (!token)
|
|
393
|
-
token = this
|
|
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: [
|
|
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
|
-
}]
|
|
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":"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"}
|