@osovitny/anatoly 3.16.43 → 3.16.44

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.
@@ -17,39 +17,56 @@
17
17
  import { HttpResponse } from '@angular/common/http';
18
18
  import { Injectable } from '@angular/core';
19
19
  // RxJS
20
- import { tap } from 'rxjs/operators';
20
+ import { catchError, mergeMap, tap } from 'rxjs/operators';
21
+ import { of } from 'rxjs';
21
22
  //App
22
23
  import { AppCoreSettings } from '../consts/settings';
23
24
  import * as i0 from "@angular/core";
24
- import * as i1 from "../services/loading.service";
25
- import * as i2 from "../logging/logging.service";
25
+ import * as i1 from "../../iam";
26
+ import * as i2 from "../services/loading.service";
27
+ import * as i3 from "../logging/logging.service";
26
28
  export class AnatolyHttpInterceptor {
29
+ authService;
27
30
  loadingService;
28
31
  loggingService;
29
- longRunningExceptionsList = [];
30
- autoCDNSASTokenUrls = ['chunks', 'resources'];
31
- externalSiteUrls = ['azurewebsites.net'];
32
- constructor(loadingService, loggingService) {
32
+ longRunningExceptions = [
33
+ 'chunkupload',
34
+ ];
35
+ authorizationTokenExceptions = [
36
+ 'jsons',
37
+ 'l10n'
38
+ ];
39
+ autoCDNSASTokenUrls = [
40
+ 'chunks',
41
+ 'l10n'
42
+ ];
43
+ externalSiteUrls = [
44
+ 'azurewebsites.net'
45
+ ];
46
+ constructor(authService, loadingService, loggingService) {
47
+ this.authService = authService;
33
48
  this.loadingService = loadingService;
34
49
  this.loggingService = loggingService;
35
50
  }
36
51
  intercept(req, next) {
37
- const isCDNEnabled = AppCoreSettings.IsCDNEnabled;
38
- const cdnSasToken = AppCoreSettings.CDNSASToken;
39
- const isLoadingFreezed = this.loadingService.isFreezed;
40
- const authorizationTokenRequired = true;
41
- const url = req.url.toLowerCase();
42
- const originalUrl = req.url;
43
- let isExternalSite = false;
52
+ let isCDNEnabled = AppCoreSettings.IsCDNEnabled;
53
+ let cdnSasToken = AppCoreSettings.CDNSASToken;
54
+ let isLoadingFreezed = this.loadingService.isFreezed;
44
55
  let loadingRequired = !isLoadingFreezed;
56
+ let url = req.url.toLowerCase();
57
+ let originalUrl = req.url;
58
+ let isExternalSite = false;
59
+ let authorizationTokenRequired = true;
60
+ //1. longRunning tasks
45
61
  if (!isLoadingFreezed) {
46
- for (const i of this.longRunningExceptionsList) {
47
- if (url.indexOf(this.longRunningExceptionsList[i]) >= 0) {
62
+ for (const i of this.longRunningExceptions) {
63
+ if (url.indexOf(this.longRunningExceptions[i]) >= 0) {
48
64
  loadingRequired = false;
49
65
  break;
50
66
  }
51
67
  }
52
68
  }
69
+ //2. Check should we add CDN SAS tokens
53
70
  if (isCDNEnabled) {
54
71
  for (const i of this.autoCDNSASTokenUrls) {
55
72
  if (url.indexOf(this.autoCDNSASTokenUrls[i]) >= 0) {
@@ -58,13 +75,26 @@ export class AnatolyHttpInterceptor {
58
75
  }
59
76
  }
60
77
  }
78
+ //3. Check is site External?
61
79
  for (const i of this.externalSiteUrls) {
62
80
  if (url.indexOf(this.externalSiteUrls[i]) >= 0) {
63
81
  isExternalSite = true;
64
82
  break;
65
83
  }
66
84
  }
67
- // VadimOS: IE11-fix
85
+ //4. Is Authorization Token Required
86
+ if (isExternalSite) {
87
+ authorizationTokenRequired = false;
88
+ }
89
+ else {
90
+ for (var i = 0; i < this.authorizationTokenExceptions.length; i++) {
91
+ if (url.indexOf(this.authorizationTokenExceptions[i]) >= 0) {
92
+ authorizationTokenRequired = false;
93
+ break;
94
+ }
95
+ }
96
+ }
97
+ // VadimOS: no cashing for API calls
68
98
  if (url.indexOf('/api/') > -1) {
69
99
  let newUrl = '';
70
100
  const t = new Date().getTime().toString();
@@ -79,15 +109,41 @@ export class AnatolyHttpInterceptor {
79
109
  req = req.clone({ headers: req.headers.set('Accept', 'application/json') });
80
110
  req = req.clone({ headers: req.headers.set('Accept', 'application/text') });
81
111
  this.onRequestStart(loadingRequired);
82
- return next.handle(req).pipe(tap((event) => {
83
- if (event instanceof HttpResponse) {
112
+ if (authorizationTokenRequired) {
113
+ return this.authService.getAccessToken(req.url).pipe(mergeMap((token) => {
114
+ /*
115
+ let userEmail = this.authService.getUserEmail();
116
+
117
+ req = req.clone({ headers: req.headers.set('cli_sessionguid', MiceAppCoreSettings.SERVICES_CONF.CLI_SessionGUID) });
118
+ req = req.clone({ headers: req.headers.set('cskii', MiceAppCoreSettings.SERVICES_CONF.selectedClientID) });
119
+ req = req.clone({ headers: req.headers.set('cskii_upn', userEmail) });
120
+ */
121
+ if (token) {
122
+ req = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + token) });
123
+ }
124
+ return this.handleHttpRequest(req, next, loadingRequired);
125
+ }), catchError(err => {
126
+ return of(null);
127
+ }));
128
+ }
129
+ else {
130
+ return this.handleHttpRequest(req, next, loadingRequired);
131
+ }
132
+ }
133
+ handleHttpRequest(req, next, loadingRequired) {
134
+ return next.handle(req).pipe(tap({
135
+ next: (event) => {
136
+ if (event instanceof HttpResponse) {
137
+ this.onRequestEnd(loadingRequired);
138
+ }
139
+ },
140
+ error: (err) => {
84
141
  this.onRequestEnd(loadingRequired);
142
+ this.loggingService.logError(err);
85
143
  }
86
- }, (err) => {
87
- this.onRequestEnd(loadingRequired);
88
- this.loggingService.logError(err);
89
144
  }));
90
145
  }
146
+ //Events
91
147
  onRequestStart(loadingRequired) {
92
148
  if (loadingRequired) {
93
149
  this.loadingService.show();
@@ -98,10 +154,10 @@ export class AnatolyHttpInterceptor {
98
154
  this.loadingService.hide();
99
155
  }
100
156
  }
101
- static ɵfac = function AnatolyHttpInterceptor_Factory(t) { return new (t || AnatolyHttpInterceptor)(i0.ɵɵinject(i1.LoadingService), i0.ɵɵinject(i2.LoggingService)); };
157
+ static ɵfac = function AnatolyHttpInterceptor_Factory(t) { return new (t || AnatolyHttpInterceptor)(i0.ɵɵinject(i1.AuthService), i0.ɵɵinject(i2.LoadingService), i0.ɵɵinject(i3.LoggingService)); };
102
158
  static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AnatolyHttpInterceptor, factory: AnatolyHttpInterceptor.ɵfac });
103
159
  }
104
160
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnatolyHttpInterceptor, [{
105
161
  type: Injectable
106
- }], function () { return [{ type: i1.LoadingService }, { type: i2.LoggingService }]; }, null); })();
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cEludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL2h0dHBJbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQXVELFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTztBQUNQLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUduQyxLQUFLO0FBQ0wsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDOzs7O0FBS25ELE1BQU0sT0FBTyxzQkFBc0I7SUFLWDtJQUEwQztJQUp0RCx5QkFBeUIsR0FBRyxFQUFFLENBQUM7SUFDL0IsbUJBQW1CLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUMsZ0JBQWdCLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRW5ELFlBQXNCLGNBQThCLEVBQVksY0FBOEI7UUFBeEUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVksbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBQzlGLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUNoRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFFaEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUN2RCxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQztRQUN4QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFD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Y0FBYyxDQUFDLGVBQXdCO1FBQ3JDLElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLGVBQXdCO1FBQ25DLElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO2dGQXhGVSxzQkFBc0I7Z0VBQXRCLHNCQUFzQixXQUF0QixzQkFBc0I7O3VGQUF0QixzQkFBc0I7Y0FEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAyNSBNYXJjaCAyMDIwXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7SHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vLyBSeEpTXHJcbmltcG9ydCB7dGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQge0FwcENvcmVTZXR0aW5nc30gZnJvbSAnLi4vY29uc3RzL3NldHRpbmdzJztcclxuaW1wb3J0IHtMb2FkaW5nU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbG9hZGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2dnaW5nU2VydmljZX0gZnJvbSAnLi4vbG9nZ2luZy9sb2dnaW5nLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQW5hdG9seUh0dHBJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgcHJvdGVjdGVkIGxvbmdSdW5uaW5nRXhjZXB0aW9uc0xpc3QgPSBbXTtcclxuICBwcm90ZWN0ZWQgYXV0b0NETlNBU1Rva2VuVXJscyA9IFsnY2h1bmtzJywgJ3Jlc291cmNlcyddO1xyXG4gIHByb3RlY3RlZCBleHRlcm5hbFNpdGVVcmxzID0gWydhenVyZXdlYnNpdGVzLm5ldCddO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlLCBwcm90ZWN0ZWQgbG9nZ2luZ1NlcnZpY2U6IExvZ2dpbmdTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIGNvbnN0IGlzQ0RORW5hYmxlZCA9IEFwcENvcmVTZXR0aW5ncy5Jc0NETkVuYWJsZWQ7XHJcbiAgICBjb25zdCBjZG5TYXNUb2tlbiA9IEFwcENvcmVTZXR0aW5ncy5DRE5TQVNUb2tlbjtcclxuXHJcbiAgICBjb25zdCBpc0xvYWRpbmdGcmVlemVkID0gdGhpcy5sb2FkaW5nU2VydmljZS5pc0ZyZWV6ZWQ7XHJcbiAgICBjb25zdCBhdXRob3JpemF0aW9uVG9rZW5SZXF1aXJlZCA9IHRydWU7XHJcbiAgICBjb25zdCB1cmwgPSByZXEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCBvcmlnaW5hbFVybCA9IHJlcS51cmw7XHJcbiAgICBsZXQgaXNFeHRlcm5hbFNpdGUgPSBmYWxzZTtcclxuICAgIGxldCBsb2FkaW5nUmVxdWlyZWQgPSAhaXNMb2FkaW5nRnJlZXplZDtcclxuXHJcbiAgICBpZiAoIWlzTG9hZGluZ0ZyZWV6ZWQpIHtcclxuICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMubG9uZ1J1bm5pbmdFeGNlcHRpb25zTGlzdCkge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZih0aGlzLmxvbmdSdW5uaW5nRXhjZXB0aW9uc0xpc3RbaV0pID49IDApIHtcclxuICAgICAgICAgIGxvYWRpbmdSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzQ0RORW5hYmxlZCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5hdXRvQ0ROU0FTVG9rZW5VcmxzKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKHRoaXMuYXV0b0NETlNBU1Rva2VuVXJsc1tpXSkgPj0gMCkge1xyXG4gICAgICAgICAgcmVxID0gcmVxLmNsb25lKHsgdXJsOiBvcmlnaW5hbFVybCArIGNkblNhc1Rva2VuIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuZXh0ZXJuYWxTaXRlVXJscykge1xyXG4gICAgICBpZiAodXJsLmluZGV4T2YodGhpcy5leHRlcm5hbFNpdGVVcmxzW2ldKSA+PSAwKSB7XHJcbiAgICAgICAgaXNFeHRlcm5hbFNpdGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFkaW1PUzogSUUxMS1maXhcclxuICAgIGlmICh1cmwuaW5kZXhPZignL2FwaS8nKSA+IC0xKSB7XHJcbiAgICAgIGxldCBuZXdVcmwgPSAnJztcclxuICAgICAgY29uc3QgdCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA+IC0xKSB7XHJcbiAgICAgICAgbmV3VXJsID0gb3JpZ2luYWxVcmwgKyAnJnQ9JyArIHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3VXJsID0gb3JpZ2luYWxVcmwgKyAnP3Q9JyArIHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7IHVybDogbmV3VXJsIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcSA9IHJlcS5jbG9uZSh7IGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKSB9KTtcclxuICAgIHJlcSA9IHJlcS5jbG9uZSh7IGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL3RleHQnKSB9KTtcclxuXHJcbiAgICB0aGlzLm9uUmVxdWVzdFN0YXJ0KGxvYWRpbmdSZXF1aXJlZCk7XHJcblxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSkucGlwZShcclxuICAgICAgdGFwKFxyXG4gICAgICAgIChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVxdWVzdEVuZChsb2FkaW5nUmVxdWlyZWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uUmVxdWVzdEVuZChsb2FkaW5nUmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5sb2dnaW5nU2VydmljZS5sb2dFcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uUmVxdWVzdFN0YXJ0KGxvYWRpbmdSZXF1aXJlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGxvYWRpbmdSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUmVxdWVzdEVuZChsb2FkaW5nUmVxdWlyZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChsb2FkaW5nUmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
162
+ }], function () { return [{ type: i1.AuthService }, { type: i2.LoadingService }, { type: i3.LoggingService }]; }, null); })();
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cEludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL2h0dHBJbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQXVELFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTztBQUNQLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFcEMsS0FBSztBQUNMLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFNckQsTUFBTSxPQUFPLHNCQUFzQjtJQW9CckI7SUFDQTtJQUNBO0lBckJGLHFCQUFxQixHQUFHO1FBQ2hDLGFBQWE7S0FDZCxDQUFDO0lBRVEsNEJBQTRCLEdBQUc7UUFDdkMsT0FBTztRQUNQLE1BQU07S0FDUCxDQUFDO0lBRVEsbUJBQW1CLEdBQUc7UUFDOUIsUUFBUTtRQUNSLE1BQU07S0FDUCxDQUFDO0lBRVEsZ0JBQWdCLEdBQUc7UUFDM0IsbUJBQW1CO0tBQ3BCLENBQUM7SUFFRixZQUNZLFdBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDMUMsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBQ2hELElBQUksWUFBWSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFDaEQsSUFBSSxXQUFX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OUIsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFO29CQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2lCQUNwQztZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsQ0FBQztTQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVE7SUFDUixjQUFjLENBQUMsZUFBd0I7UUFDckMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsZUFBd0I7UUFDbkMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7Z0ZBcEpVLHNCQUFzQjtnRUFBdEIsc0JBQXNCLFdBQXRCLHNCQUFzQjs7dUZBQXRCLHNCQUFzQjtjQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDI1IE1hcmNoIDIwMjBcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHtIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vIFJ4SlNcclxuaW1wb3J0IHtjYXRjaEVycm9yLCBtZXJnZU1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQXBwQ29yZVNldHRpbmdzIH0gZnJvbSAnLi4vY29uc3RzL3NldHRpbmdzJztcclxuaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2FkaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL2xvZ2dpbmcvbG9nZ2luZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9pYW0nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQW5hdG9seUh0dHBJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgcHJvdGVjdGVkIGxvbmdSdW5uaW5nRXhjZXB0aW9ucyA9IFtcclxuICAgICdjaHVua3VwbG9hZCcsXHJcbiAgXTtcclxuXHJcbiAgcHJvdGVjdGVkIGF1dGhvcml6YXRpb25Ub2tlbkV4Y2VwdGlvbnMgPSBbXHJcbiAgICAnanNvbnMnLFxyXG4gICAgJ2wxMG4nXHJcbiAgXTtcclxuXHJcbiAgcHJvdGVjdGVkIGF1dG9DRE5TQVNUb2tlblVybHMgPSBbXHJcbiAgICAnY2h1bmtzJyxcclxuICAgICdsMTBuJ1xyXG4gIF07XHJcblxyXG4gIHByb3RlY3RlZCBleHRlcm5hbFNpdGVVcmxzID0gW1xyXG4gICAgJ2F6dXJld2Vic2l0ZXMubmV0J1xyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBsb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgbG9nZ2luZ1NlcnZpY2U6IExvZ2dpbmdTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIGxldCBpc0NETkVuYWJsZWQgPSBBcHBDb3JlU2V0dGluZ3MuSXNDRE5FbmFibGVkO1xyXG4gICAgbGV0IGNkblNhc1Rva2VuID0gQXBwQ29yZVNldHRpbmdzLkNETlNBU1Rva2VuO1xyXG4gICAgbGV0IGlzTG9hZGluZ0ZyZWV6ZWQgPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLmlzRnJlZXplZDtcclxuICAgIGxldCBsb2FkaW5nUmVxdWlyZWQgPSAhaXNMb2FkaW5nRnJlZXplZDtcclxuICAgIGxldCB1cmwgPSByZXEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBsZXQgb3JpZ2luYWxVcmwgPSByZXEudXJsO1xyXG4gICAgbGV0IGlzRXh0ZXJuYWxTaXRlID0gZmFsc2U7XHJcbiAgICBsZXQgYXV0aG9yaXphdGlvblRva2VuUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIC8vMS4gbG9uZ1J1bm5pbmcgdGFza3NcclxuICAgIGlmICghaXNMb2FkaW5nRnJlZXplZCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5sb25nUnVubmluZ0V4Y2VwdGlvbnMpIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YodGhpcy5sb25nUnVubmluZ0V4Y2VwdGlvbnNbaV0pID49IDApIHtcclxuICAgICAgICAgIGxvYWRpbmdSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8yLiBDaGVjayBzaG91bGQgd2UgYWRkIENETiBTQVMgdG9rZW5zXHJcbiAgICBpZiAoaXNDRE5FbmFibGVkKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLmF1dG9DRE5TQVNUb2tlblVybHMpIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YodGhpcy5hdXRvQ0ROU0FTVG9rZW5VcmxzW2ldKSA+PSAwKSB7XHJcbiAgICAgICAgICByZXEgPSByZXEuY2xvbmUoeyB1cmw6IG9yaWdpbmFsVXJsICsgY2RuU2FzVG9rZW4gfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLzMuIENoZWNrIGlzIHNpdGUgRXh0ZXJuYWw/XHJcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5leHRlcm5hbFNpdGVVcmxzKSB7XHJcbiAgICAgIGlmICh1cmwuaW5kZXhPZih0aGlzLmV4dGVybmFsU2l0ZVVybHNbaV0pID49IDApIHtcclxuICAgICAgICBpc0V4dGVybmFsU2l0ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLzQuIElzIEF1dGhvcml6YXRpb24gVG9rZW4gUmVxdWlyZWRcclxuICAgIGlmIChpc0V4dGVybmFsU2l0ZSkge1xyXG4gICAgICBhdXRob3JpemF0aW9uVG9rZW5SZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdXRob3JpemF0aW9uVG9rZW5FeGNlcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKHRoaXMuYXV0aG9yaXphdGlvblRva2VuRXhjZXB0aW9uc1tpXSkgPj0gMCkge1xyXG4gICAgICAgICAgYXV0aG9yaXphdGlvblRva2VuUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhZGltT1M6IG5vIGNhc2hpbmcgZm9yIEFQSSBjYWxsc1xyXG4gICAgaWYgKHVybC5pbmRleE9mKCcvYXBpLycpID4gLTEpIHtcclxuICAgICAgbGV0IG5ld1VybCA9ICcnO1xyXG4gICAgICBjb25zdCB0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGlmICh1cmwuaW5kZXhPZignPycpID4gLTEpIHtcclxuICAgICAgICBuZXdVcmwgPSBvcmlnaW5hbFVybCArICcmdD0nICsgdDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBuZXdVcmwgPSBvcmlnaW5hbFVybCArICc/dD0nICsgdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVxID0gcmVxLmNsb25lKHsgdXJsOiBuZXdVcmwgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpIH0pO1xyXG4gICAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdGV4dCcpIH0pO1xyXG5cclxuICAgIHRoaXMub25SZXF1ZXN0U3RhcnQobG9hZGluZ1JlcXVpcmVkKTtcclxuXHJcbiAgICBpZiAoYXV0aG9yaXphdGlvblRva2VuUmVxdWlyZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4ocmVxLnVybCkucGlwZShcclxuICAgICAgICBtZXJnZU1hcCgodG9rZW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgLypcclxuICAgICAgICAgIGxldCB1c2VyRW1haWwgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJFbWFpbCgpO1xyXG5cclxuICAgICAgICAgIHJlcSA9IHJlcS5jbG9uZSh7IGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldCgnY2xpX3Nlc3Npb25ndWlkJywgTWljZUFwcENvcmVTZXR0aW5ncy5TRVJWSUNFU19DT05GLkNMSV9TZXNzaW9uR1VJRCkgfSk7XHJcbiAgICAgICAgICByZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoJ2Nza2lpJywgTWljZUFwcENvcmVTZXR0aW5ncy5TRVJWSUNFU19DT05GLnNlbGVjdGVkQ2xpZW50SUQpIH0pO1xyXG4gICAgICAgICAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdjc2tpaV91cG4nLCB1c2VyRW1haWwpIH0pO1xyXG4gICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICAgICAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgdG9rZW4pIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUh0dHBSZXF1ZXN0KHJlcSwgbmV4dCwgbG9hZGluZ1JlcXVpcmVkKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIdHRwUmVxdWVzdChyZXEsIG5leHQsIGxvYWRpbmdSZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVIdHRwUmVxdWVzdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyLCBsb2FkaW5nUmVxdWlyZWQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PntcclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpLnBpcGUodGFwKHtcclxuICAgICAgbmV4dDogKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5vblJlcXVlc3RFbmQobG9hZGluZ1JlcXVpcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm9uUmVxdWVzdEVuZChsb2FkaW5nUmVxdWlyZWQpO1xyXG4gICAgICAgIHRoaXMubG9nZ2luZ1NlcnZpY2UubG9nRXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLy9FdmVudHNcclxuICBvblJlcXVlc3RTdGFydChsb2FkaW5nUmVxdWlyZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChsb2FkaW5nUmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zaG93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlcXVlc3RFbmQobG9hZGluZ1JlcXVpcmVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAobG9hZGluZ1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2UuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=