ngx-histaff-alpha 2.4.8 → 2.4.9
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/esm2022/lib/app/http-interceptors/auth-interceptor.mjs +24 -2
- package/esm2022/lib/app/http-interceptors/base-url-interceptor.mjs +23 -2
- package/esm2022/lib/app/http-interceptors/caching-interceptor.mjs +33 -2
- package/esm2022/lib/app/http-interceptors/response-interceptor.mjs +18 -4
- package/esm2022/lib/app/http-interceptors/time-zone-interceptor.mjs +8 -1
- package/esm2022/lib/app/http-interceptors/token-interceptor.mjs +114 -14
- package/esm2022/lib/app/services/auth.service.mjs +11 -1
- package/fesm2022/ngx-histaff-alpha.mjs +225 -29
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/http-interceptors/auth-interceptor.d.ts +4 -2
- package/lib/app/http-interceptors/base-url-interceptor.d.ts +4 -2
- package/lib/app/http-interceptors/caching-interceptor.d.ts +2 -1
- package/lib/app/http-interceptors/response-interceptor.d.ts +2 -1
- package/lib/app/http-interceptors/time-zone-interceptor.d.ts +2 -1
- package/lib/app/http-interceptors/token-interceptor.d.ts +2 -1
- package/lib/app/services/auth.service.d.ts +3 -0
- package/package.json +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { AuthService } from '../services/auth.service';
|
|
2
3
|
import { InterceptorStatisticHeader } from './base-url-interceptor';
|
|
4
|
+
import { StatisticAuthService } from '../services/statistic-auth.service';
|
|
3
5
|
import * as i0 from "@angular/core";
|
|
4
6
|
import * as i1 from "../services/auth.service";
|
|
5
7
|
import * as i2 from "../services/statistic-auth.service";
|
|
@@ -32,4 +34,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
32
34
|
providedIn: 'root'
|
|
33
35
|
}]
|
|
34
36
|
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.StatisticAuthService }] });
|
|
35
|
-
|
|
37
|
+
// Fn style
|
|
38
|
+
export function authInterceptor(req, next) {
|
|
39
|
+
const isStatistic = req.headers.has(InterceptorStatisticHeader);
|
|
40
|
+
const authService = inject(AuthService);
|
|
41
|
+
const statisticAuthService = inject(StatisticAuthService);
|
|
42
|
+
// Get the auth token from the service.
|
|
43
|
+
const authToken = isStatistic ? statisticAuthService.getAuthorizationToken() : authService.getAuthorizationToken();
|
|
44
|
+
if (authToken === undefined) {
|
|
45
|
+
console.log(`AuthInterceptor.intercept() for ${req.url}`, "No authToken");
|
|
46
|
+
return next(req);
|
|
47
|
+
}
|
|
48
|
+
// Clone the request and replace the original headers with
|
|
49
|
+
// cloned headers, updated with the authorization.
|
|
50
|
+
const authReq = req.clone({
|
|
51
|
+
headers: req.headers.set('Authorization', 'Bearer ' + authToken)
|
|
52
|
+
});
|
|
53
|
+
console.log(`AuthInterceptor.intercept() for ${req.url}`, "passed");
|
|
54
|
+
// send cloned request with header to the next handler.
|
|
55
|
+
return next(authReq);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2h0dHAtaW50ZXJjZXB0b3JzL2F1dGgtaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7O0FBTTFFLE1BQU0sT0FBTyxlQUFlO0lBRXhCLFlBQ1ksV0FBd0IsRUFDeEIsb0JBQTBDO1FBRDFDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7SUFDbEQsQ0FBQztJQUVMLFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBRTlDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFaEUsdUNBQXVDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU5SCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzNCO1FBRUQsMERBQTBEO1FBQzFELGtEQUFrRDtRQUNsRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUNuRSxDQUFDLENBQUM7UUFFSCx1REFBdUQ7UUFDdkQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OEdBMUJRLGVBQWU7a0hBQWYsZUFBZSxjQUZaLE1BQU07OzJGQUVULGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOztBQThCRCxXQUFXO0FBQ1gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxHQUFxQixFQUFFLElBQW1CO0lBRXRFLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFFaEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFMUQsdUNBQXVDO0lBQ3ZDLE1BQU0sU0FBUyxHQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFcEgsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUN6RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwQjtJQUVELDBEQUEwRDtJQUMxRCxrREFBa0Q7SUFDbEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN0QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxTQUFTLENBQUM7S0FDbkUsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRW5FLHVEQUF1RDtJQUN2RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBIdHRwSW50ZXJjZXB0b3IsIEh0dHBIYW5kbGVyLCBIdHRwUmVxdWVzdCxcclxuICAgIEh0dHBIYW5kbGVyRm4sXHJcbiAgICBIdHRwRXZlbnRcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyIH0gZnJvbSAnLi9iYXNlLXVybC1pbnRlcmNlcHRvcic7XHJcbmltcG9ydCB7IFN0YXRpc3RpY0F1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RhdGlzdGljLWF1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHN0YXRpc3RpY0F1dGhTZXJ2aWNlOiBTdGF0aXN0aWNBdXRoU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xyXG5cclxuICAgICAgICBjb25zdCBpc1N0YXRpc3RpYyA9IHJlcS5oZWFkZXJzLmhhcyhJbnRlcmNlcHRvclN0YXRpc3RpY0hlYWRlcik7XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgYXV0aCB0b2tlbiBmcm9tIHRoZSBzZXJ2aWNlLlxyXG4gICAgICAgIGNvbnN0IGF1dGhUb2tlbiA9ICBpc1N0YXRpc3RpYyA/IHRoaXMuc3RhdGlzdGljQXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkgOiB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpO1xyXG5cclxuICAgICAgICBpZiAoYXV0aFRva2VuID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDbG9uZSB0aGUgcmVxdWVzdCBhbmQgcmVwbGFjZSB0aGUgb3JpZ2luYWwgaGVhZGVycyB3aXRoXHJcbiAgICAgICAgLy8gY2xvbmVkIGhlYWRlcnMsIHVwZGF0ZWQgd2l0aCB0aGUgYXV0aG9yaXphdGlvbi5cclxuICAgICAgICBjb25zdCBhdXRoUmVxID0gcmVxLmNsb25lKHtcclxuICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgYXV0aFRva2VuKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBzZW5kIGNsb25lZCByZXF1ZXN0IHdpdGggaGVhZGVyIHRvIHRoZSBuZXh0IGhhbmRsZXIuXHJcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGF1dGhSZXEpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBGbiBzdHlsZVxyXG5leHBvcnQgZnVuY3Rpb24gYXV0aEludGVyY2VwdG9yKHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXJGbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XHJcblxyXG4gICAgY29uc3QgaXNTdGF0aXN0aWMgPSByZXEuaGVhZGVycy5oYXMoSW50ZXJjZXB0b3JTdGF0aXN0aWNIZWFkZXIpO1xyXG5cclxuICAgIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcclxuICAgIGNvbnN0IHN0YXRpc3RpY0F1dGhTZXJ2aWNlID0gaW5qZWN0KFN0YXRpc3RpY0F1dGhTZXJ2aWNlKTtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGF1dGggdG9rZW4gZnJvbSB0aGUgc2VydmljZS5cclxuICAgIGNvbnN0IGF1dGhUb2tlbiA9ICBpc1N0YXRpc3RpYyA/IHN0YXRpc3RpY0F1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpIDogYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCk7XHJcblxyXG4gICAgaWYgKGF1dGhUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYEF1dGhJbnRlcmNlcHRvci5pbnRlcmNlcHQoKSBmb3IgJHtyZXEudXJsfWAsIFwiTm8gYXV0aFRva2VuXCIpXHJcbiAgICAgICAgcmV0dXJuIG5leHQocmVxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbG9uZSB0aGUgcmVxdWVzdCBhbmQgcmVwbGFjZSB0aGUgb3JpZ2luYWwgaGVhZGVycyB3aXRoXHJcbiAgICAvLyBjbG9uZWQgaGVhZGVycywgdXBkYXRlZCB3aXRoIHRoZSBhdXRob3JpemF0aW9uLlxyXG4gICAgY29uc3QgYXV0aFJlcSA9IHJlcS5jbG9uZSh7XHJcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgYXV0aFRva2VuKVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coYEF1dGhJbnRlcmNlcHRvci5pbnRlcmNlcHQoKSBmb3IgJHtyZXEudXJsfWAsIFwicGFzc2VkXCIpXHJcblxyXG4gICAgLy8gc2VuZCBjbG9uZWQgcmVxdWVzdCB3aXRoIGhlYWRlciB0byB0aGUgbmV4dCBoYW5kbGVyLlxyXG4gICAgcmV0dXJuIG5leHQoYXV0aFJlcSk7XHJcbn0iXX0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { AppConfigService } from '../services/app-config.service';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
import * as i1 from "../services/app-config.service";
|
|
4
5
|
export const InterceptorSkipHeader = 'X-Skip-Interceptor';
|
|
@@ -37,4 +38,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
37
38
|
providedIn: 'root'
|
|
38
39
|
}]
|
|
39
40
|
}], ctorParameters: () => [{ type: i1.AppConfigService }] });
|
|
40
|
-
|
|
41
|
+
// Fn style
|
|
42
|
+
export function baseUrlInterceptor(req, next) {
|
|
43
|
+
const appConfigService = inject(AppConfigService);
|
|
44
|
+
if (req.headers.has(InterceptorSkipHeader)) {
|
|
45
|
+
const headers = req.headers.delete(InterceptorSkipHeader);
|
|
46
|
+
return next(req.clone({ headers }));
|
|
47
|
+
}
|
|
48
|
+
if (req.headers.has(InterceptorStatisticHeader)) {
|
|
49
|
+
const addBaseUrlReq = req.clone({
|
|
50
|
+
url: appConfigService.BASE_URL_FOR_STATISTIC + req.url
|
|
51
|
+
});
|
|
52
|
+
return next(addBaseUrlReq);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const addBaseUrlReq = req.clone({
|
|
56
|
+
url: appConfigService.BASE_URL + req.url
|
|
57
|
+
});
|
|
58
|
+
return next(addBaseUrlReq);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS11cmwtaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy9iYXNlLXVybC1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU9uRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBR2xFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG9CQUFvQixDQUFDO0FBQzFELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLHlCQUF5QixDQUFDO0FBS3BFLE1BQU0sT0FBTyxrQkFBa0I7SUFFM0IsWUFDWSxnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUUxQyxDQUFDO0lBRUwsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFFOUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDMUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLDRLQUE0SyxDQUFDLENBQUE7U0FDOUw7UUFFRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDN0MsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUMsR0FBRzthQUM5RCxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckM7YUFBTTtZQUNILE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHO2FBQ2hELENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7OEdBN0JRLGtCQUFrQjtrSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTs7MkZBRVQsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7QUFpQ0QsV0FBVztBQUNYLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFxQixFQUFFLElBQW1CO0lBRXpFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFbEQsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN2QztJQUVELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsRUFBRTtRQUM3QyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzVCLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUMsR0FBRztTQUN6RCxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUM5QjtTQUFNO1FBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUM1QixHQUFHLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHO1NBQzNDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQzlCO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgSHR0cEludGVyY2VwdG9yLCBIdHRwSGFuZGxlciwgSHR0cFJlcXVlc3QsXHJcbiAgICBIdHRwSGFuZGxlckZuLFxyXG4gICAgSHR0cEV2ZW50XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBJbnRlcmNlcHRvclNraXBIZWFkZXIgPSAnWC1Ta2lwLUludGVyY2VwdG9yJztcclxuZXhwb3J0IGNvbnN0IEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyID0gJ1gtU3RhdGlzdGljLUludGVyY2VwdG9yJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVVybEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXHJcblxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xyXG5cclxuICAgICAgICBpZiAocmVxLmhlYWRlcnMuaGFzKEludGVyY2VwdG9yU2tpcEhlYWRlcikpIHtcclxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHJlcS5oZWFkZXJzLmRlbGV0ZShJbnRlcmNlcHRvclNraXBIZWFkZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxLmNsb25lKHsgaGVhZGVycyB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXBwQ29uZmlnU2VydmljZS5CQVNFX1VSTCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVEhFIEFQUCBMQVlQT1VUIGhhZCBzdGFydGVkIHJlbmRlcmluZyBiZWZvcmUgYXBwQ29uZmlnU2VydmljZS5CQVNFX1VSTCByZWFjaHMgYSB0cnVlbHkgdmFsdWUuIFBsZWFzZSBjaGVjayBBcHBJbml0aWFsaXphdGlvblNlcnZpY2UgaW5pdGlhbGl6aW5nJC5uZXh0IG1ldGhvZCBjYXJlZnVsbHkhISFcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXEuaGVhZGVycy5oYXMoSW50ZXJjZXB0b3JTdGF0aXN0aWNIZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZEJhc2VVcmxSZXEgPSByZXEuY2xvbmUoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQkFTRV9VUkxfRk9SX1NUQVRJU1RJQyArIHJlcS51cmxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShhZGRCYXNlVXJsUmVxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRCYXNlVXJsUmVxID0gcmVxLmNsb25lKHtcclxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5hcHBDb25maWdTZXJ2aWNlLkJBU0VfVVJMICsgcmVxLnVybFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGFkZEJhc2VVcmxSZXEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy8gRm4gc3R5bGVcclxuZXhwb3J0IGZ1bmN0aW9uIGJhc2VVcmxJbnRlcmNlcHRvcihyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyRm4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xyXG5cclxuICAgIGNvbnN0IGFwcENvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQXBwQ29uZmlnU2VydmljZSk7XHJcblxyXG4gICAgaWYgKHJlcS5oZWFkZXJzLmhhcyhJbnRlcmNlcHRvclNraXBIZWFkZXIpKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHJlcS5oZWFkZXJzLmRlbGV0ZShJbnRlcmNlcHRvclNraXBIZWFkZXIpO1xyXG4gICAgICAgIHJldHVybiBuZXh0KHJlcS5jbG9uZSh7IGhlYWRlcnMgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXEuaGVhZGVycy5oYXMoSW50ZXJjZXB0b3JTdGF0aXN0aWNIZWFkZXIpKSB7XHJcbiAgICAgICAgY29uc3QgYWRkQmFzZVVybFJlcSA9IHJlcS5jbG9uZSh7XHJcbiAgICAgICAgICAgIHVybDogYXBwQ29uZmlnU2VydmljZS5CQVNFX1VSTF9GT1JfU1RBVElTVElDICsgcmVxLnVybFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXh0KGFkZEJhc2VVcmxSZXEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBhZGRCYXNlVXJsUmVxID0gcmVxLmNsb25lKHtcclxuICAgICAgICAgICAgdXJsOiBhcHBDb25maWdTZXJ2aWNlLkJBU0VfVVJMICsgcmVxLnVybFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXh0KGFkZEJhc2VVcmxSZXEpO1xyXG4gICAgfVxyXG59Il19
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { HttpResponse } from '@angular/common/http';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Injectable, inject } from '@angular/core';
|
|
3
3
|
import { Observable, of } from 'rxjs';
|
|
4
4
|
import { tap } from 'rxjs/operators';
|
|
5
|
+
import { CacheService } from '../services/cache-service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../services/cache-service";
|
|
7
8
|
export class CachingInterceptor {
|
|
@@ -46,4 +47,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
46
47
|
providedIn: 'root'
|
|
47
48
|
}]
|
|
48
49
|
}], ctorParameters: () => [{ type: i1.CacheService }] });
|
|
49
|
-
|
|
50
|
+
// Fn style
|
|
51
|
+
export function cachingInterceptor(req, next) {
|
|
52
|
+
const cacheService = inject(CacheService);
|
|
53
|
+
if (req.method !== 'GET') {
|
|
54
|
+
return next(req);
|
|
55
|
+
}
|
|
56
|
+
// delete cache if no header is set by service's method
|
|
57
|
+
if (!req.headers.get('Cache-Request')) {
|
|
58
|
+
if (cacheService.cacheMap.get(req.urlWithParams)) {
|
|
59
|
+
cacheService.cacheMap.delete(req.urlWithParams);
|
|
60
|
+
}
|
|
61
|
+
return next(req);
|
|
62
|
+
}
|
|
63
|
+
// Checked if there is cached data for this URI
|
|
64
|
+
const cachedResponse = cacheService.getFromCache(req);
|
|
65
|
+
if (cachedResponse) {
|
|
66
|
+
// In case of parallel requests to same URI,
|
|
67
|
+
// return the request already in progress
|
|
68
|
+
// otherwise return the last cached data
|
|
69
|
+
return (cachedResponse instanceof Observable) ? cachedResponse : of(cachedResponse.clone());
|
|
70
|
+
}
|
|
71
|
+
// If the request of going through for first time
|
|
72
|
+
// then let the request proceed and cache the response
|
|
73
|
+
return next(req)
|
|
74
|
+
.pipe(tap(event => {
|
|
75
|
+
if (event instanceof HttpResponse) {
|
|
76
|
+
cacheService.addToCache(req, event);
|
|
77
|
+
}
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGluZy1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2h0dHAtaW50ZXJjZXB0b3JzL2NhY2hpbmctaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1RSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFLekQsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsd0NBQXdDO1FBQ3hDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDdEQ7WUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7UUFFRCwrQ0FBK0M7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSSxjQUFjLEVBQUU7WUFDbEIsNENBQTRDO1lBQzVDLHlDQUF5QztZQUN6Qyx3Q0FBd0M7WUFDeEMsT0FBTyxDQUFDLGNBQWMsWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDN0Y7UUFFRCxpREFBaUQ7UUFDakQsc0RBQXNEO1FBQ3RELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNkLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzVDO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7OEdBckNVLGtCQUFrQjtrSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBeUNELFdBQVc7QUFDWCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBcUIsRUFBRSxJQUFtQjtJQUUzRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFMUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtRQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQjtJQUVELHVEQUF1RDtJQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDckMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDaEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbEI7SUFFRCwrQ0FBK0M7SUFDL0MsTUFBTSxjQUFjLEdBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxJQUFJLGNBQWMsRUFBRTtRQUNsQiw0Q0FBNEM7UUFDNUMseUNBQXlDO1FBQ3pDLHdDQUF3QztRQUN4QyxPQUFPLENBQUMsY0FBYyxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUM3RjtJQUVELGlEQUFpRDtJQUNqRCxzREFBc0Q7SUFDdEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNkLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtZQUMvQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN2QztJQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEhhbmRsZXJGbiwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2FjaGUtc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWNoaW5nSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIC8vIERvbid0IGNhY2hlIGlmIGl0J3Mgbm90IGEgR0VUIHJlcXVlc3RcclxuICAgIGlmIChyZXEubWV0aG9kICE9PSAnR0VUJykge1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWxldGUgY2FjaGUgaWYgbm8gaGVhZGVyIGlzIHNldCBieSBzZXJ2aWNlJ3MgbWV0aG9kXHJcbiAgICBpZiAoIXJlcS5oZWFkZXJzLmdldCgnY2FjaGVSZXF1ZXN0JykpIHtcclxuICAgICAgaWYgKHRoaXMuY2FjaGVTZXJ2aWNlLmNhY2hlTWFwLmdldChyZXEudXJsV2l0aFBhcmFtcykpIHtcclxuICAgICAgICB0aGlzLmNhY2hlU2VydmljZS5jYWNoZU1hcC5kZWxldGUocmVxLnVybFdpdGhQYXJhbXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2VkIGlmIHRoZXJlIGlzIGNhY2hlZCBkYXRhIGZvciB0aGlzIFVSSVxyXG4gICAgY29uc3QgY2FjaGVkUmVzcG9uc2UgPSB0aGlzLmNhY2hlU2VydmljZS5nZXRGcm9tQ2FjaGUocmVxKTtcclxuICAgIGlmIChjYWNoZWRSZXNwb25zZSkge1xyXG4gICAgICAvLyBJbiBjYXNlIG9mIHBhcmFsbGVsIHJlcXVlc3RzIHRvIHNhbWUgVVJJLFxyXG4gICAgICAvLyByZXR1cm4gdGhlIHJlcXVlc3QgYWxyZWFkeSBpbiBwcm9ncmVzc1xyXG4gICAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHRoZSBsYXN0IGNhY2hlZCBkYXRhXHJcbiAgICAgIHJldHVybiAoY2FjaGVkUmVzcG9uc2UgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSA/IGNhY2hlZFJlc3BvbnNlIDogb2YoY2FjaGVkUmVzcG9uc2UuY2xvbmUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIHJlcXVlc3Qgb2YgZ29pbmcgdGhyb3VnaCBmb3IgZmlyc3QgdGltZVxyXG4gICAgLy8gdGhlbiBsZXQgdGhlIHJlcXVlc3QgcHJvY2VlZCBhbmQgY2FjaGUgdGhlIHJlc3BvbnNlXHJcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKVxyXG4gICAgICAgIC5waXBlKHRhcChldmVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2UuYWRkVG9DYWNoZShyZXEsIGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEZuIHN0eWxlXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWNoaW5nSW50ZXJjZXB0b3IocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlckZuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcclxuXHJcbiAgY29uc3QgY2FjaGVTZXJ2aWNlID0gaW5qZWN0KENhY2hlU2VydmljZSk7XHJcblxyXG4gIGlmIChyZXEubWV0aG9kICE9PSAnR0VUJykge1xyXG4gICAgcmV0dXJuIG5leHQocmVxKTtcclxuICB9XHJcblxyXG4gIC8vIGRlbGV0ZSBjYWNoZSBpZiBubyBoZWFkZXIgaXMgc2V0IGJ5IHNlcnZpY2UncyBtZXRob2RcclxuICBpZiAoIXJlcS5oZWFkZXJzLmdldCgnQ2FjaGUtUmVxdWVzdCcpKSB7XHJcbiAgICBpZiAoY2FjaGVTZXJ2aWNlLmNhY2hlTWFwLmdldChyZXEudXJsV2l0aFBhcmFtcykpIHtcclxuICAgICAgY2FjaGVTZXJ2aWNlLmNhY2hlTWFwLmRlbGV0ZShyZXEudXJsV2l0aFBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dChyZXEpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2tlZCBpZiB0aGVyZSBpcyBjYWNoZWQgZGF0YSBmb3IgdGhpcyBVUklcclxuICBjb25zdCBjYWNoZWRSZXNwb25zZSA9Y2FjaGVTZXJ2aWNlLmdldEZyb21DYWNoZShyZXEpO1xyXG4gIGlmIChjYWNoZWRSZXNwb25zZSkge1xyXG4gICAgLy8gSW4gY2FzZSBvZiBwYXJhbGxlbCByZXF1ZXN0cyB0byBzYW1lIFVSSSxcclxuICAgIC8vIHJldHVybiB0aGUgcmVxdWVzdCBhbHJlYWR5IGluIHByb2dyZXNzXHJcbiAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHRoZSBsYXN0IGNhY2hlZCBkYXRhXHJcbiAgICByZXR1cm4gKGNhY2hlZFJlc3BvbnNlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkgPyBjYWNoZWRSZXNwb25zZSA6IG9mKGNhY2hlZFJlc3BvbnNlLmNsb25lKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gSWYgdGhlIHJlcXVlc3Qgb2YgZ29pbmcgdGhyb3VnaCBmb3IgZmlyc3QgdGltZVxyXG4gIC8vIHRoZW4gbGV0IHRoZSByZXF1ZXN0IHByb2NlZWQgYW5kIGNhY2hlIHRoZSByZXNwb25zZVxyXG4gIHJldHVybiBuZXh0KHJlcSlcclxuICAgICAgLnBpcGUodGFwKGV2ZW50ID0+IHtcclxuICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgIGNhY2hlU2VydmljZS5hZGRUb0NhY2hlKHJlcSwgZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KSk7XHJcblxyXG59Il19
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Injectable, isDevMode } from '@angular/core';
|
|
1
|
+
import { Injectable, inject, isDevMode } from '@angular/core';
|
|
2
2
|
import { HttpResponse } from '@angular/common/http';
|
|
3
3
|
import { filter, map } from 'rxjs';
|
|
4
4
|
import { noneAutoClosedAlertOptions } from '../constants/alertOptions';
|
|
5
|
+
import { ResponseService } from '../services/response.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../libraries/alert/alert.service";
|
|
7
8
|
import * as i2 from "../services/app-config.service";
|
|
@@ -66,10 +67,12 @@ export class ResponseInterceptor {
|
|
|
66
67
|
}
|
|
67
68
|
if (event.url?.toLowerCase().indexOf('/api/grpc') > 0) {
|
|
68
69
|
const newInnerBody = this.grpcService.convertToCamelCase(JSON.parse(event.body?.innerBody));
|
|
69
|
-
return event.clone({
|
|
70
|
+
return event.clone({
|
|
71
|
+
body: {
|
|
70
72
|
...event.body,
|
|
71
73
|
innerBody: newInnerBody
|
|
72
|
-
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
73
76
|
}
|
|
74
77
|
else {
|
|
75
78
|
return event;
|
|
@@ -87,4 +90,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
87
90
|
providedIn: 'root'
|
|
88
91
|
}]
|
|
89
92
|
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.AppConfigService }, { type: i3.ResponseService }, { type: i4.GrpcService }, { type: i5.MultiLanguageService }] });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy9yZXNwb25zZS1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQ21ELFlBQVksRUFDckUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBQWMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7OztBQVV2RSxNQUFNLE9BQU8sbUJBQW1CO0lBRTVCLFlBQ1ksWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLFdBQXdCLEVBQ3hCLEdBQXlCO1FBSnpCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQXNCO0lBQUksQ0FBQztJQUUxQyxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUs5QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksWUFBWSxDQUFDLEVBQzlDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNSLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtnQkFDL0IsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDO2dCQUVyQixJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUks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VCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBIdHRwSW50ZXJjZXB0b3IsIEh0dHBIYW5kbGVyLCBIdHRwUmVxdWVzdCwgSHR0cEV2ZW50LCBIdHRwUmVzcG9uc2VcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9saWJyYXJpZXMvYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXNwb25zZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUZvcm1hdGVkUmVzcG9uc2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lGb3JtYXRlZFJlc3BvbnNlJztcclxuaW1wb3J0IHsgR3JwY1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ncnBjLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXNwb25zZUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlc3BvbnNlU2VydmljZTogUmVzcG9uc2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZ3JwY1NlcnZpY2U6IEdycGNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSkgeyB9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpLnBpcGUoXHJcbiAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSksXHJcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keTogYW55ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50Lm9rICYmIGV2ZW50LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBldmVudC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIGV2ZW50LnVybD8uaW5kZXhPZihgJHt0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQkFTRV9VUkx9L3N0YXRpYy9leGNlbC10ZW1wbGF0ZXMvYCkhIDwgMCAmJiBldmVudC5vayAmJiBldmVudC5zdGF0dXMgPT09IDIwMCAmJiAoZXZlbnQuYm9keS5pbm5lckJvZHk/LmlubmVyQm9keSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgXHJcbiAgICAgICAgICAgICAgICAgICAgTmVzdGVkIGlubmVyQm9keSBmcm9tICR7ZXZlbnQudXJsfSByZXNwb25zZVxyXG4gICAgICAgICAgICAgICAgICAgIGlubmVyQm9keSBi4buLIGzhu5NuZyB0cm9uZyBwaOG6o24gaOG7k2kgdOG7qyAke2V2ZW50LnVybH0gIFxyXG4gICAgICAgICAgICAgICAgICAgIGAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGAke3RoaXMuYXBwQ29uZmlnU2VydmljZS5CQVNFX1VSTH0vc3RhdGljL2V4Y2VsLXRlbXBsYXRlcy9gKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgWGxzeC9HZW5lcmF0ZVRlbXBsYXRlYCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYFhsc3gvRXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgWGxzeC9JbXBvcnRYbHN4VG9EYmApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBYbHN4UmVwb3J0L0dldFJlcG9ydGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBHZXQyQ19UQ1RXXzk4YCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYEdldDJDX0JOVl8yMDA4YCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYFByaW50Q29udHJhY3RJbmZvYCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYFByaW50SHVXb3JraW5nYCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYEV4cG9ydFRlbXBJbXBvcnRTYWxhcnlgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgRXhwb3J0VGVtcEltcG9ydFRpbWVTaGVldGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBJbXBvcnRUaW1lU2hlZXREYWlseWApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBFeHBvcnRUZW1wSW1wb3J0U2hpZnRTb3J0YCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYEltcG9ydFNoaWZ0U29ydGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBJbXBvcnREZWNsYXJlU2VuaW9yaXR5YCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYEV4cG9ydFRlbXBJbXBvcnRCYXNpY2ApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBJbXBvcnRSZWdpc3RlckxlYXZlYCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYEltcG9ydFJlZ2lzdGVyT1RgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgRXhwb3J0VGVtcGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBJbXBvcnRUZW1wYCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYFByaW50YCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYEZpbGVEb3dubG9hZGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQub2sgJiYgZXZlbnQuc3RhdHVzID09PSAyMDAgJiYgKGV2ZW50LmJvZHkuaW5uZXJCb2R5ID09PSB1bmRlZmluZWQgfHwgZXZlbnQuYm9keS5lcnJvclR5cGUgPT09IHVuZGVmaW5lZCB8fCBldmVudC5ib2R5Lm1lc3NhZ2VDb2RlID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGBcclxuICAgICAgICAgICAgICAgICAgICBJdCBsb29rcyBsaWtlIEFQSSBjb250cm9sbGVyIHdpdGggZW5kcG9pbnQgJHtldmVudC51cmx9IGRvZXMgbm90IGZvbGxvdyB0aGUgcnVsZSBvZiB0aGUgQXBwIChtdXN0IHJldHVybiBPayhGb3JtYXRlZFJlc3BvbnNlKSlcclxuICAgICAgICAgICAgICAgICAgICBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gY2hhbmdlIHRoZSBiYWNrIGVuZCBjb2RlLiBPdGhlcndpc2UgeW91ciBjb2RlIG1pZ2h0IG5vdCB3b3JrLCBvciBkb2VzIHdvcmsgYnV0IE5PVCBDT1JSRUNUTFkhXHJcbiAgICAgICAgICAgICAgICAgICAgYCwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQudXJsPy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJy9hcGkvZ3JwYycpISA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SW5uZXJCb2R5ID0gdGhpcy5ncnBjU2VydmljZS5jb252ZXJ0VG9DYW1lbENhc2UoSlNPTi5wYXJzZSgoZXZlbnQuYm9keSBhcyBJRm9ybWF0ZWRSZXNwb25zZSk/LmlubmVyQm9keSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuY2xvbmUoeyBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ldmVudC5ib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJCb2R5OiBuZXdJbm5lckJvZHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSJdfQ==
|
|
93
|
+
// Fn style
|
|
94
|
+
export function responseInterceptor(req, next) {
|
|
95
|
+
const responseService = inject(ResponseService);
|
|
96
|
+
return next(req).pipe(map((event) => {
|
|
97
|
+
if (event instanceof HttpResponse) {
|
|
98
|
+
const body = event.body;
|
|
99
|
+
responseService.resolve(body);
|
|
100
|
+
}
|
|
101
|
+
return event;
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy9yZXNwb25zZS1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUNtRCxZQUFZLEVBRXJFLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUFjLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7O0FBUS9ELE1BQU0sT0FBTyxtQkFBbUI7SUFFNUIsWUFDWSxZQUEwQixFQUMxQixnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsV0FBd0IsRUFDeEIsR0FBeUI7UUFKekIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBc0I7SUFBSSxDQUFDO0lBRTFDLFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBSzlDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxZQUFZLENBQUMsRUFDOUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFO2dCQUMvQixJQUFJ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SUFDTixDQUFDOzhHQWpGUSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZoQixNQUFNOzsyRkFFVCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOztBQXFGRCxXQUFXO0FBQ1gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQXFCLEVBQUUsSUFBbUI7SUFFMUUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRWhELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7UUFDaEQsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFO1lBRS9CLE1BQU0sSUFBSSxHQUFzQixLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzNDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FFakM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRVIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBIdHRwSW50ZXJjZXB0b3IsIEh0dHBIYW5kbGVyLCBIdHRwUmVxdWVzdCwgSHR0cEV2ZW50LCBIdHRwUmVzcG9uc2UsXHJcbiAgICBIdHRwSGFuZGxlckZuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vbGlicmFyaWVzL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyB9IGZyb20gJy4uL2NvbnN0YW50cy9hbGVydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcmVzcG9uc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XHJcbmltcG9ydCB7IEdycGNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ3JwYy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZXNwb25zZVNlcnZpY2U6IFJlc3BvbnNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGdycGNTZXJ2aWNlOiBHcnBjU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKS5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpLFxyXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHk6IGFueSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5vayAmJiBldmVudC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZXZlbnQuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVNlcnZpY2UucmVzb2x2ZShib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKEpTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiBldmVudC51cmw/LmluZGV4T2YoYCR7dGhpcy5hcHBDb25maWdTZXJ2aWNlLkJBU0VfVVJMfS9zdGF0aWMvZXhjZWwtdGVtcGxhdGVzL2ApISA8IDAgJiYgZXZlbnQub2sgJiYgZXZlbnQuc3RhdHVzID09PSAyMDAgJiYgKGV2ZW50LmJvZHkuaW5uZXJCb2R5Py5pbm5lckJvZHkgIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYFxyXG4gICAgICAgICAgICAgICAgICAgIE5lc3RlZCBpbm5lckJvZHkgZnJvbSAke2V2ZW50LnVybH0gcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICBpbm5lckJvZHkgYuG7iyBs4buTbmcgdHJvbmcgcGjhuqNuIGjhu5NpIHThu6sgJHtldmVudC51cmx9ICBcclxuICAgICAgICAgICAgICAgICAgICBgLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgJHt0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQkFTRV9VUkx9L3N0YXRpYy9leGNlbC10ZW1wbGF0ZXMvYCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYFhsc3gvR2VuZXJhdGVUZW1wbGF0ZWApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBYbHN4L0V4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsYCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYFhsc3gvSW1wb3J0WGxzeFRvRGJgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgWGxzeFJlcG9ydC9HZXRSZXBvcnRgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgR2V0MkNfVENUV185OGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBHZXQyQ19CTlZfMjAwOGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBQcmludENvbnRyYWN0SW5mb2ApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBQcmludEh1V29ya2luZ2ApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBFeHBvcnRUZW1wSW1wb3J0U2FsYXJ5YCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYEV4cG9ydFRlbXBJbXBvcnRUaW1lU2hlZXRgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgSW1wb3J0VGltZVNoZWV0RGFpbHlgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgRXhwb3J0VGVtcEltcG9ydFNoaWZ0U29ydGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBJbXBvcnRTaGlmdFNvcnRgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgSW1wb3J0RGVjbGFyZVNlbmlvcml0eWApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBFeHBvcnRUZW1wSW1wb3J0QmFzaWNgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgSW1wb3J0UmVnaXN0ZXJMZWF2ZWApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBJbXBvcnRSZWdpc3Rlck9UYCkhIDwgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBldmVudC51cmw/LmluZGV4T2YoYEV4cG9ydFRlbXBgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnVybD8uaW5kZXhPZihgSW1wb3J0VGVtcGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBQcmludGApISA8IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQudXJsPy5pbmRleE9mKGBGaWxlRG93bmxvYWRgKSEgPCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50Lm9rICYmIGV2ZW50LnN0YXR1cyA9PT0gMjAwICYmIChldmVudC5ib2R5LmlubmVyQm9keSA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LmJvZHkuZXJyb3JUeXBlID09PSB1bmRlZmluZWQgfHwgZXZlbnQuYm9keS5tZXNzYWdlQ29kZSA9PT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgXHJcbiAgICAgICAgICAgICAgICAgICAgSXQgbG9va3MgbGlrZSBBUEkgY29udHJvbGxlciB3aXRoIGVuZHBvaW50ICR7ZXZlbnQudXJsfSBkb2VzIG5vdCBmb2xsb3cgdGhlIHJ1bGUgb2YgdGhlIEFwcCAobXVzdCByZXR1cm4gT2soRm9ybWF0ZWRSZXNwb25zZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGNoYW5nZSB0aGUgYmFjayBlbmQgY29kZS4gT3RoZXJ3aXNlIHlvdXIgY29kZSBtaWdodCBub3Qgd29yaywgb3IgZG9lcyB3b3JrIGJ1dCBOT1QgQ09SUkVDVExZIVxyXG4gICAgICAgICAgICAgICAgICAgIGAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnVybD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCcvYXBpL2dycGMnKSEgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0lubmVyQm9keSA9IHRoaXMuZ3JwY1NlcnZpY2UuY29udmVydFRvQ2FtZWxDYXNlKEpTT04ucGFyc2UoKGV2ZW50LmJvZHkgYXMgSUZvcm1hdGVkUmVzcG9uc2UpPy5pbm5lckJvZHkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmNsb25lKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ldmVudC5ib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQm9keTogbmV3SW5uZXJCb2R5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gRm4gc3R5bGVcclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3BvbnNlSW50ZXJjZXB0b3IocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlckZuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcclxuXHJcbiAgICBjb25zdCByZXNwb25zZVNlcnZpY2UgPSBpbmplY3QoUmVzcG9uc2VTZXJ2aWNlKTtcclxuXHJcbiAgICByZXR1cm4gbmV4dChyZXEpLnBpcGUobWFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0gZXZlbnQuYm9keTtcclxuICAgICAgICAgICAgcmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICB9KSk7XHJcblxyXG59Il19
|
|
@@ -13,4 +13,11 @@ export class TimeZoneInterceptor {
|
|
|
13
13
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TimeZoneInterceptor, decorators: [{
|
|
14
14
|
type: Injectable
|
|
15
15
|
}] });
|
|
16
|
-
|
|
16
|
+
// Fn style
|
|
17
|
+
export function timeZoneInterceptor(req, next) {
|
|
18
|
+
const modifiedReq = req.clone({
|
|
19
|
+
headers: req.headers.set('Angular-Local-Time-Zone-Iana', Intl.DateTimeFormat().resolvedOptions().timeZone),
|
|
20
|
+
});
|
|
21
|
+
return next(modifiedReq);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS16b25lLWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvaHR0cC1pbnRlcmNlcHRvcnMvdGltZS16b25lLWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDdkIsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFFdkQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUM1QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztTQUMzRyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs4R0FSVSxtQkFBbUI7a0hBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVTs7QUFZWCxXQUFXO0FBQ1gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQXFCLEVBQUUsSUFBbUI7SUFFNUUsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUM1QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztLQUMzRyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEhhbmRsZXJGbiwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUaW1lWm9uZUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBwdWJsaWMgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcblxyXG4gICAgY29uc3QgbW9kaWZpZWRSZXEgPSByZXEuY2xvbmUoe1xyXG4gICAgICBoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoJ0FuZ3VsYXItTG9jYWwtVGltZS1ab25lLUlhbmEnLCBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKG1vZGlmaWVkUmVxKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEZuIHN0eWxlXHJcbmV4cG9ydCBmdW5jdGlvbiB0aW1lWm9uZUludGVyY2VwdG9yKHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXJGbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XHJcblxyXG4gIGNvbnN0IG1vZGlmaWVkUmVxID0gcmVxLmNsb25lKHtcclxuICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldCgnQW5ndWxhci1Mb2NhbC1UaW1lLVpvbmUtSWFuYScsIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSksXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBuZXh0KG1vZGlmaWVkUmVxKTtcclxufSJdfQ==
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, catchError, filter, finalize, switchMap, take, tap, throwError } from 'rxjs';
|
|
3
|
+
import { AuthService } from '../services/auth.service';
|
|
4
4
|
import { InterceptorStatisticHeader } from "./base-url-interceptor";
|
|
5
|
+
import { StatisticAuthService } from '../services/statistic-auth.service';
|
|
5
6
|
import { HttpResponse } from '@angular/common/http';
|
|
7
|
+
import { AlertService } from '../libraries/alert/alert.service';
|
|
8
|
+
import { MultiLanguageService } from '../services/multi-language.service';
|
|
9
|
+
import { alertOptions } from '../constants/alertOptions';
|
|
6
10
|
import * as i0 from "@angular/core";
|
|
7
11
|
import * as i1 from "../services/auth.service";
|
|
8
12
|
import * as i2 from "../services/statistic-auth.service";
|
|
@@ -43,16 +47,6 @@ export class TokenInterceptor {
|
|
|
43
47
|
console.log("app.config.json excluded");
|
|
44
48
|
return next.handle(req);
|
|
45
49
|
}
|
|
46
|
-
/* WHY???
|
|
47
|
-
if (req.url.includes("GenerateTemplate")) {
|
|
48
|
-
console.log("GenerateTemplate excluded")
|
|
49
|
-
return next.handle(req);
|
|
50
|
-
}
|
|
51
|
-
if (req.url.includes("ExportCorePageListGridToExcel")) {
|
|
52
|
-
console.log("ExportCorePageListGridToExcel excluded")
|
|
53
|
-
return next.handle(req);
|
|
54
|
-
}
|
|
55
|
-
*/
|
|
56
50
|
let ok;
|
|
57
51
|
// extend server response observable with logging
|
|
58
52
|
return next.handle(req)
|
|
@@ -151,4 +145,110 @@ export class TokenInterceptor {
|
|
|
151
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
152
146
|
type: Injectable
|
|
153
147
|
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.StatisticAuthService }, { type: i3.AppInitializationService }, { type: i4.Router }] });
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy90b2tlbi1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLGVBQWUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTNFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3BFLE9BQU8sRUFDd0MsWUFBWSxFQUMxRCxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFHOUIsTUFBTSxPQUFPLGdCQUFnQjtJQUV6QixzQkFBc0IsQ0FBQyxPQUF5QjtRQUU1QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRXhFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXhELGdFQUFnRTtRQUNoRSxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBRUQsa0VBQWtFO1FBQ2xFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxF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LFVBQVUsRUFBRSxDQUFDO3lCQUM1QjtvQkFDTCxDQUFDLENBQUMsQ0FBQTtvQkFFRixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLENBQUMsQ0FDTCxDQUFBO2FBQ0o7UUFDTCxDQUFDLENBQUM7UUFDRiwwREFBMEQ7UUFDMUQsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUN0QixDQUFDO0lBQ1YsQ0FBQzs4R0FwTFEsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaWx0ZXIsIGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRhcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAtaW5pdGlhbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyIH0gZnJvbSBcIi4vYmFzZS11cmwtaW50ZXJjZXB0b3JcIjtcclxuaW1wb3J0IHsgU3RhdGlzdGljQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0aXN0aWMtYXV0aC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBIdHRwSW50ZXJjZXB0b3IsIEh0dHBIYW5kbGVyLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcblxyXG4gICAgYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhdGlzdGljID0gcmVxdWVzdC5oZWFkZXJzLmhhcyhJbnRlcmNlcHRvclN0YXRpc3RpY0hlYWRlcik7XHJcbiAgICAgICAgY29uc3QgYXV0aFNlcnZpY2UgPSBpc1N0YXRpc3RpYyA/IHRoaXMuc3RhdGlzdGljQXV0aFNlcnZpY2UgOiB0aGlzLmF1dGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCk7XHJcblxyXG4gICAgICAgIC8vIElmIGFjY2VzcyB0b2tlbiBpcyBudWxsIHRoaXMgbWVhbnMgdGhhdCB1c2VyIGlzIG5vdCBsb2dnZWQgaW5cclxuICAgICAgICAvLyBBbmQgd2UgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXF1ZXN0XHJcbiAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFdlIGNsb25lIHRoZSByZXF1ZXN0LCBiZWNhdXNlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGlzIGltbXV0YWJsZVxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHtcclxuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVmcmVzaFRva2VuSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgLy8gUmVmcmVzaCBUb2tlbiBTdWJqZWN0IHRyYWNrcyB0aGUgY3VycmVudCB0b2tlbiwgXHJcbiAgICAvLyBvciBpcyBudWxsIGlmIG5vIHRva2VuIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgKGUuZy4gcmVmcmVzaCBwZW5kaW5nKS5cclxuICAgIHByaXZhdGUgcmVmcmVzaFRva2VuU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oXHJcbiAgICAgICAgbnVsbFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGF1dGg6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc3RhdGlzdGljQXV0aFNlcnZpY2U6IFN0YXRpc3RpY0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYXBwSW5pdGlhbGl6YXRpb25TZXJ2aWNlOiBBcHBJbml0aWFsaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhdGlzdGljID0gcmVxLmhlYWRlcnMuaGFzKEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyKTtcclxuICAgICAgICBjb25zdCBhdXRoU2VydmljZSA9IGlzU3RhdGlzdGljID8gdGhpcy5zdGF0aXN0aWNBdXRoU2VydmljZSA6IHRoaXMuYXV0aDtcclxuXHJcblxyXG4gICAgICAgIGlmIChyZXEudXJsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVxLnVybC5pbmNsdWRlcyhcImFwcC5jb25maWcuanNvblwiKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFwcC5jb25maWcuanNvbiBleGNsdWRlZFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFdIWT8/P1xyXG4gICAgICAgIGlmIChyZXEudXJsLmluY2x1ZGVzKFwiR2VuZXJhdGVUZW1wbGF0ZVwiKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkdlbmVyYXRlVGVtcGxhdGUgZXhjbHVkZWRcIilcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXEudXJsLmluY2x1ZGVzKFwiRXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxcIikpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbCBleGNsdWRlZFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKi9cclxuXHJcbiAgICAgICAgbGV0IG9rOiBzdHJpbmc7XHJcbiAgICAgICAgLy8gZXh0ZW5kIHNlcnZlciByZXNwb25zZSBvYnNlcnZhYmxlIHdpdGggbG9nZ2luZ1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFwKHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTdWNjZWVkcyB3aGVuIHRoZXJlIGlzIGEgcmVzcG9uc2U7IGlnbm9yZSBvdGhlciBldmVudHNcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBldmVudCA9PiAob2sgPSBldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/ICdzdWNjZWVkZWQnIDogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7IH0gLy8gd2UgZG8gbm90IGltcGxlbWVudCB0aGUgbG9naWMgaGVyZVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAvLyBCdXQgaGVyZTpcclxuICAgICAgICAgICAgICAgIC8vIE9wZXJhdGlvbiBmYWlsZWQ7IGVycm9yIGlzIGFuIEh0dHBFcnJvclJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChyZXNwb25zZTogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVG9rZW5JbnRlcmNlcHRvciBFcnJvcjogXCIsIHJlcSwgcmVzcG9uc2UpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVmcmVzaCB0b2tlbiBmb3Igc29tZSByZXF1ZXN0cyBcclxuICAgICAgICAgICAgICAgICAgICAvLyBsaWtlIGxvZ2luIG9yIHJlZnJlc2ggdG9rZW4gaXRzZWxmXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU28gd2UgdmVyaWZ5IHVybCBhbmQgd2UgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyB0aGUgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdMT0dJTicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcS51cmwudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnUkVGUkVTSF9UT0tFTicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcS51cmwudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnUkVGUkVTSFRPS0VOJylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gYW5vdGhlciBjaGVjayB0byBzZWUgaWYgcmVmcmVzaCB0b2tlbiBmYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gbG9nb3V0IHVzZXIgYW5kIHRvIHJlZGlyZWN0IGl0IHRvIGxvZ2luIHBhZ2VcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS51cmwudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnUkVGUkVTSF9UT0tFTicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEudXJsLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoJ1JFRlJFU0hUT0tFTicpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwSW5pdGlhbGl6YXRpb25TZXJ2aWNlLmluaXRpYWxpemluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoU2VydmljZS51c2VyTG9nb3V0KCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UucG9zdExvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXJyb3Igc3RhdHVzIGlzIGRpZmZlcmVudCB0aGFuIDQwMSBcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHNraXAgcmVmcmVzaCB0b2tlblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNvIHdlIGNoZWNrIHRoYXQgYW5kIHRocm93IHRoZSBlcnJvciBpZiBpdCdzIHRoZSBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gNDAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVmcmVzaFRva2VuSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiByZWZyZXNoVG9rZW5JblByb2dyZXNzIGlzIHRydWUsIHdlIHdpbGwgd2FpdCB1bnRpbCByZWZyZXNoVG9rZW5TdWJqZWN0IGhhcyBhIG5vbi1udWxsIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOKAkyB3aGljaCBtZWFucyB0aGUgbmV3IHRva2VuIGlzIHJlYWR5IGFuZCB3ZSBjYW4gcmV0cnkgdGhlIHJlcXVlc3QgYWdhaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyOiBFbWl0IHZhbHVlcyB0aGF0IHBhc3MgdGhlIHByb3ZpZGVkIGNvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQgIT09IG51bGwpLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHN3aXRjaE1hcCBhbmQgb3RoZXIgZmxhdHRlbmluZyBvcGVyYXRvcnMgaXMgdGhlIGNhbmNlbGxpbmcgZWZmZWN0LiBPbiBlYWNoIGVtaXNzaW9uIHRoZSBwcmV2aW91cyBpbm5lciBvYnNlcnZhYmxlICh0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiB5b3Ugc3VwcGxpZWQpIGlzIGNhbmNlbGxlZCBhbmQgdGhlIG5ldyBvYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuIFlvdSBjYW4gcmVtZW1iZXIgdGhpcyBieSB0aGUgcGhyYXNlIHN3aXRjaCB0byBhIG5ldyBvYnNlcnZhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBuZXh0LmhhbmRsZSh0aGlzLmFkZEF1dGhlbnRpY2F0aW9uVG9rZW4ocmVxKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlPy50b1VwcGVyQ2FzZSgpIHx8IHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5JblByb2dyZXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcmVmcmVzaFRva2VuU3ViamVjdCB0byBudWxsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHN1YnNlcXVlbnQgQVBJIGNhbGxzIHdpbGwgd2FpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1bnRpbCB0aGUgbmV3IHRva2VuIGhhcyBiZWVuIHJldHJpZXZlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dChudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHRoaXMgaXMgYW4gT2JzZXJ2YWJsZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoVG9rZW5SZXEgPSBhdXRoU2VydmljZS50cnlSZXN0b3JlU2Vzc2lvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZnJlc2hUb2tlblJlcS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBzd2l0Y2hNYXAgYW5kIG90aGVyIGZsYXR0ZW5pbmcgb3BlcmF0b3JzIGlzIHRoZSBjYW5jZWxsaW5nIGVmZmVjdC4gT24gZWFjaCBlbWlzc2lvbiB0aGUgcHJldmlvdXMgaW5uZXIgb2JzZXJ2YWJsZSAodGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24geW91IHN1cHBsaWVkKSBpcyBjYW5jZWxsZWQgYW5kIHRoZSBuZXcgb2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkLiBZb3UgY2FuIHJlbWVtYmVyIHRoaXMgYnkgdGhlIHBocmFzZSBzd2l0Y2ggdG8gYSBuZXcgb2JzZXJ2YWJsZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW4gPSAnJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm9rICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhTZXJ2aWNlLmRhdGEkLm5leHQocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZWQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gcmVzcG9uc2UuYm9keS5qd3RUb2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhbGwgdG8gcmVmcmVzaFRva2VuIGNvbXBsZXRlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXNldCB0aGUgcmVmcmVzaFRva2VuSW5Qcm9ncmVzcyB0byBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgbmV4dCB0aW1lIHRoZSB0b2tlbiBuZWVkcyB0byBiZSByZWZyZXNoZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dCh0b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UmVxID0gdGhpcy5hZGRBdXRoZW50aWNhdGlvblRva2VuKHJlcSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKG5ld1JlcSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5JblByb2dyZXNzID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVmcmVzaFRva2VuUmVxIGNhdGNoRXJyb3JcIiwgZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UudXNlckxvZ291dCgpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UucG9zdExvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgLy8gTG9nIHdoZW4gcmVzcG9uc2Ugb2JzZXJ2YWJsZSBlaXRoZXIgY29tcGxldGVzIG9yIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxufSJdfQ==
|
|
148
|
+
// Fn style
|
|
149
|
+
export function tokenInterceptor(req, next) {
|
|
150
|
+
const isStatistic = req.headers.has(InterceptorStatisticHeader);
|
|
151
|
+
let ok;
|
|
152
|
+
const authService = isStatistic ? inject(StatisticAuthService) : inject(AuthService);
|
|
153
|
+
const alertService = inject(AlertService);
|
|
154
|
+
const mls = inject(MultiLanguageService);
|
|
155
|
+
const addAuthenticationToken = (request) => {
|
|
156
|
+
// Get access token from Local Storage
|
|
157
|
+
const accessToken = authService.getAuthorizationToken();
|
|
158
|
+
// If access token is null this means that user is not logged in
|
|
159
|
+
// And we return the original request
|
|
160
|
+
if (!accessToken) {
|
|
161
|
+
return request;
|
|
162
|
+
}
|
|
163
|
+
// We clone the request, because the original request is immutable
|
|
164
|
+
return request.clone({
|
|
165
|
+
headers: request.headers.set('Authorization', 'Bearer ' + accessToken)
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
// extend server response observable with logging
|
|
169
|
+
return next(req)
|
|
170
|
+
.pipe(
|
|
171
|
+
//tap: Transparently perform actions or side-effects, such as logging.
|
|
172
|
+
tap({
|
|
173
|
+
// Succeeds when there is a response; ignore other events
|
|
174
|
+
next: event => (ok = event instanceof HttpResponse ? 'succeeded' : ''),
|
|
175
|
+
error: () => { } // we do not implement the logic here
|
|
176
|
+
}),
|
|
177
|
+
// But here:
|
|
178
|
+
// Operation failed; error is an HttpErrorResponse
|
|
179
|
+
catchError((response) => {
|
|
180
|
+
console.log("Error: ", response);
|
|
181
|
+
// We don't want to refresh token for some requests
|
|
182
|
+
// like login or refresh token itself
|
|
183
|
+
// So we verify url and we throw an error if it's the case
|
|
184
|
+
if (req.url.toUpperCase().includes('LOGIN') ||
|
|
185
|
+
req.url.toUpperCase().includes('REFRESH_TOKEN') ||
|
|
186
|
+
req.url.toUpperCase().includes('REFRESHTOKEN')) {
|
|
187
|
+
// We do another check to see if refresh token failed
|
|
188
|
+
// In this case we want to logout user and to redirect it to login page
|
|
189
|
+
if (req.url.toUpperCase().includes('REFRESH_TOKEN') ||
|
|
190
|
+
req.url.toUpperCase().includes('REFRESHTOKEN')) {
|
|
191
|
+
authService.userLogout().subscribe(x => {
|
|
192
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
193
|
+
authService.postLogout();
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return throwError(() => new Error(JSON.stringify(response)));
|
|
198
|
+
}
|
|
199
|
+
// If error status is different than 401
|
|
200
|
+
// we want to skip refresh token
|
|
201
|
+
// So we check that and throw the error if it's the case
|
|
202
|
+
if (response.status !== 401) {
|
|
203
|
+
return throwError(() => new Error(response.error));
|
|
204
|
+
}
|
|
205
|
+
if (authService.refreshTokenInProgress) {
|
|
206
|
+
// If refreshTokenInProgress is true, we will wait until refreshTokenSubject has a non-null value
|
|
207
|
+
// – which means the new token is ready and we can retry the request again
|
|
208
|
+
return authService.refreshTokenSubject.pipe(
|
|
209
|
+
// filter: Emit values that pass the provided condition
|
|
210
|
+
filter(result => result !== null), take(1),
|
|
211
|
+
//The main difference between switchMap and other flattening operators is the cancelling effect. On each emission the previous inner observable (the result of the function you supplied) is cancelled and the new observable is subscribed. You can remember this by the phrase switch to a new observable.
|
|
212
|
+
switchMap(() => next(addAuthenticationToken(req))));
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
console.error(response.error?.message?.toUpperCase() || response);
|
|
216
|
+
authService.refreshTokenInProgress = true;
|
|
217
|
+
// Set the refreshTokenSubject to null
|
|
218
|
+
// so that subsequent API calls will wait
|
|
219
|
+
// until the new token has been retrieved
|
|
220
|
+
authService.refreshTokenSubject.next(null);
|
|
221
|
+
// Call auth.refreshAccessToken
|
|
222
|
+
// (this is an Observable that will be returned)
|
|
223
|
+
const start = new Date().getTime();
|
|
224
|
+
const refreshTokenReq = authService.tryRestoreSession();
|
|
225
|
+
return refreshTokenReq.pipe(
|
|
226
|
+
//The main difference between switchMap and other flattening operators is the cancelling effect. On each emission the previous inner observable (the result of the function you supplied) is cancelled and the new observable is subscribed. You can remember this by the phrase switch to a new observable.
|
|
227
|
+
switchMap((x) => {
|
|
228
|
+
let token = '';
|
|
229
|
+
authService.resolveAuthenticateResponse(x);
|
|
230
|
+
// When the call to refreshToken completes
|
|
231
|
+
// we reset the refreshTokenInProgress to false
|
|
232
|
+
// for the next time the token needs to be refreshed
|
|
233
|
+
authService.refreshTokenInProgress = false;
|
|
234
|
+
const end = new Date().getTime();
|
|
235
|
+
const duration = (end - start) / 1000;
|
|
236
|
+
alertService.info(mls.trans("REFRESH_TOKEN_COMPLETE") + ` (${duration}s)`, alertOptions);
|
|
237
|
+
authService.refreshTokenSubject.next(token);
|
|
238
|
+
const newReq = addAuthenticationToken(req);
|
|
239
|
+
return next(newReq);
|
|
240
|
+
}), catchError((err) => {
|
|
241
|
+
authService.refreshTokenInProgress = false;
|
|
242
|
+
authService.userLogout().subscribe(x => {
|
|
243
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
244
|
+
authService.postLogout();
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
return throwError(() => new Error(err));
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
250
|
+
}),
|
|
251
|
+
// Log when response observable either completes or errors
|
|
252
|
+
finalize(() => { }));
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy90b2tlbi1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUluSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFMUUsT0FBTyxFQUN3QyxZQUFZLEVBQzFELE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBR3pELE1BQU0sT0FBTyxnQkFBZ0I7SUFFekIsc0JBQXNCLENBQUMsT0FBeUI7UUFFNUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNwRSxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUV4RSxNQUFNLFdBQVcsR0FBRyxXQUFX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QU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNwQixXQUFXLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO2dCQUUzQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNuQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLEtBQUssR0FBRyxFQUFFO3dCQUN4RCxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7cUJBQzVCO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtTQUNKO0lBQ0wsQ0FBQyxDQUFDO0lBQ0YsMERBQTBEO0lBQzFELFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FDdEIsQ0FBQztBQUNWLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBmaWx0ZXIsIGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyRm4gfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcEluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FwcC1pbml0aWFsaXphdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW50ZXJjZXB0b3JTdGF0aXN0aWNIZWFkZXIgfSBmcm9tIFwiLi9iYXNlLXVybC1pbnRlcmNlcHRvclwiO1xyXG5pbXBvcnQgeyBTdGF0aXN0aWNBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRpc3RpYy1hdXRoLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEh0dHBJbnRlcmNlcHRvciwgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2VcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2xpYnJhcmllcy9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gJ2FscGhhLWdsb2JhbC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMgfSBmcm9tICcuLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICAgIGFkZEF1dGhlbnRpY2F0aW9uVG9rZW4ocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IEh0dHBSZXF1ZXN0PGFueT4ge1xyXG5cclxuICAgICAgICBjb25zdCBpc1N0YXRpc3RpYyA9IHJlcXVlc3QuaGVhZGVycy5oYXMoSW50ZXJjZXB0b3JTdGF0aXN0aWNIZWFkZXIpO1xyXG4gICAgICAgIGNvbnN0IGF1dGhTZXJ2aWNlID0gaXNTdGF0aXN0aWMgPyB0aGlzLnN0YXRpc3RpY0F1dGhTZXJ2aWNlIDogdGhpcy5hdXRoO1xyXG5cclxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpO1xyXG5cclxuICAgICAgICAvLyBJZiBhY2Nlc3MgdG9rZW4gaXMgbnVsbCB0aGlzIG1lYW5zIHRoYXQgdXNlciBpcyBub3QgbG9nZ2VkIGluXHJcbiAgICAgICAgLy8gQW5kIHdlIHJldHVybiB0aGUgb3JpZ2luYWwgcmVxdWVzdFxyXG4gICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXZSBjbG9uZSB0aGUgcmVxdWVzdCwgYmVjYXVzZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBpcyBpbW11dGFibGVcclxuICAgICAgICByZXR1cm4gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbilcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIC8vIFJlZnJlc2ggVG9rZW4gU3ViamVjdCB0cmFja3MgdGhlIGN1cnJlbnQgdG9rZW4sIFxyXG4gICAgLy8gb3IgaXMgbnVsbCBpZiBubyB0b2tlbiBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIChlLmcuIHJlZnJlc2ggcGVuZGluZykuXHJcbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFxyXG4gICAgICAgIG51bGxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhdXRoOiBBdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHN0YXRpc3RpY0F1dGhTZXJ2aWNlOiBTdGF0aXN0aWNBdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFwcEluaXRpYWxpemF0aW9uU2VydmljZTogQXBwSW5pdGlhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG5cclxuICAgICAgICBjb25zdCBpc1N0YXRpc3RpYyA9IHJlcS5oZWFkZXJzLmhhcyhJbnRlcmNlcHRvclN0YXRpc3RpY0hlYWRlcik7XHJcbiAgICAgICAgY29uc3QgYXV0aFNlcnZpY2UgPSBpc1N0YXRpc3RpYyA/IHRoaXMuc3RhdGlzdGljQXV0aFNlcnZpY2UgOiB0aGlzLmF1dGg7XHJcblxyXG5cclxuICAgICAgICBpZiAocmVxLnVybCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcS51cmwuaW5jbHVkZXMoXCJhcHAuY29uZmlnLmpzb25cIikpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhcHAuY29uZmlnLmpzb24gZXhjbHVkZWRcIilcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2s6IHN0cmluZztcclxuICAgICAgICAvLyBleHRlbmQgc2VydmVyIHJlc3BvbnNlIG9ic2VydmFibGUgd2l0aCBsb2dnaW5nXHJcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YXAoe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1Y2NlZWRzIHdoZW4gdGhlcmUgaXMgYSByZXNwb25zZTsgaWdub3JlIG90aGVyIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGV2ZW50ID0+IChvayA9IGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gJ3N1Y2NlZWRlZCcgOiAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHsgfSAvLyB3ZSBkbyBub3QgaW1wbGVtZW50IHRoZSBsb2dpYyBoZXJlXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIC8vIEJ1dCBoZXJlOlxyXG4gICAgICAgICAgICAgICAgLy8gT3BlcmF0aW9uIGZhaWxlZDsgZXJyb3IgaXMgYW4gSHR0cEVycm9yUmVzcG9uc2VcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUb2tlbkludGVyY2VwdG9yIEVycm9yOiBcIiwgcmVxLCByZXNwb25zZSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZWZyZXNoIHRva2VuIGZvciBzb21lIHJlcXVlc3RzIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGxpa2UgbG9naW4gb3IgcmVmcmVzaCB0b2tlbiBpdHNlbGZcclxuICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSB2ZXJpZnkgdXJsIGFuZCB3ZSB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIHRoZSBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXEudXJsLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoJ0xPR0lOJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIX1RPS0VOJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIVE9LRU4nKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNrIHRvIHNlZSBpZiByZWZyZXNoIHRva2VuIGZhaWxlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBsb2dvdXQgdXNlciBhbmQgdG8gcmVkaXJlY3QgaXQgdG8gbG9naW4gcGFnZVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIX1RPS0VOJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS51cmwudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnUkVGUkVTSFRPS0VOJylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBJbml0aWFsaXphdGlvblNlcnZpY2UuaW5pdGlhbGl6aW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhTZXJ2aWNlLnVzZXJMb2dvdXQoKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoU2VydmljZS5wb3N0TG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShyZXNwb25zZSkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBlcnJvciBzdGF0dXMgaXMgZGlmZmVyZW50IHRoYW4gNDAxIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gc2tpcCByZWZyZXNoIHRva2VuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU28gd2UgY2hlY2sgdGhhdCBhbmQgdGhyb3cgdGhlIGVycm9yIGlmIGl0J3MgdGhlIGNhc2VcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSA0MDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoVG9rZW5JblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgaXMgdHJ1ZSwgd2Ugd2lsbCB3YWl0IHVudGlsIHJlZnJlc2hUb2tlblN1YmplY3QgaGFzIGEgbm9uLW51bGwgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g4oCTIHdoaWNoIG1lYW5zIHRoZSBuZXcgdG9rZW4gaXMgcmVhZHkgYW5kIHdlIGNhbiByZXRyeSB0aGUgcmVxdWVzdCBhZ2FpblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0LnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXI6IEVtaXQgdmFsdWVzIHRoYXQgcGFzcyB0aGUgcHJvdmlkZWQgY29uZGl0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIocmVzdWx0ID0+IHJlc3VsdCAhPT0gbnVsbCksXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gc3dpdGNoTWFwIGFuZCBvdGhlciBmbGF0dGVuaW5nIG9wZXJhdG9ycyBpcyB0aGUgY2FuY2VsbGluZyBlZmZlY3QuIE9uIGVhY2ggZW1pc3Npb24gdGhlIHByZXZpb3VzIGlubmVyIG9ic2VydmFibGUgKHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIHlvdSBzdXBwbGllZCkgaXMgY2FuY2VsbGVkIGFuZCB0aGUgbmV3IG9ic2VydmFibGUgaXMgc3Vic2NyaWJlZC4gWW91IGNhbiByZW1lbWJlciB0aGlzIGJ5IHRoZSBwaHJhc2Ugc3dpdGNoIHRvIGEgbmV3IG9ic2VydmFibGUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IG5leHQuaGFuZGxlKHRoaXMuYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXEpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2U/LnRvVXBwZXJDYXNlKCkgfHwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSByZWZyZXNoVG9rZW5TdWJqZWN0IHRvIG51bGwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgc3Vic2VxdWVudCBBUEkgY2FsbHMgd2lsbCB3YWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVudGlsIHRoZSBuZXcgdG9rZW4gaGFzIGJlZW4gcmV0cmlldmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBhdXRoLnJlZnJlc2hBY2Nlc3NUb2tlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAodGhpcyBpcyBhbiBPYnNlcnZhYmxlIHRoYXQgd2lsbCBiZSByZXR1cm5lZClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlblJlcSA9IGF1dGhTZXJ2aWNlLnRyeVJlc3RvcmVTZXNzaW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmcmVzaFRva2VuUmVxLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHN3aXRjaE1hcCBhbmQgb3RoZXIgZmxhdHRlbmluZyBvcGVyYXRvcnMgaXMgdGhlIGNhbmNlbGxpbmcgZWZmZWN0LiBPbiBlYWNoIGVtaXNzaW9uIHRoZSBwcmV2aW91cyBpbm5lciBvYnNlcnZhYmxlICh0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiB5b3Ugc3VwcGxpZWQpIGlzIGNhbmNlbGxlZCBhbmQgdGhlIG5ldyBvYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuIFlvdSBjYW4gcmVtZW1iZXIgdGhpcyBieSB0aGUgcGhyYXNlIHN3aXRjaCB0byBhIG5ldyBvYnNlcnZhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2sgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UuZGF0YSQubmV4dChyZXNwb25zZS5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UuYXV0aGVudGljYXRlZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSByZXNwb25zZS5ib2R5Lmp3dFRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgY2FsbCB0byByZWZyZXNoVG9rZW4gY29tcGxldGVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlc2V0IHRoZSByZWZyZXNoVG9rZW5JblByb2dyZXNzIHRvIGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBuZXh0IHRpbWUgdGhlIHRva2VuIG5lZWRzIHRvIGJlIHJlZnJlc2hlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KHRva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdSZXEgPSB0aGlzLmFkZEF1dGhlbnRpY2F0aW9uVG9rZW4ocmVxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUobmV3UmVxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJyZWZyZXNoVG9rZW5SZXEgY2F0Y2hFcnJvclwiLCBlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoU2VydmljZS51c2VyTG9nb3V0KCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoU2VydmljZS5wb3N0TG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAvLyBMb2cgd2hlbiByZXNwb25zZSBvYnNlcnZhYmxlIGVpdGhlciBjb21wbGV0ZXMgb3IgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7IH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG4vLyBGbiBzdHlsZVxyXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5JbnRlcmNlcHRvcihyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyRm4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xyXG5cclxuICAgIGNvbnN0IGlzU3RhdGlzdGljID0gcmVxLmhlYWRlcnMuaGFzKEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyKTtcclxuXHJcbiAgICBsZXQgb2s6IHN0cmluZztcclxuICAgIGNvbnN0IGF1dGhTZXJ2aWNlID0gaXNTdGF0aXN0aWMgPyBpbmplY3QoU3RhdGlzdGljQXV0aFNlcnZpY2UpIDogaW5qZWN0KEF1dGhTZXJ2aWNlKTtcclxuICAgIGNvbnN0IGFsZXJ0U2VydmljZSA9IGluamVjdChBbGVydFNlcnZpY2UpO1xyXG4gICAgY29uc3QgbWxzID0gaW5qZWN0KE11bHRpTGFuZ3VhZ2VTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBhZGRBdXRoZW50aWNhdGlvblRva2VuID0gKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pID0+IHtcclxuICAgICAgICAvLyBHZXQgYWNjZXNzIHRva2VuIGZyb20gTG9jYWwgU3RvcmFnZVxyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCk7XHJcblxyXG4gICAgICAgIC8vIElmIGFjY2VzcyB0b2tlbiBpcyBudWxsIHRoaXMgbWVhbnMgdGhhdCB1c2VyIGlzIG5vdCBsb2dnZWQgaW5cclxuICAgICAgICAvLyBBbmQgd2UgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXF1ZXN0XHJcbiAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFdlIGNsb25lIHRoZSByZXF1ZXN0LCBiZWNhdXNlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGlzIGltbXV0YWJsZVxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHtcclxuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGV4dGVuZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JzZXJ2YWJsZSB3aXRoIGxvZ2dpbmdcclxuICAgIHJldHVybiBuZXh0KHJlcSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgLy90YXA6IFRyYW5zcGFyZW50bHkgcGVyZm9ybSBhY3Rpb25zIG9yIHNpZGUtZWZmZWN0cywgc3VjaCBhcyBsb2dnaW5nLlxyXG4gICAgICAgICAgICB0YXAoe1xyXG4gICAgICAgICAgICAgICAgLy8gU3VjY2VlZHMgd2hlbiB0aGVyZSBpcyBhIHJlc3BvbnNlOyBpZ25vcmUgb3RoZXIgZXZlbnRzXHJcbiAgICAgICAgICAgICAgICBuZXh0OiBldmVudCA9PiAob2sgPSBldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/ICdzdWNjZWVkZWQnIDogJycpLFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHsgfSAvLyB3ZSBkbyBub3QgaW1wbGVtZW50IHRoZSBsb2dpYyBoZXJlXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAvLyBCdXQgaGVyZTpcclxuICAgICAgICAgICAgLy8gT3BlcmF0aW9uIGZhaWxlZDsgZXJyb3IgaXMgYW4gSHR0cEVycm9yUmVzcG9uc2VcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IFwiLCByZXNwb25zZSlcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlZnJlc2ggdG9rZW4gZm9yIHNvbWUgcmVxdWVzdHMgXHJcbiAgICAgICAgICAgICAgICAvLyBsaWtlIGxvZ2luIG9yIHJlZnJlc2ggdG9rZW4gaXRzZWxmXHJcbiAgICAgICAgICAgICAgICAvLyBTbyB3ZSB2ZXJpZnkgdXJsIGFuZCB3ZSB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIHRoZSBjYXNlXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdMT0dJTicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIX1RPS0VOJykgfHxcclxuICAgICAgICAgICAgICAgICAgICByZXEudXJsLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoJ1JFRlJFU0hUT0tFTicpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNrIHRvIHNlZSBpZiByZWZyZXNoIHRva2VuIGZhaWxlZFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIGxvZ291dCB1c2VyIGFuZCB0byByZWRpcmVjdCBpdCB0byBsb2dpbiBwYWdlXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIX1RPS0VOJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIVE9LRU4nKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UudXNlckxvZ291dCgpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDAgJiYgeC5ib2R5Py5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoU2VydmljZS5wb3N0TG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBlcnJvciBzdGF0dXMgaXMgZGlmZmVyZW50IHRoYW4gNDAxIFxyXG4gICAgICAgICAgICAgICAgLy8gd2Ugd2FudCB0byBza2lwIHJlZnJlc2ggdG9rZW5cclxuICAgICAgICAgICAgICAgIC8vIFNvIHdlIGNoZWNrIHRoYXQgYW5kIHRocm93IHRoZSBlcnJvciBpZiBpdCdzIHRoZSBjYXNlXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSA0MDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgaXMgdHJ1ZSwgd2Ugd2lsbCB3YWl0IHVudGlsIHJlZnJlc2hUb2tlblN1YmplY3QgaGFzIGEgbm9uLW51bGwgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAvLyDigJMgd2hpY2ggbWVhbnMgdGhlIG5ldyB0b2tlbiBpcyByZWFkeSBhbmQgd2UgY2FuIHJldHJ5IHRoZSByZXF1ZXN0IGFnYWluXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlblN1YmplY3QucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyOiBFbWl0IHZhbHVlcyB0aGF0IHBhc3MgdGhlIHByb3ZpZGVkIGNvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIocmVzdWx0ID0+IHJlc3VsdCAhPT0gbnVsbCksXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBzd2l0Y2hNYXAgYW5kIG90aGVyIGZsYXR0ZW5pbmcgb3BlcmF0b3JzIGlzIHRoZSBjYW5jZWxsaW5nIGVmZmVjdC4gT24gZWFjaCBlbWlzc2lvbiB0aGUgcHJldmlvdXMgaW5uZXIgb2JzZXJ2YWJsZSAodGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24geW91IHN1cHBsaWVkKSBpcyBjYW5jZWxsZWQgYW5kIHRoZSBuZXcgb2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkLiBZb3UgY2FuIHJlbWVtYmVyIHRoaXMgYnkgdGhlIHBocmFzZSBzd2l0Y2ggdG8gYSBuZXcgb2JzZXJ2YWJsZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IG5leHQoYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXEpKSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2U/LnRvVXBwZXJDYXNlKCkgfHwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHJlZnJlc2hUb2tlblN1YmplY3QgdG8gbnVsbCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHN1YnNlcXVlbnQgQVBJIGNhbGxzIHdpbGwgd2FpdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHVudGlsIHRoZSBuZXcgdG9rZW4gaGFzIGJlZW4gcmV0cmlldmVkXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gKHRoaXMgaXMgYW4gT2JzZXJ2YWJsZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuUmVxID0gYXV0aFNlcnZpY2UudHJ5UmVzdG9yZVNlc3Npb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZnJlc2hUb2tlblJlcS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBzd2l0Y2hNYXAgYW5kIG90aGVyIGZsYXR0ZW5pbmcgb3BlcmF0b3JzIGlzIHRoZSBjYW5jZWxsaW5nIGVmZmVjdC4gT24gZWFjaCBlbWlzc2lvbiB0aGUgcHJldmlvdXMgaW5uZXIgb2JzZXJ2YWJsZSAodGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24geW91IHN1cHBsaWVkKSBpcyBjYW5jZWxsZWQgYW5kIHRoZSBuZXcgb2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkLiBZb3UgY2FuIHJlbWVtYmVyIHRoaXMgYnkgdGhlIHBocmFzZSBzd2l0Y2ggdG8gYSBuZXcgb2JzZXJ2YWJsZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhTZXJ2aWNlLnJlc29sdmVBdXRoZW50aWNhdGVSZXNwb25zZSh4KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBjYWxsIHRvIHJlZnJlc2hUb2tlbiBjb21wbGV0ZXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXNldCB0aGUgcmVmcmVzaFRva2VuSW5Qcm9ncmVzcyB0byBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBuZXh0IHRpbWUgdGhlIHRva2VuIG5lZWRzIHRvIGJlIHJlZnJlc2hlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IChlbmQgLSBzdGFydCkvMTAwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0U2VydmljZS5pbmZvKG1scy50cmFucyhcIlJFRlJFU0hfVE9LRU5fQ09NUExFVEVcIikgKyBgICgke2R1cmF0aW9ufXMpYCwgYWxlcnRPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoU2VydmljZS5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQodG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UmVxID0gYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQobmV3UmVxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoU2VydmljZS5yZWZyZXNoVG9rZW5JblByb2dyZXNzID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UudXNlckxvZ291dCgpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwICYmIHguYm9keT8uc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhTZXJ2aWNlLnBvc3RMb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAvLyBMb2cgd2hlbiByZXNwb25zZSBvYnNlcnZhYmxlIGVpdGhlciBjb21wbGV0ZXMgb3IgZXJyb3JzXHJcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHsgfSlcclxuICAgICAgICApO1xyXG59Il19
|