@smartbit4all/ng-client 2.0.10 → 2.0.11

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.
@@ -1,7 +1,7 @@
1
- import { Injectable } from "@angular/core";
2
- import { from, throwError } from "rxjs";
3
- import { catchError, switchMap } from "rxjs/operators";
4
- import { SessionErrorBehaviour, } from "./projects";
1
+ import { Injectable } from '@angular/core';
2
+ import { from, throwError } from 'rxjs';
3
+ import { catchError, switchMap } from 'rxjs/operators';
4
+ import { SessionErrorBehaviour, } from './projects';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "./projects";
7
7
  export class SmartErrorCatchingInterceptor {
@@ -9,52 +9,68 @@ export class SmartErrorCatchingInterceptor {
9
9
  this.session = session;
10
10
  this.sessionErrorCodes = [
11
11
  {
12
- code: "session.expired",
12
+ code: 'session.expired',
13
13
  behaviour: SessionErrorBehaviour.REFRESH,
14
14
  },
15
15
  {
16
- code: "session.refreshtoken.invalid",
16
+ code: 'session.refreshtoken.invalid',
17
17
  behaviour: SessionErrorBehaviour.RESTART,
18
18
  },
19
19
  {
20
- code: "session.badrequest.missingtoken",
20
+ code: 'session.badrequest.missingtoken',
21
21
  behaviour: SessionErrorBehaviour.RESTART,
22
22
  },
23
23
  {
24
- code: "session.security.nocontext",
24
+ code: 'session.security.nocontext',
25
25
  behaviour: SessionErrorBehaviour.RESTART,
26
26
  },
27
27
  {
28
- code: "session.invalidsessionuri",
28
+ code: 'session.invalidsessionuri',
29
29
  behaviour: SessionErrorBehaviour.RESTART,
30
30
  },
31
31
  {
32
- code: "session.notinitialized",
32
+ code: 'session.notinitialized',
33
33
  behaviour: SessionErrorBehaviour.RESTART,
34
34
  },
35
35
  {
36
- code: "session.viewcontext.missing",
36
+ code: 'session.viewcontext.missing',
37
37
  behaviour: SessionErrorBehaviour.RESTART,
38
38
  },
39
39
  ];
40
40
  }
41
41
  intercept(request, next) {
42
- return next.handle(request).pipe(catchError((error) => {
43
- if (error.status === 400 && error.error.code) {
44
- let sessionError = this.sessionErrorCodes.find((sessionError) => sessionError.code === error.error.code);
45
- if (sessionError) {
46
- return this.resolveError(sessionError).pipe(switchMap(() => {
47
- this.session.headerParams.map((headerParam) => {
48
- request = request.clone({
49
- headers: request.headers.set(headerParam.headerName, headerParam.value),
50
- });
51
- });
52
- return next.handle(request);
53
- }));
54
- }
42
+ return next
43
+ .handle(request)
44
+ .pipe(catchError((error) => this.handleError(error, request, next)));
45
+ }
46
+ handleError(error, request, next) {
47
+ if (this.isSessionError(error)) {
48
+ const sessionError = this.getSessionError(error);
49
+ if (sessionError) {
50
+ return this.resolveError(sessionError).pipe(switchMap((resolved) => {
51
+ if (resolved && sessionError.behaviour === SessionErrorBehaviour.REFRESH) {
52
+ return next.handle(this.updateRequestHeaders(request));
53
+ }
54
+ return throwError(() => error);
55
+ }), catchError((resolveError) => {
56
+ // when the resolveError throws a restart error (in the refreshSession), rethrow the original error
57
+ if (this.isSessionError(resolveError)) {
58
+ const resolveSessionError = this.getSessionError(resolveError);
59
+ if (resolveSessionError?.behaviour === SessionErrorBehaviour.RESTART) {
60
+ return throwError(() => error);
61
+ }
62
+ }
63
+ return throwError(() => resolveError);
64
+ }));
55
65
  }
56
- return throwError(error);
57
- }));
66
+ }
67
+ return throwError(() => error);
68
+ }
69
+ isSessionError(error) {
70
+ return error.status === 400 && error.error.code != null;
71
+ }
72
+ getSessionError(error) {
73
+ return this.sessionErrorCodes.find((sessionError) => sessionError.code === error.error.code);
58
74
  }
59
75
  resolveError(sessionError) {
60
76
  if (sessionError.behaviour === SessionErrorBehaviour.RESTART) {
@@ -62,10 +78,18 @@ export class SmartErrorCatchingInterceptor {
62
78
  }
63
79
  return from(this.session.refreshSession());
64
80
  }
81
+ updateRequestHeaders(request) {
82
+ this.session.headerParams.forEach((headerParam) => {
83
+ request = request.clone({
84
+ headers: request.headers.set(headerParam.headerName, headerParam.value),
85
+ });
86
+ });
87
+ return request;
88
+ }
65
89
  }
66
90
  SmartErrorCatchingInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartErrorCatchingInterceptor, deps: [{ token: i1.SmartSessionService }], target: i0.ɵɵFactoryTarget.Injectable });
67
91
  SmartErrorCatchingInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartErrorCatchingInterceptor });
68
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartErrorCatchingInterceptor, decorators: [{
69
93
  type: Injectable
70
94
  }], ctorParameters: function () { return [{ type: i1.SmartSessionService }]; } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZXJyb3ItY2F0Y2hpbmcuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LWVycm9yLWNhdGNoaW5nLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBSUgscUJBQXFCLEdBRXhCLE1BQU0sWUFBWSxDQUFDOzs7QUFHcEIsTUFBTSxPQUFPLDZCQUE2QjtJQWdDdEMsWUFBb0IsT0FBNEI7UUFBNUIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUEvQmhELHNCQUFpQixHQUFtQjtZQUNoQztnQkFDSSxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUMzQztZQUNEO2dCQUNJLElBQUksRUFBRSw4QkFBOEI7Z0JBQ3BDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2FBQzNDO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE9BQU87YUFDM0M7WUFDRDtnQkFDSSxJQUFJLEVBQUUsNEJBQTRCO2dCQUNsQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUMzQztZQUNEO2dCQUNJLElBQUksRUFBRSwyQkFBMkI7Z0JBQ2pDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2FBQzNDO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE9BQU87YUFDM0M7WUFDRDtnQkFDSSxJQUFJLEVBQUUsNkJBQTZCO2dCQUNuQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUMzQztTQUNKLENBQUM7SUFFaUQsQ0FBQztJQUVwRCxTQUFTLENBQUMsT0FBNkIsRUFBRSxJQUFpQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSyxLQUFLLENBQUMsS0FBa0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3hELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQzFDLENBQUMsWUFBMEIsRUFBRSxFQUFFLENBQzNCLFlBQVksQ0FBQyxJQUFJLEtBQU0sS0FBSyxDQUFDLEtBQWtCLENBQUMsSUFBSSxDQUMzRCxDQUFDO2dCQUNGLElBQUksWUFBWSxFQUFFO29CQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBd0IsRUFBRSxFQUFFOzRCQUN2RCxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQ0FDcEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUN4QixXQUFXLENBQUMsVUFBVSxFQUN0QixXQUFXLENBQUMsS0FBSyxDQUNwQjs2QkFDSixDQUFDLENBQUM7d0JBQ1AsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNoQyxDQUFDLENBQUMsQ0FDTCxDQUFDO2lCQUNMO2FBQ0o7WUFFRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELFlBQVksQ0FBQyxZQUEwQjtRQUNuQyxJQUFJLFlBQVksQ0FBQyxTQUFTLEtBQUsscUJBQXFCLENBQUMsT0FBTyxFQUFFO1lBQzFELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDOzswSEFyRVEsNkJBQTZCOzhIQUE3Qiw2QkFBNkI7MkZBQTdCLDZCQUE2QjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBIdHRwRXJyb3JSZXNwb25zZSxcclxuICAgIEh0dHBFdmVudCxcclxuICAgIEh0dHBIYW5kbGVyLFxyXG4gICAgSHR0cEludGVyY2VwdG9yLFxyXG4gICAgSHR0cFJlcXVlc3QsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7XHJcbiAgICBBcGlFcnJvcixcclxuICAgIEhlYWRlclBhcmFtLFxyXG4gICAgU2Vzc2lvbkVycm9yLFxyXG4gICAgU2Vzc2lvbkVycm9yQmVoYXZpb3VyLFxyXG4gICAgU21hcnRTZXNzaW9uU2VydmljZSxcclxufSBmcm9tIFwiLi9wcm9qZWN0c1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU21hcnRFcnJvckNhdGNoaW5nSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gICAgc2Vzc2lvbkVycm9yQ29kZXM6IFNlc3Npb25FcnJvcltdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogXCJzZXNzaW9uLmV4cGlyZWRcIixcclxuICAgICAgICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVGUkVTSCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogXCJzZXNzaW9uLnJlZnJlc2h0b2tlbi5pbnZhbGlkXCIsXHJcbiAgICAgICAgICAgIGJlaGF2aW91cjogU2Vzc2lvbkVycm9yQmVoYXZpb3VyLlJFU1RBUlQsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6IFwic2Vzc2lvbi5iYWRyZXF1ZXN0Lm1pc3Npbmd0b2tlblwiLFxyXG4gICAgICAgICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiBcInNlc3Npb24uc2VjdXJpdHkubm9jb250ZXh0XCIsXHJcbiAgICAgICAgICAgIGJlaGF2aW91cjogU2Vzc2lvbkVycm9yQmVoYXZpb3VyLlJFU1RBUlQsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6IFwic2Vzc2lvbi5pbnZhbGlkc2Vzc2lvbnVyaVwiLFxyXG4gICAgICAgICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiBcInNlc3Npb24ubm90aW5pdGlhbGl6ZWRcIixcclxuICAgICAgICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogXCJzZXNzaW9uLnZpZXdjb250ZXh0Lm1pc3NpbmdcIixcclxuICAgICAgICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcclxuICAgICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlc3Npb246IFNtYXJ0U2Vzc2lvblNlcnZpY2UpIHt9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XHJcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAwICYmIChlcnJvci5lcnJvciBhcyBBcGlFcnJvcikuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXNzaW9uRXJyb3IgPSB0aGlzLnNlc3Npb25FcnJvckNvZGVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25FcnJvci5jb2RlID09PSAoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3IpLmNvZGVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUVycm9yKHNlc3Npb25FcnJvcikucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmhlYWRlclBhcmFtcy5tYXAoKGhlYWRlclBhcmFtOiBIZWFkZXJQYXJhbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMuc2V0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlclBhcmFtLmhlYWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyUGFyYW0udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc29sdmVFcnJvcihzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25FcnJvci5iZWhhdmlvdXIgPT09IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJUKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMuc2Vzc2lvbi5oYW5kbGVTZXNzaW9uRXJyb3Ioc2Vzc2lvbkVycm9yKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuc2Vzc2lvbi5yZWZyZXNoU2Vzc2lvbigpKTtcclxuICAgIH1cclxufVxyXG4iXX0=
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZXJyb3ItY2F0Y2hpbmcuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LWVycm9yLWNhdGNoaW5nLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBSUwscUJBQXFCLEdBRXRCLE1BQU0sWUFBWSxDQUFDOzs7QUFHcEIsTUFBTSxPQUFPLDZCQUE2QjtJQWdDeEMsWUFBb0IsT0FBNEI7UUFBNUIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUEvQmhELHNCQUFpQixHQUFtQjtZQUNsQztnQkFDRSxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSw4QkFBOEI7Z0JBQ3BDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE9BQU87YUFDekM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsNEJBQTRCO2dCQUNsQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSwyQkFBMkI7Z0JBQ2pDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE9BQU87YUFDekM7WUFDRDtnQkFD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QUN0QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO2FBQ3hFLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7MEhBL0ZVLDZCQUE2Qjs4SEFBN0IsNkJBQTZCOzJGQUE3Qiw2QkFBNkI7a0JBRHpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gIEh0dHBFdmVudCxcclxuICBIdHRwSGFuZGxlcixcclxuICBIdHRwSW50ZXJjZXB0b3IsXHJcbiAgSHR0cFJlcXVlc3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIEFwaUVycm9yLFxyXG4gIEhlYWRlclBhcmFtLFxyXG4gIFNlc3Npb25FcnJvcixcclxuICBTZXNzaW9uRXJyb3JCZWhhdmlvdXIsXHJcbiAgU21hcnRTZXNzaW9uU2VydmljZSxcclxufSBmcm9tICcuL3Byb2plY3RzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNtYXJ0RXJyb3JDYXRjaGluZ0ludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBzZXNzaW9uRXJyb3JDb2RlczogU2Vzc2lvbkVycm9yW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdzZXNzaW9uLmV4cGlyZWQnLFxyXG4gICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRUZSRVNILFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ3Nlc3Npb24ucmVmcmVzaHRva2VuLmludmFsaWQnLFxyXG4gICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ3Nlc3Npb24uYmFkcmVxdWVzdC5taXNzaW5ndG9rZW4nLFxyXG4gICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ3Nlc3Npb24uc2VjdXJpdHkubm9jb250ZXh0JyxcclxuICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdzZXNzaW9uLmludmFsaWRzZXNzaW9udXJpJyxcclxuICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdzZXNzaW9uLm5vdGluaXRpYWxpemVkJyxcclxuICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdzZXNzaW9uLnZpZXdjb250ZXh0Lm1pc3NpbmcnLFxyXG4gICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlc3Npb246IFNtYXJ0U2Vzc2lvblNlcnZpY2UpIHt9XHJcblxyXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xyXG4gICAgcmV0dXJuIG5leHRcclxuICAgICAgLmhhbmRsZShyZXF1ZXN0KVxyXG4gICAgICAucGlwZShjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIHJlcXVlc3QsIG5leHQpKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKFxyXG4gICAgZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXHJcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XHJcbiAgICBpZiAodGhpcy5pc1Nlc3Npb25FcnJvcihlcnJvcikpIHtcclxuICAgICAgY29uc3Qgc2Vzc2lvbkVycm9yID0gdGhpcy5nZXRTZXNzaW9uRXJyb3IoZXJyb3IpO1xyXG4gICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUVycm9yKHNlc3Npb25FcnJvcikucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzb2x2ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc29sdmVkICYmIHNlc3Npb25FcnJvci5iZWhhdmlvdXIgPT09IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRUZSRVNIKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMudXBkYXRlUmVxdWVzdEhlYWRlcnMocmVxdWVzdCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigocmVzb2x2ZUVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHdoZW4gdGhlIHJlc29sdmVFcnJvciB0aHJvd3MgYSByZXN0YXJ0IGVycm9yIChpbiB0aGUgcmVmcmVzaFNlc3Npb24pLCByZXRocm93IHRoZSBvcmlnaW5hbCBlcnJvclxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1Nlc3Npb25FcnJvcihyZXNvbHZlRXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZVNlc3Npb25FcnJvciA9IHRoaXMuZ2V0U2Vzc2lvbkVycm9yKHJlc29sdmVFcnJvcik7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc29sdmVTZXNzaW9uRXJyb3I/LmJlaGF2aW91ciA9PT0gU2Vzc2lvbkVycm9yQmVoYXZpb3VyLlJFU1RBUlQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gcmVzb2x2ZUVycm9yKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1Nlc3Npb25FcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcnJvci5zdGF0dXMgPT09IDQwMCAmJiAoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3IpLmNvZGUgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2Vzc2lvbkVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IFNlc3Npb25FcnJvciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uRXJyb3JDb2Rlcy5maW5kKFxyXG4gICAgICAoc2Vzc2lvbkVycm9yOiBTZXNzaW9uRXJyb3IpID0+IHNlc3Npb25FcnJvci5jb2RlID09PSAoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3IpLmNvZGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVFcnJvcihzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoc2Vzc2lvbkVycm9yLmJlaGF2aW91ciA9PT0gU2Vzc2lvbkVycm9yQmVoYXZpb3VyLlJFU1RBUlQpIHtcclxuICAgICAgcmV0dXJuIGZyb20odGhpcy5zZXNzaW9uLmhhbmRsZVNlc3Npb25FcnJvcihzZXNzaW9uRXJyb3IpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmcm9tKHRoaXMuc2Vzc2lvbi5yZWZyZXNoU2Vzc2lvbigpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUmVxdWVzdEhlYWRlcnMocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pOiBIdHRwUmVxdWVzdDx1bmtub3duPiB7XHJcbiAgICB0aGlzLnNlc3Npb24uaGVhZGVyUGFyYW1zLmZvckVhY2goKGhlYWRlclBhcmFtOiBIZWFkZXJQYXJhbSkgPT4ge1xyXG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXJQYXJhbS5oZWFkZXJOYW1lLCBoZWFkZXJQYXJhbS52YWx1ZSksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVxdWVzdDtcclxuICB9XHJcbn1cclxuIl19
@@ -3,4 +3,4 @@ export var SessionErrorBehaviour;
3
3
  SessionErrorBehaviour[SessionErrorBehaviour["REFRESH"] = 0] = "REFRESH";
4
4
  SessionErrorBehaviour[SessionErrorBehaviour["RESTART"] = 1] = "RESTART";
5
5
  })(SessionErrorBehaviour || (SessionErrorBehaviour = {}));
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LXNlc3Npb24taGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sQ0FBTixJQUFZLHFCQUdYO0FBSEQsV0FBWSxxQkFBcUI7SUFDN0IsdUVBQU8sQ0FBQTtJQUNQLHVFQUFPLENBQUE7QUFDWCxDQUFDLEVBSFcscUJBQXFCLEtBQXJCLHFCQUFxQixRQUdoQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2Uge1xyXG4gICAgaGFuZGxlU2Vzc2lvbkVycm9yKHNlc3Npb25FcnJvcjogU2Vzc2lvbkVycm9yKTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRXJyb3Ige1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXI7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNlc3Npb25FcnJvckJlaGF2aW91ciB7XHJcbiAgICBSRUZSRVNILFxyXG4gICAgUkVTVEFSVCxcclxufVxyXG4iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LXNlc3Npb24taGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxNQUFNLENBQU4sSUFBWSxxQkFHWDtBQUhELFdBQVkscUJBQXFCO0lBQy9CLHVFQUFPLENBQUE7SUFDUCx1RUFBTyxDQUFBO0FBQ1QsQ0FBQyxFQUhXLHFCQUFxQixLQUFyQixxQkFBcUIsUUFHaEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiBIYW5kbGVzIFNlc3Npb25FcnJvcnMgd2l0aCBSRVNUQVJUIGJlaGF2aW91ci4gV2l0aCB0aGlzIG1ldGhvZCBpdCBpcyBwb3NzaWJsZSB0byBhZGQgYXBwbGljYXRpb25cclxuICAgKiBzcGVjaWZpYyBsb2dpYyB0byB0aGUgc2Vzc2lvbiByZXN0YXJ0IG1lY2hhbmlzbS5cclxuICAgKiBFLmcuOiBuYXZpZ2F0ZSB0byB0aGUgbG9naW4gcGFnZSB3aGVuIHRoZSBzZXNzaW9uIGNhbiBub3QgYmUgcmVmcmVzaGVkLlxyXG4gICAqXHJcbiAgICogQnkgZGVmYXVsdCB3aGVuIHRoZSBzZXNzaW9uIGNhbiBub3QgYmUgcmVmcmVzaGVkLCB0aGUgc21hcnQtc2Vzc2lvbi5zZXJ2aWNlIGNsZWFycyBhbmQgc3RhcnRzIGEgbmV3IHNlc3Npb24uXHJcbiAgICogQnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGluIHRoaXMgbWV0aG9kIGl0IGlzIHBvc3NpYmxlIHRvIGF2b2lkIHRoaXMgZGVmYXVsdCBmdW5jdGlvbmFsaXR5LFxyXG4gICAqIGFuZCBoYW5kbGUgdGhlIHNlc3Npb24gcmVjcmVhdGlvbiBjb21wbGV0ZWx5IGhlcmUgaW4gdGhlIGFwcGxpY2F0aW9uIGxldmVsLlxyXG4gICAqIEBwYXJhbSBzZXNzaW9uRXJyb3IgdGhlIFNlc3Npb25FcnJvciB3aXRoIFJFU1RBUlQgYmVoYXZpb3VyIGNhY2hlZCBpbiB0aGUgaHR0cCBpbnRlcmNlcHRvclxyXG4gICAqL1xyXG4gIGhhbmRsZVNlc3Npb25FcnJvcihzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkVycm9yIHtcclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXI7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNlc3Npb25FcnJvckJlaGF2aW91ciB7XHJcbiAgUkVGUkVTSCxcclxuICBSRVNUQVJULFxyXG59XHJcbiJdfQ==
@@ -1,5 +1,6 @@
1
+ import { HttpErrorResponse } from '@angular/common/http';
1
2
  import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
+ import { Subject, lastValueFrom } from 'rxjs';
3
4
  import { SmartSubject } from '@smartbit4all/subject';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "./api";
@@ -37,7 +38,7 @@ export class SmartSessionService {
37
38
  }
38
39
  async handleSessionError(sessionError) {
39
40
  if (this.sessionHandlerService) {
40
- await this.sessionHandlerService.handleSessionError(sessionError);
41
+ return await this.sessionHandlerService.handleSessionError(sessionError);
41
42
  }
42
43
  throw new Error(`sessionHandlerService was not initialized. Error: ${sessionError.code}`);
43
44
  }
@@ -132,11 +133,7 @@ export class SmartSessionService {
132
133
  async startSession() {
133
134
  let sessionInfo = await this.apiService.startSession().toPromise();
134
135
  if (sessionInfo) {
135
- this.sessionInfoData = sessionInfo;
136
- this.token = sessionInfo.sid;
137
- this.saveTokenToLocalStorage();
138
- this.setAuthenticationStatus();
139
- this.setUpTokenForSessionService();
136
+ this.updateSessionInfo(sessionInfo);
140
137
  }
141
138
  return this.sessionInfoData;
142
139
  }
@@ -155,26 +152,34 @@ export class SmartSessionService {
155
152
  if (!refreshToken) {
156
153
  return await this.startSession();
157
154
  }
158
- let sessionInfo = await this.apiService
159
- .refreshSession({
160
- refreshToken,
161
- })
162
- .toPromise()
163
- .catch(async (error) => {
164
- if (error.error &&
165
- error.error.code &&
166
- error.error.code === 'session.refreshtoken.invalid') {
167
- await this.startSession();
155
+ try {
156
+ const sessionInfo = await lastValueFrom(this.apiService.refreshSession({ refreshToken }));
157
+ if (sessionInfo) {
158
+ this.updateSessionInfo(sessionInfo);
159
+ return sessionInfo;
168
160
  }
169
- });
170
- if (sessionInfo) {
171
- this.sessionInfoData = sessionInfo;
172
- this.token = sessionInfo.sid;
173
- this.saveTokenToLocalStorage();
174
- this.setAuthenticationStatus();
175
- this.setUpTokenForSessionService();
176
161
  }
177
- return this.sessionInfoData;
162
+ catch (error) {
163
+ if (this.isInvalidRefreshTokenError(error)) {
164
+ this.clearAndStartNewSession();
165
+ // still throw the error, so the error can be handled in the caller
166
+ }
167
+ throw error;
168
+ }
169
+ // no sessionInfo returned
170
+ throw new Error('Unable to refresh session');
171
+ }
172
+ updateSessionInfo(sessionInfo) {
173
+ this.sessionInfoData = sessionInfo;
174
+ this.token = sessionInfo.sid;
175
+ this.saveTokenToLocalStorage();
176
+ this.setAuthenticationStatus();
177
+ this.setUpTokenForSessionService();
178
+ }
179
+ isInvalidRefreshTokenError(error) {
180
+ return (error instanceof HttpErrorResponse &&
181
+ error.error &&
182
+ error.error.code === 'session.refreshtoken.invalid');
178
183
  }
179
184
  async getAuthenticationProviders() {
180
185
  let providers = await this.apiService
@@ -222,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
222
227
  providedIn: 'root',
223
228
  }]
224
229
  }], ctorParameters: function () { return [{ type: i1.SessionService }, { type: i2.SmartCookieService }]; } });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQVNyRCxNQUFNLE9BQU8sbUJBQW1CO0lBcUM5QixZQUFvQixVQUEwQixFQUFVLGFBQWlDO1FBQXJFLGVBQVUsR0FBVixVQUFVLENBQWdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBakNqRixjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFpQjFDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLCtCQUEwQixHQUFxQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEYsaUJBQVksR0FBdUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMvQyxtQkFBYyxHQUFrQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEUsU0FBUztRQUNELDJCQUFzQixHQUFXLFFBQVEsQ0FBQztRQUMzQyxrQkFBYSxHQUFrQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFHaEUsMkJBQXNCLEdBQWtCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUlZLENBQUM7SUEvQjdGLElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBWSxlQUFlLENBQUMsZUFBNEM7UUFDdEUsSUFBSSxl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Q2hGO1lBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztTQUNwQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFjO1FBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzRSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDdkQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzs7Z0hBN1BVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIEFwaUVycm9yLFxyXG4gIEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJEYXRhLFxyXG4gIEdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzUmVzcG9uc2UsXHJcbiAgU2Vzc2lvbkluZm9EYXRhLFxyXG4gIFNlc3Npb25TZXJ2aWNlLFxyXG59IGZyb20gJy4vYXBpJztcclxuaW1wb3J0IHsgU21hcnRDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9jb29raWUtc2VydmljZS9zbWFydC1jb29raWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25FcnJvciwgU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LXNlc3Npb24taGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnQHNtYXJ0Yml0NGFsbC9zdWJqZWN0JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyUGFyYW0ge1xyXG4gIGhlYWRlck5hbWU6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFNlc3Npb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGJhc2VQYXRoPzogc3RyaW5nO1xyXG4gIHByaXZhdGUgdG9rZW4/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfc2Vzc2lvbkluZm9EYXRhPzogU2Vzc2lvbkluZm9EYXRhO1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIGdldCBzZXNzaW9uSW5mb0RhdGEoKTogU2Vzc2lvbkluZm9EYXRhIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSW5mb0RhdGE7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0IHNlc3Npb25JbmZvRGF0YShzZXNzaW9uSW5mb0RhdGE6IFNlc3Npb25JbmZvRGF0YSB8IHVuZGVmaW5lZCkge1xyXG4gICAgbGV0IGV4cGlyYWN5Q2hhbmdlZCA9IHRoaXMuc2Vzc2lvbkluZm9EYXRhPy5leHBpcmF0aW9uICE9PSBzZXNzaW9uSW5mb0RhdGE/LmV4cGlyYXRpb247XHJcblxyXG4gICAgdGhpcy5fc2Vzc2lvbkluZm9EYXRhID0gc2Vzc2lvbkluZm9EYXRhO1xyXG5cclxuICAgIGlmIChleHBpcmFjeUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5zZXNzaW9uRXhwaXJhY3lDaGFuZ2VkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvdmlkZXJzPzogQXJyYXk8QXV0aGVudGljYXRpb25Qcm92aWRlckRhdGE+O1xyXG4gIHByaXZhdGUgY29va2llTmFtZT86IHN0cmluZztcclxuICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBhdXRoZW50aWNhdGlvblN0YXRlQ2hhbmdlZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICBwdWJsaWMgaGVhZGVyUGFyYW1zOiBBcnJheTxIZWFkZXJQYXJhbT4gPSBuZXcgQXJyYXkoKTtcclxuICBwdWJsaWMgaGVhZGVyc1VwZGF0ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgLy8gTG9jYWxlXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VMb2NhbGVOYW1lOiBzdHJpbmcgPSAnbG9jYWxlJztcclxuICBwdWJsaWMgbG9jYWxlQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJ1bm5pbmc6IFN1YmplY3Q8dm9pZD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBzZXNzaW9uRXhwaXJhY3lDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHByaXZhdGUgc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlPzogU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogU2Vzc2lvblNlcnZpY2UsIHByaXZhdGUgY29va2llU2VydmljZTogU21hcnRDb29raWVTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlKHNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlOiBTbWFydFNlc3Npb25IYW5kbGVyU2VydmljZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXNzaW9uSGFuZGxlclNlcnZpY2UgPSBzbWFydFNlc3Npb25IYW5kbGVyU2VydmljZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVTZXNzaW9uRXJyb3Ioc2Vzc2lvbkVycm9yOiBTZXNzaW9uRXJyb3IpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLnNlc3Npb25IYW5kbGVyU2VydmljZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNlc3Npb25IYW5kbGVyU2VydmljZS5oYW5kbGVTZXNzaW9uRXJyb3Ioc2Vzc2lvbkVycm9yKTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihgc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlIHdhcyBub3QgaW5pdGlhbGl6ZWQuIEVycm9yOiAke3Nlc3Npb25FcnJvci5jb2RlfWApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEhlYWRlclBhcmFtKGhlYWRlclBhcmFtOiBIZWFkZXJQYXJhbSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGVhZGVyUGFyYW1zLmZpbmQoKGg6IEhlYWRlclBhcmFtKSA9PiBoLmhlYWRlck5hbWUgPT09IGhlYWRlclBhcmFtLmhlYWRlck5hbWUpKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuaGVhZGVyUGFyYW1zLmZpbmRJbmRleChcclxuICAgICAgICAoaDogSGVhZGVyUGFyYW0pID0+IGguaGVhZGVyTmFtZSA9PT0gaGVhZGVyUGFyYW0uaGVhZGVyTmFtZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmhlYWRlclBhcmFtc1tpbmRleCFdLnZhbHVlID0gaGVhZGVyUGFyYW0udmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhlYWRlclBhcmFtcy5wdXNoKGhlYWRlclBhcmFtKTtcclxuICAgIH1cclxuICAgIHRoaXMuaGVhZGVyc1VwZGF0ZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcFRva2VuRm9yU2Vzc2lvblNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZEhlYWRlclBhcmFtKHtcclxuICAgICAgaGVhZGVyTmFtZTogJ0F1dGhvcml6YXRpb24nLFxyXG4gICAgICB2YWx1ZTogYEJlYXJlciAke3RoaXMudG9rZW4hfWAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYmFzZVBhdGggPSB1cmw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRCYXNlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmJhc2VQYXRoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmFzZVBhdGggaGFzIG5vdCBiZWVuIHNldCBpbiBTbWFydFNlc3Npb25TZXJ2aWNlIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVBhdGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29va2llTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY29va2llTmFtZSA9IG5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuY29va2llTmFtZSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4nLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5zaWQpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEucmVmcmVzaFRva2VuICYmXHJcbiAgICAgICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEucmVmcmVzaFRva2VuICE9PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVmcmVzaFRva2VuJylcclxuICAgICAgKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3JlZnJlc2hUb2tlbicsIHRoaXMuc2Vzc2lvbkluZm9EYXRhLnJlZnJlc2hUb2tlbik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCh0aGlzLmNvb2tpZU5hbWUsIHRoaXMudG9rZW4hKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEuYXV0aGVudGljYXRpb25zKSB7XHJcbiAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5zZXNzaW9uSW5mb0RhdGEuYXV0aGVudGljYXRpb25zLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGVDaGFuZ2VkLm5leHQodGhpcy5pc0F1dGhlbnRpY2F0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1N0YXRlbWVudHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYmFzZVBhdGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdXJsIG9mIHRoZSBiYWNrZW5kIGFwaSBoYXMgbm90IGJlZW4gc2V0IScpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5jb29raWVOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5hbWUgb2YgdGhlIGNvb2tpZSByZXF1aXJlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0IScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplUnVubmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplUnVubmluZy50b1Byb21pc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNoZWNrU3RhdGVtZW50cygpO1xyXG5cclxuICAgICAgICBsZXQgdG9rZW5Gcm9tTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XHJcbiAgICAgICAgbGV0IHRva2VuRnJvbUNvb2tpZXMgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KHRoaXMuY29va2llTmFtZSEpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0b2tlbkZyb21Mb2NhbFN0b3JhZ2UgJiZcclxuICAgICAgICAgIHRva2VuRnJvbUNvb2tpZXMgJiZcclxuICAgICAgICAgIHRva2VuRnJvbUxvY2FsU3RvcmFnZSA9PT0gdG9rZW5Gcm9tQ29va2llc1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuRnJvbUxvY2FsU3RvcmFnZTtcclxuICAgICAgICAgIHRoaXMuc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldFNlc3Npb24oKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFyQW5kU3RhcnROZXdTZXNzaW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcclxuICAgICAgICAgIHRoaXMubG9jYWxlQ2hhbmdlZC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHN0YXJ0U2Vzc2lvbigpOiBQcm9taXNlPFNlc3Npb25JbmZvRGF0YT4ge1xyXG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnN0YXJ0U2Vzc2lvbigpLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKHNlc3Npb25JbmZvKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhID0gc2Vzc2lvbkluZm87XHJcbiAgICAgIHRoaXMudG9rZW4gPSBzZXNzaW9uSW5mby5zaWQ7XHJcbiAgICAgIHRoaXMuc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgdGhpcy5zZXRBdXRoZW50aWNhdGlvblN0YXR1cygpO1xyXG4gICAgICB0aGlzLnNldFVwVG9rZW5Gb3JTZXNzaW9uU2VydmljZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YSE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2Vzc2lvbigpOiBQcm9taXNlPFNlc3Npb25JbmZvRGF0YT4ge1xyXG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldFNlc3Npb24oKS50b1Byb21pc2UoKTtcclxuICAgIGlmIChzZXNzaW9uSW5mbykge1xyXG4gICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvO1xyXG4gICAgICB0aGlzLnRva2VuID0gc2Vzc2lvbkluZm8uc2lkO1xyXG4gICAgICB0aGlzLnNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uSW5mb0RhdGEhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2hTZXNzaW9uKCk6IFByb21pc2U8U2Vzc2lvbkluZm9EYXRhPiB7XHJcbiAgICBsZXQgcmVmcmVzaFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZnJlc2hUb2tlbicpO1xyXG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5yZWZyZXNoU2Vzc2lvbih7XHJcbiAgICAgICAgcmVmcmVzaFRva2VuLFxyXG4gICAgICB9KVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICAgICAgLmNhdGNoKGFzeW5jIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBlcnJvci5lcnJvciAmJlxyXG4gICAgICAgICAgKGVycm9yLmVycm9yIGFzIEFwaUVycm9yKS5jb2RlICYmXHJcbiAgICAgICAgICAoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3IpLmNvZGUgPT09ICdzZXNzaW9uLnJlZnJlc2h0b2tlbi5pbnZhbGlkJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFNlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmIChzZXNzaW9uSW5mbykge1xyXG4gICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvO1xyXG4gICAgICB0aGlzLnRva2VuID0gc2Vzc2lvbkluZm8uc2lkO1xyXG4gICAgICB0aGlzLnNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTtcclxuICAgICAgdGhpcy5zZXRVcFRva2VuRm9yU2Vzc2lvblNlcnZpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uSW5mb0RhdGEhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzKCk6IFByb21pc2U8QXJyYXk8QXV0aGVudGljYXRpb25Qcm92aWRlckRhdGE+PiB7XHJcbiAgICBsZXQgcHJvdmlkZXJzOiBHZXRBdXRoZW50aWNhdGlvblByb3ZpZGVyc1Jlc3BvbnNlIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRBdXRoZW50aWNhdGlvblByb3ZpZGVycygpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuXHJcbiAgICB0aGlzLnByb3ZpZGVycyA9IHByb3ZpZGVycz8uYXV0aGVudGljYXRpb25Qcm92aWRlcnM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzITtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRJc0F1dGhlbnRpY2F0ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5nZXRTZXNzaW9uKCk7XHJcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2xlYXJBbmRTdGFydE5ld1Nlc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xyXG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcbiAgICB0aGlzLmhlYWRlclBhcmFtcyA9IFtdO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLmRlbGV0ZSh0aGlzLmNvb2tpZU5hbWUhKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZSkge1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lKSAhPT0gdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGU7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIFNlc3Npb25JbmZvRGF0YSBvciBsb2NhbGUgaXMgdW5kZWZpbmVkLicpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUxvY2FsZShsb2NhbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2Uuc2V0TG9jYWxlKGxvY2FsZSkudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcclxuICAgICAgdGhpcy5sb2NhbGVDaGFuZ2VkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFTckQsTUFBTSxPQUFPLG1CQUFtQjtJQXFDOUIsWUFBb0IsVUFBMEIsRUFBVSxhQUFpQztRQUFyRSxlQUFVLEdBQVYsVUFBVSxDQUFnQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFvQjtRQWpDakYsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBaUIxQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQywrQkFBMEIsR0FBcUIsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWhGLGlCQUFZLEdBQXVCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDL0MsbUJBQWMsR0FBa0IsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLFNBQVM7UUFDRCwyQkFBc0IsR0FBVyxRQUFRLENBQUM7UUFDM0Msa0JBQWEsR0FBa0IsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBR2hFLDJCQUFzQixHQUFrQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFJWSxDQUFDO0lBL0I3RixJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdC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SSxDQUFDLHNCQUFzQixDQUFDLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JGLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEY7WUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQ3BDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQWM7UUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNFLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUN2RCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDM0I7SUFDSCxDQUFDOztnSEFoUVUsbUJBQW1CO29IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQXBpRXJyb3IsXHJcbiAgQXV0aGVudGljYXRpb25Qcm92aWRlckRhdGEsXHJcbiAgR2V0QXV0aGVudGljYXRpb25Qcm92aWRlcnNSZXNwb25zZSxcclxuICBTZXNzaW9uSW5mb0RhdGEsXHJcbiAgU2Vzc2lvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydENvb2tpZVNlcnZpY2UgfSBmcm9tICcuL2Nvb2tpZS1zZXJ2aWNlL3NtYXJ0LWNvb2tpZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvbkVycm9yLCBTbWFydFNlc3Npb25IYW5kbGVyU2VydmljZSB9IGZyb20gJy4vc21hcnQtc2Vzc2lvbi1oYW5kbGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydFN1YmplY3QgfSBmcm9tICdAc21hcnRiaXQ0YWxsL3N1YmplY3QnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWFkZXJQYXJhbSB7XHJcbiAgaGVhZGVyTmFtZTogc3RyaW5nO1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0U2Vzc2lvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgYmFzZVBhdGg/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB0b2tlbj86IHN0cmluZztcclxuICBwcml2YXRlIF9zZXNzaW9uSW5mb0RhdGE/OiBTZXNzaW9uSW5mb0RhdGE7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwdWJsaWMgZ2V0IHNlc3Npb25JbmZvRGF0YSgpOiBTZXNzaW9uSW5mb0RhdGEgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JbmZvRGF0YTtcclxuICB9XHJcbiAgcHJpdmF0ZSBzZXQgc2Vzc2lvbkluZm9EYXRhKHNlc3Npb25JbmZvRGF0YTogU2Vzc2lvbkluZm9EYXRhIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBsZXQgZXhwaXJhY3lDaGFuZ2VkID0gdGhpcy5zZXNzaW9uSW5mb0RhdGE/LmV4cGlyYXRpb24gIT09IHNlc3Npb25JbmZvRGF0YT8uZXhwaXJhdGlvbjtcclxuXHJcbiAgICB0aGlzLl9zZXNzaW9uSW5mb0RhdGEgPSBzZXNzaW9uSW5mb0RhdGE7XHJcblxyXG4gICAgaWYgKGV4cGlyYWN5Q2hhbmdlZCkge1xyXG4gICAgICB0aGlzLnNlc3Npb25FeHBpcmFjeUNoYW5nZWQubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm92aWRlcnM/OiBBcnJheTxBdXRoZW50aWNhdGlvblByb3ZpZGVyRGF0YT47XHJcbiAgcHJpdmF0ZSBjb29raWVOYW1lPzogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGF1dGhlbnRpY2F0aW9uU3RhdGVDaGFuZ2VkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHB1YmxpYyBoZWFkZXJQYXJhbXM6IEFycmF5PEhlYWRlclBhcmFtPiA9IG5ldyBBcnJheSgpO1xyXG4gIHB1YmxpYyBoZWFkZXJzVXBkYXRlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICAvLyBMb2NhbGVcclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZUxvY2FsZU5hbWU6IHN0cmluZyA9ICdsb2NhbGUnO1xyXG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVubmluZzogU3ViamVjdDx2b2lkPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIHNlc3Npb25FeHBpcmFjeUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgcHJpdmF0ZSBzZXNzaW9uSGFuZGxlclNlcnZpY2U/OiBTbWFydFNlc3Npb25IYW5kbGVyU2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlTZXJ2aWNlOiBTZXNzaW9uU2VydmljZSwgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBTbWFydENvb2tpZVNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTZXNzaW9uSGFuZGxlclNlcnZpY2Uoc21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2U6IFNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlc3Npb25IYW5kbGVyU2VydmljZSA9IHNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZVNlc3Npb25FcnJvcihzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlKSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlc3Npb25IYW5kbGVyU2VydmljZS5oYW5kbGVTZXNzaW9uRXJyb3Ioc2Vzc2lvbkVycm9yKTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihgc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlIHdhcyBub3QgaW5pdGlhbGl6ZWQuIEVycm9yOiAke3Nlc3Npb25FcnJvci5jb2RlfWApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEhlYWRlclBhcmFtKGhlYWRlclBhcmFtOiBIZWFkZXJQYXJhbSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGVhZGVyUGFyYW1zLmZpbmQoKGg6IEhlYWRlclBhcmFtKSA9PiBoLmhlYWRlck5hbWUgPT09IGhlYWRlclBhcmFtLmhlYWRlck5hbWUpKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuaGVhZGVyUGFyYW1zLmZpbmRJbmRleChcclxuICAgICAgICAoaDogSGVhZGVyUGFyYW0pID0+IGguaGVhZGVyTmFtZSA9PT0gaGVhZGVyUGFyYW0uaGVhZGVyTmFtZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmhlYWRlclBhcmFtc1tpbmRleCFdLnZhbHVlID0gaGVhZGVyUGFyYW0udmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhlYWRlclBhcmFtcy5wdXNoKGhlYWRlclBhcmFtKTtcclxuICAgIH1cclxuICAgIHRoaXMuaGVhZGVyc1VwZGF0ZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcFRva2VuRm9yU2Vzc2lvblNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZEhlYWRlclBhcmFtKHtcclxuICAgICAgaGVhZGVyTmFtZTogJ0F1dGhvcml6YXRpb24nLFxyXG4gICAgICB2YWx1ZTogYEJlYXJlciAke3RoaXMudG9rZW4hfWAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYmFzZVBhdGggPSB1cmw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRCYXNlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmJhc2VQYXRoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmFzZVBhdGggaGFzIG5vdCBiZWVuIHNldCBpbiBTbWFydFNlc3Npb25TZXJ2aWNlIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVBhdGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29va2llTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY29va2llTmFtZSA9IG5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuY29va2llTmFtZSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4nLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5zaWQpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEucmVmcmVzaFRva2VuICYmXHJcbiAgICAgICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEucmVmcmVzaFRva2VuICE9PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVmcmVzaFRva2VuJylcclxuICAgICAgKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3JlZnJlc2hUb2tlbicsIHRoaXMuc2Vzc2lvbkluZm9EYXRhLnJlZnJlc2hUb2tlbik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCh0aGlzLmNvb2tpZU5hbWUsIHRoaXMudG9rZW4hKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEuYXV0aGVudGljYXRpb25zKSB7XHJcbiAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5zZXNzaW9uSW5mb0RhdGEuYXV0aGVudGljYXRpb25zLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGVDaGFuZ2VkLm5leHQodGhpcy5pc0F1dGhlbnRpY2F0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1N0YXRlbWVudHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYmFzZVBhdGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdXJsIG9mIHRoZSBiYWNrZW5kIGFwaSBoYXMgbm90IGJlZW4gc2V0IScpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5jb29raWVOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5hbWUgb2YgdGhlIGNvb2tpZSByZXF1aXJlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0IScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplUnVubmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplUnVubmluZy50b1Byb21pc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNoZWNrU3RhdGVtZW50cygpO1xyXG5cclxuICAgICAgICBsZXQgdG9rZW5Gcm9tTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XHJcbiAgICAgICAgbGV0IHRva2VuRnJvbUNvb2tpZXMgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KHRoaXMuY29va2llTmFtZSEpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0b2tlbkZyb21Mb2NhbFN0b3JhZ2UgJiZcclxuICAgICAgICAgIHRva2VuRnJvbUNvb2tpZXMgJiZcclxuICAgICAgICAgIHRva2VuRnJvbUxvY2FsU3RvcmFnZSA9PT0gdG9rZW5Gcm9tQ29va2llc1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuRnJvbUxvY2FsU3RvcmFnZTtcclxuICAgICAgICAgIHRoaXMuc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldFNlc3Npb24oKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFyQW5kU3RhcnROZXdTZXNzaW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcclxuICAgICAgICAgIHRoaXMubG9jYWxlQ2hhbmdlZC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHN0YXJ0U2Vzc2lvbigpOiBQcm9taXNlPFNlc3Npb25JbmZvRGF0YT4ge1xyXG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnN0YXJ0U2Vzc2lvbigpLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKHNlc3Npb25JbmZvKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2Vzc2lvbkluZm8oc2Vzc2lvbkluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YSE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2Vzc2lvbigpOiBQcm9taXNlPFNlc3Npb25JbmZvRGF0YT4ge1xyXG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldFNlc3Npb24oKS50b1Byb21pc2UoKTtcclxuICAgIGlmIChzZXNzaW9uSW5mbykge1xyXG4gICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvO1xyXG4gICAgICB0aGlzLnRva2VuID0gc2Vzc2lvbkluZm8uc2lkO1xyXG4gICAgICB0aGlzLnNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uSW5mb0RhdGEhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2hTZXNzaW9uKCk6IFByb21pc2U8U2Vzc2lvbkluZm9EYXRhPiB7XHJcbiAgICBsZXQgcmVmcmVzaFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZnJlc2hUb2tlbicpO1xyXG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc2Vzc2lvbkluZm8gPSBhd2FpdCBsYXN0VmFsdWVGcm9tKHRoaXMuYXBpU2VydmljZS5yZWZyZXNoU2Vzc2lvbih7IHJlZnJlc2hUb2tlbiB9KSk7XHJcbiAgICAgIGlmIChzZXNzaW9uSW5mbykge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2Vzc2lvbkluZm8oc2Vzc2lvbkluZm8pO1xyXG4gICAgICAgIHJldHVybiBzZXNzaW9uSW5mbztcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgaWYgKHRoaXMuaXNJbnZhbGlkUmVmcmVzaFRva2VuRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckFuZFN0YXJ0TmV3U2Vzc2lvbigpO1xyXG4gICAgICAgIC8vIHN0aWxsIHRocm93IHRoZSBlcnJvciwgc28gdGhlIGVycm9yIGNhbiBiZSBoYW5kbGVkIGluIHRoZSBjYWxsZXJcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICAgIC8vIG5vIHNlc3Npb25JbmZvIHJldHVybmVkXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZWZyZXNoIHNlc3Npb24nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2Vzc2lvbkluZm8oc2Vzc2lvbkluZm86IFNlc3Npb25JbmZvRGF0YSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEgPSBzZXNzaW9uSW5mbztcclxuICAgIHRoaXMudG9rZW4gPSBzZXNzaW9uSW5mby5zaWQ7XHJcbiAgICB0aGlzLnNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB0aGlzLnNldEF1dGhlbnRpY2F0aW9uU3RhdHVzKCk7XHJcbiAgICB0aGlzLnNldFVwVG9rZW5Gb3JTZXNzaW9uU2VydmljZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0ludmFsaWRSZWZyZXNoVG9rZW5FcnJvcihlcnJvcjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmXHJcbiAgICAgIGVycm9yLmVycm9yICYmXHJcbiAgICAgIChlcnJvci5lcnJvciBhcyBBcGlFcnJvcikuY29kZSA9PT0gJ3Nlc3Npb24ucmVmcmVzaHRva2VuLmludmFsaWQnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzKCk6IFByb21pc2U8QXJyYXk8QXV0aGVudGljYXRpb25Qcm92aWRlckRhdGE+PiB7XHJcbiAgICBsZXQgcHJvdmlkZXJzOiBHZXRBdXRoZW50aWNhdGlvblByb3ZpZGVyc1Jlc3BvbnNlIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRBdXRoZW50aWNhdGlvblByb3ZpZGVycygpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuXHJcbiAgICB0aGlzLnByb3ZpZGVycyA9IHByb3ZpZGVycz8uYXV0aGVudGljYXRpb25Qcm92aWRlcnM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzITtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRJc0F1dGhlbnRpY2F0ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5nZXRTZXNzaW9uKCk7XHJcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2xlYXJBbmRTdGFydE5ld1Nlc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xyXG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcbiAgICB0aGlzLmhlYWRlclBhcmFtcyA9IFtdO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLmRlbGV0ZSh0aGlzLmNvb2tpZU5hbWUhKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZSkge1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lKSAhPT0gdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGU7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIFNlc3Npb25JbmZvRGF0YSBvciBsb2NhbGUgaXMgdW5kZWZpbmVkLicpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUxvY2FsZShsb2NhbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2Uuc2V0TG9jYWxlKGxvY2FsZSkudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcclxuICAgICAgdGhpcy5sb2NhbGVDaGFuZ2VkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Optional, Inject, PLATFORM_ID, NgModule, SkipSelf, Component, Pipe, CUSTOM_ELEMENTS_SCHEMA, ViewChild, Input, ViewChildren } from '@angular/core';
3
3
  import { __awaiter, __decorate, __param } from 'tslib';
4
- import { Subject, takeUntil, map, catchError, throwError, from } from 'rxjs';
5
- import { SmartSubject } from '@smartbit4all/subject';
6
4
  import * as i1 from '@angular/common/http';
7
- import { HttpHeaders, HttpContext, HttpParams, HttpEventType, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
5
+ import { HttpHeaders, HttpContext, HttpErrorResponse, HttpParams, HttpEventType, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
6
+ import { Subject, lastValueFrom, takeUntil, map, catchError, throwError, from } from 'rxjs';
7
+ import { SmartSubject } from '@smartbit4all/subject';
8
8
  import * as i4 from '@angular/common';
9
9
  import { isPlatformBrowser, DOCUMENT, DatePipe, CommonModule } from '@angular/common';
10
10
  import * as i2 from '@angular/material/button';
@@ -711,7 +711,7 @@ class SmartSessionService {
711
711
  handleSessionError(sessionError) {
712
712
  return __awaiter(this, void 0, void 0, function* () {
713
713
  if (this.sessionHandlerService) {
714
- yield this.sessionHandlerService.handleSessionError(sessionError);
714
+ return yield this.sessionHandlerService.handleSessionError(sessionError);
715
715
  }
716
716
  throw new Error(`sessionHandlerService was not initialized. Error: ${sessionError.code}`);
717
717
  });
@@ -810,11 +810,7 @@ class SmartSessionService {
810
810
  return __awaiter(this, void 0, void 0, function* () {
811
811
  let sessionInfo = yield this.apiService.startSession().toPromise();
812
812
  if (sessionInfo) {
813
- this.sessionInfoData = sessionInfo;
814
- this.token = sessionInfo.sid;
815
- this.saveTokenToLocalStorage();
816
- this.setAuthenticationStatus();
817
- this.setUpTokenForSessionService();
813
+ this.updateSessionInfo(sessionInfo);
818
814
  }
819
815
  return this.sessionInfoData;
820
816
  });
@@ -837,28 +833,36 @@ class SmartSessionService {
837
833
  if (!refreshToken) {
838
834
  return yield this.startSession();
839
835
  }
840
- let sessionInfo = yield this.apiService
841
- .refreshSession({
842
- refreshToken,
843
- })
844
- .toPromise()
845
- .catch((error) => __awaiter(this, void 0, void 0, function* () {
846
- if (error.error &&
847
- error.error.code &&
848
- error.error.code === 'session.refreshtoken.invalid') {
849
- yield this.startSession();
836
+ try {
837
+ const sessionInfo = yield lastValueFrom(this.apiService.refreshSession({ refreshToken }));
838
+ if (sessionInfo) {
839
+ this.updateSessionInfo(sessionInfo);
840
+ return sessionInfo;
850
841
  }
851
- }));
852
- if (sessionInfo) {
853
- this.sessionInfoData = sessionInfo;
854
- this.token = sessionInfo.sid;
855
- this.saveTokenToLocalStorage();
856
- this.setAuthenticationStatus();
857
- this.setUpTokenForSessionService();
858
842
  }
859
- return this.sessionInfoData;
843
+ catch (error) {
844
+ if (this.isInvalidRefreshTokenError(error)) {
845
+ this.clearAndStartNewSession();
846
+ // still throw the error, so the error can be handled in the caller
847
+ }
848
+ throw error;
849
+ }
850
+ // no sessionInfo returned
851
+ throw new Error('Unable to refresh session');
860
852
  });
861
853
  }
854
+ updateSessionInfo(sessionInfo) {
855
+ this.sessionInfoData = sessionInfo;
856
+ this.token = sessionInfo.sid;
857
+ this.saveTokenToLocalStorage();
858
+ this.setAuthenticationStatus();
859
+ this.setUpTokenForSessionService();
860
+ }
861
+ isInvalidRefreshTokenError(error) {
862
+ return (error instanceof HttpErrorResponse &&
863
+ error.error &&
864
+ error.error.code === 'session.refreshtoken.invalid');
865
+ }
862
866
  getAuthenticationProviders() {
863
867
  return __awaiter(this, void 0, void 0, function* () {
864
868
  let providers = yield this.apiService
@@ -3233,52 +3237,68 @@ class SmartErrorCatchingInterceptor {
3233
3237
  this.session = session;
3234
3238
  this.sessionErrorCodes = [
3235
3239
  {
3236
- code: "session.expired",
3240
+ code: 'session.expired',
3237
3241
  behaviour: SessionErrorBehaviour.REFRESH,
3238
3242
  },
3239
3243
  {
3240
- code: "session.refreshtoken.invalid",
3244
+ code: 'session.refreshtoken.invalid',
3241
3245
  behaviour: SessionErrorBehaviour.RESTART,
3242
3246
  },
3243
3247
  {
3244
- code: "session.badrequest.missingtoken",
3248
+ code: 'session.badrequest.missingtoken',
3245
3249
  behaviour: SessionErrorBehaviour.RESTART,
3246
3250
  },
3247
3251
  {
3248
- code: "session.security.nocontext",
3252
+ code: 'session.security.nocontext',
3249
3253
  behaviour: SessionErrorBehaviour.RESTART,
3250
3254
  },
3251
3255
  {
3252
- code: "session.invalidsessionuri",
3256
+ code: 'session.invalidsessionuri',
3253
3257
  behaviour: SessionErrorBehaviour.RESTART,
3254
3258
  },
3255
3259
  {
3256
- code: "session.notinitialized",
3260
+ code: 'session.notinitialized',
3257
3261
  behaviour: SessionErrorBehaviour.RESTART,
3258
3262
  },
3259
3263
  {
3260
- code: "session.viewcontext.missing",
3264
+ code: 'session.viewcontext.missing',
3261
3265
  behaviour: SessionErrorBehaviour.RESTART,
3262
3266
  },
3263
3267
  ];
3264
3268
  }
3265
3269
  intercept(request, next) {
3266
- return next.handle(request).pipe(catchError$1((error) => {
3267
- if (error.status === 400 && error.error.code) {
3268
- let sessionError = this.sessionErrorCodes.find((sessionError) => sessionError.code === error.error.code);
3269
- if (sessionError) {
3270
- return this.resolveError(sessionError).pipe(switchMap(() => {
3271
- this.session.headerParams.map((headerParam) => {
3272
- request = request.clone({
3273
- headers: request.headers.set(headerParam.headerName, headerParam.value),
3274
- });
3275
- });
3276
- return next.handle(request);
3277
- }));
3278
- }
3270
+ return next
3271
+ .handle(request)
3272
+ .pipe(catchError$1((error) => this.handleError(error, request, next)));
3273
+ }
3274
+ handleError(error, request, next) {
3275
+ if (this.isSessionError(error)) {
3276
+ const sessionError = this.getSessionError(error);
3277
+ if (sessionError) {
3278
+ return this.resolveError(sessionError).pipe(switchMap((resolved) => {
3279
+ if (resolved && sessionError.behaviour === SessionErrorBehaviour.REFRESH) {
3280
+ return next.handle(this.updateRequestHeaders(request));
3281
+ }
3282
+ return throwError(() => error);
3283
+ }), catchError$1((resolveError) => {
3284
+ // when the resolveError throws a restart error (in the refreshSession), rethrow the original error
3285
+ if (this.isSessionError(resolveError)) {
3286
+ const resolveSessionError = this.getSessionError(resolveError);
3287
+ if ((resolveSessionError === null || resolveSessionError === void 0 ? void 0 : resolveSessionError.behaviour) === SessionErrorBehaviour.RESTART) {
3288
+ return throwError(() => error);
3289
+ }
3290
+ }
3291
+ return throwError(() => resolveError);
3292
+ }));
3279
3293
  }
3280
- return throwError(error);
3281
- }));
3294
+ }
3295
+ return throwError(() => error);
3296
+ }
3297
+ isSessionError(error) {
3298
+ return error.status === 400 && error.error.code != null;
3299
+ }
3300
+ getSessionError(error) {
3301
+ return this.sessionErrorCodes.find((sessionError) => sessionError.code === error.error.code);
3282
3302
  }
3283
3303
  resolveError(sessionError) {
3284
3304
  if (sessionError.behaviour === SessionErrorBehaviour.RESTART) {
@@ -3286,6 +3306,14 @@ class SmartErrorCatchingInterceptor {
3286
3306
  }
3287
3307
  return from(this.session.refreshSession());
3288
3308
  }
3309
+ updateRequestHeaders(request) {
3310
+ this.session.headerParams.forEach((headerParam) => {
3311
+ request = request.clone({
3312
+ headers: request.headers.set(headerParam.headerName, headerParam.value),
3313
+ });
3314
+ });
3315
+ return request;
3316
+ }
3289
3317
  }
3290
3318
  SmartErrorCatchingInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartErrorCatchingInterceptor, deps: [{ token: SmartSessionService }], target: i0.ɵɵFactoryTarget.Injectable });
3291
3319
  SmartErrorCatchingInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartErrorCatchingInterceptor });