@osovitny/anatoly 3.16.43 → 3.16.45

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,69 @@
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
  }
51
+ handleHttpRequest(req, next, loadingRequired) {
52
+ return next.handle(req).pipe(tap({
53
+ next: (event) => {
54
+ if (event instanceof HttpResponse) {
55
+ this.onRequestEnd(loadingRequired);
56
+ }
57
+ },
58
+ error: (err) => {
59
+ this.onRequestEnd(loadingRequired);
60
+ this.loggingService.logError(err);
61
+ }
62
+ }));
63
+ }
36
64
  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;
65
+ let isCDNEnabled = AppCoreSettings.IsCDNEnabled;
66
+ let cdnSasToken = AppCoreSettings.CDNSASToken;
67
+ let isLoadingFreezed = this.loadingService.isFreezed;
44
68
  let loadingRequired = !isLoadingFreezed;
69
+ let url = req.url.toLowerCase();
70
+ let originalUrl = req.url;
71
+ let isExternalSite = false;
72
+ let authorizationTokenRequired = true;
73
+ //1. longRunning tasks
45
74
  if (!isLoadingFreezed) {
46
- for (const i of this.longRunningExceptionsList) {
47
- if (url.indexOf(this.longRunningExceptionsList[i]) >= 0) {
75
+ for (const i of this.longRunningExceptions) {
76
+ if (url.indexOf(this.longRunningExceptions[i]) >= 0) {
48
77
  loadingRequired = false;
49
78
  break;
50
79
  }
51
80
  }
52
81
  }
82
+ //2. Check should we add CDN SAS tokens
53
83
  if (isCDNEnabled) {
54
84
  for (const i of this.autoCDNSASTokenUrls) {
55
85
  if (url.indexOf(this.autoCDNSASTokenUrls[i]) >= 0) {
@@ -58,13 +88,26 @@ export class AnatolyHttpInterceptor {
58
88
  }
59
89
  }
60
90
  }
91
+ //3. Check is site External?
61
92
  for (const i of this.externalSiteUrls) {
62
93
  if (url.indexOf(this.externalSiteUrls[i]) >= 0) {
63
94
  isExternalSite = true;
64
95
  break;
65
96
  }
66
97
  }
67
- // VadimOS: IE11-fix
98
+ //4. Is Authorization Token Required
99
+ if (isExternalSite) {
100
+ authorizationTokenRequired = false;
101
+ }
102
+ else {
103
+ for (var i = 0; i < this.authorizationTokenExceptions.length; i++) {
104
+ if (url.indexOf(this.authorizationTokenExceptions[i]) >= 0) {
105
+ authorizationTokenRequired = false;
106
+ break;
107
+ }
108
+ }
109
+ }
110
+ // VadimOS: no cashing for API calls
68
111
  if (url.indexOf('/api/') > -1) {
69
112
  let newUrl = '';
70
113
  const t = new Date().getTime().toString();
@@ -79,15 +122,28 @@ export class AnatolyHttpInterceptor {
79
122
  req = req.clone({ headers: req.headers.set('Accept', 'application/json') });
80
123
  req = req.clone({ headers: req.headers.set('Accept', 'application/text') });
81
124
  this.onRequestStart(loadingRequired);
82
- return next.handle(req).pipe(tap((event) => {
83
- if (event instanceof HttpResponse) {
84
- this.onRequestEnd(loadingRequired);
85
- }
86
- }, (err) => {
87
- this.onRequestEnd(loadingRequired);
88
- this.loggingService.logError(err);
89
- }));
125
+ if (authorizationTokenRequired) {
126
+ return this.authService.getAccessToken(req.url).pipe(mergeMap((token) => {
127
+ /*
128
+ let userEmail = this.authService.getUserEmail();
129
+
130
+ req = req.clone({ headers: req.headers.set('cli_sessionguid', MiceAppCoreSettings.SERVICES_CONF.CLI_SessionGUID) });
131
+ req = req.clone({ headers: req.headers.set('cskii', MiceAppCoreSettings.SERVICES_CONF.selectedClientID) });
132
+ req = req.clone({ headers: req.headers.set('cskii_upn', userEmail) });
133
+ */
134
+ if (token) {
135
+ req = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + token) });
136
+ }
137
+ return this.handleHttpRequest(req, next, loadingRequired);
138
+ }), catchError(err => {
139
+ return of(null);
140
+ }));
141
+ }
142
+ else {
143
+ return this.handleHttpRequest(req, next, loadingRequired);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cEludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL2h0dHBJbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQXVELFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTztBQUNQLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFcEMsS0FBSztBQUNMLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFNckQsTUFBTSxPQUFPLHNCQUFzQjtJQW9CckI7SUFDQTtJQUNBO0lBckJGLHFCQUFxQixHQUFHO1FBQ2hDLGFBQWE7S0FDZCxDQUFDO0lBRVEsNEJBQTRCLEdBQUc7UUFDdkMsT0FBTztRQUNQLE1BQU07S0FDUCxDQUFDO0lBRVEsbUJBQW1CLEdBQUc7UUFDOUIsUUFBUTtRQUNSLE1BQU07S0FDUCxDQUFDO0lBRVEsZ0JBQWdCLEdBQUc7UUFDM0IsbUJBQW1CO0tBQ3BCLENBQUM7SUFFRixZQUNZLFdBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDMUMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEdBQXFCLEVBQUUsSUFBaUIsRUFBRSxlQUF3QjtRQUMxRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENB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QUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2YsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO2FBQ0k7WUFDSCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUVELFFBQVE7SUFDUixjQUFjLENBQUMsZUFBd0I7UUFDckMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsZUFBd0I7UUFDbkMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7Z0ZBcEpVLHNCQUFzQjtnRUFBdEIsc0JBQXNCLFdBQXRCLHNCQUFzQjs7dUZBQXRCLHNCQUFzQjtjQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDI1IE1hcmNoIDIwMjBcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHtIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vIFJ4SlNcclxuaW1wb3J0IHtjYXRjaEVycm9yLCBtZXJnZU1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQXBwQ29yZVNldHRpbmdzIH0gZnJvbSAnLi4vY29uc3RzL3NldHRpbmdzJztcclxuaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2FkaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL2xvZ2dpbmcvbG9nZ2luZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9pYW0nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQW5hdG9seUh0dHBJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgcHJvdGVjdGVkIGxvbmdSdW5uaW5nRXhjZXB0aW9ucyA9IFtcclxuICAgICdjaHVua3VwbG9hZCcsXHJcbiAgXTtcclxuXHJcbiAgcHJvdGVjdGVkIGF1dGhvcml6YXRpb25Ub2tlbkV4Y2VwdGlvbnMgPSBbXHJcbiAgICAnanNvbnMnLFxyXG4gICAgJ2wxMG4nXHJcbiAgXTtcclxuXHJcbiAgcHJvdGVjdGVkIGF1dG9DRE5TQVNUb2tlblVybHMgPSBbXHJcbiAgICAnY2h1bmtzJyxcclxuICAgICdsMTBuJ1xyXG4gIF07XHJcblxyXG4gIHByb3RlY3RlZCBleHRlcm5hbFNpdGVVcmxzID0gW1xyXG4gICAgJ2F6dXJld2Vic2l0ZXMubmV0J1xyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBsb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgbG9nZ2luZ1NlcnZpY2U6IExvZ2dpbmdTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUh0dHBSZXF1ZXN0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIsIGxvYWRpbmdSZXF1aXJlZDogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+e1xyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSkucGlwZSh0YXAoe1xyXG4gICAgICBuZXh0OiAoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUmVxdWVzdEVuZChsb2FkaW5nUmVxdWlyZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMub25SZXF1ZXN0RW5kKGxvYWRpbmdSZXF1aXJlZCk7XHJcbiAgICAgICAgdGhpcy5sb2dnaW5nU2VydmljZS5sb2dFcnJvcihlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIGxldCBpc0NETkVuYWJsZWQgPSBBcHBDb3JlU2V0dGluZ3MuSXNDRE5FbmFibGVkO1xyXG4gICAgbGV0IGNkblNhc1Rva2VuID0gQXBwQ29yZVNldHRpbmdzLkNETlNBU1Rva2VuO1xyXG4gICAgbGV0IGlzTG9hZGluZ0ZyZWV6ZWQgPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLmlzRnJlZXplZDtcclxuICAgIGxldCBsb2FkaW5nUmVxdWlyZWQgPSAhaXNMb2FkaW5nRnJlZXplZDtcclxuICAgIGxldCB1cmwgPSByZXEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBsZXQgb3JpZ2luYWxVcmwgPSByZXEudXJsO1xyXG4gICAgbGV0IGlzRXh0ZXJuYWxTaXRlID0gZmFsc2U7XHJcbiAgICBsZXQgYXV0aG9yaXphdGlvblRva2VuUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIC8vMS4gbG9uZ1J1bm5pbmcgdGFza3NcclxuICAgIGlmICghaXNMb2FkaW5nRnJlZXplZCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5sb25nUnVubmluZ0V4Y2VwdGlvbnMpIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YodGhpcy5sb25nUnVubmluZ0V4Y2VwdGlvbnNbaV0pID49IDApIHtcclxuICAgICAgICAgIGxvYWRpbmdSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8yLiBDaGVjayBzaG91bGQgd2UgYWRkIENETiBTQVMgdG9rZW5zXHJcbiAgICBpZiAoaXNDRE5FbmFibGVkKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLmF1dG9DRE5TQVNUb2tlblVybHMpIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YodGhpcy5hdXRvQ0ROU0FTVG9rZW5VcmxzW2ldKSA+PSAwKSB7XHJcbiAgICAgICAgICByZXEgPSByZXEuY2xvbmUoeyB1cmw6IG9yaWdpbmFsVXJsICsgY2RuU2FzVG9rZW4gfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLzMuIENoZWNrIGlzIHNpdGUgRXh0ZXJuYWw/XHJcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5leHRlcm5hbFNpdGVVcmxzKSB7XHJcbiAgICAgIGlmICh1cmwuaW5kZXhPZih0aGlzLmV4dGVybmFsU2l0ZVVybHNbaV0pID49IDApIHtcclxuICAgICAgICBpc0V4dGVybmFsU2l0ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLzQuIElzIEF1dGhvcml6YXRpb24gVG9rZW4gUmVxdWlyZWRcclxuICAgIGlmIChpc0V4dGVybmFsU2l0ZSkge1xyXG4gICAgICBhdXRob3JpemF0aW9uVG9rZW5SZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdXRob3JpemF0aW9uVG9rZW5FeGNlcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKHRoaXMuYXV0aG9yaXphdGlvblRva2VuRXhjZXB0aW9uc1tpXSkgPj0gMCkge1xyXG4gICAgICAgICAgYXV0aG9yaXphdGlvblRva2VuUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhZGltT1M6IG5vIGNhc2hpbmcgZm9yIEFQSSBjYWxsc1xyXG4gICAgaWYgKHVybC5pbmRleE9mKCcvYXBpLycpID4gLTEpIHtcclxuICAgICAgbGV0IG5ld1VybCA9ICcnO1xyXG4gICAgICBjb25zdCB0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGlmICh1cmwuaW5kZXhPZignPycpID4gLTEpIHtcclxuICAgICAgICBuZXdVcmwgPSBvcmlnaW5hbFVybCArICcmdD0nICsgdDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBuZXdVcmwgPSBvcmlnaW5hbFVybCArICc/dD0nICsgdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVxID0gcmVxLmNsb25lKHsgdXJsOiBuZXdVcmwgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpIH0pO1xyXG4gICAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdGV4dCcpIH0pO1xyXG5cclxuICAgIHRoaXMub25SZXF1ZXN0U3RhcnQobG9hZGluZ1JlcXVpcmVkKTtcclxuXHJcbiAgICBpZiAoYXV0aG9yaXphdGlvblRva2VuUmVxdWlyZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4ocmVxLnVybCkucGlwZShcclxuICAgICAgICBtZXJnZU1hcCgodG9rZW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgLypcclxuICAgICAgICAgIGxldCB1c2VyRW1haWwgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJFbWFpbCgpO1xyXG5cclxuICAgICAgICAgIHJlcSA9IHJlcS5jbG9uZSh7IGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldCgnY2xpX3Nlc3Npb25ndWlkJywgTWljZUFwcENvcmVTZXR0aW5ncy5TRVJWSUNFU19DT05GLkNMSV9TZXNzaW9uR1VJRCkgfSk7XHJcbiAgICAgICAgICByZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoJ2Nza2lpJywgTWljZUFwcENvcmVTZXR0aW5ncy5TRVJWSUNFU19DT05GLnNlbGVjdGVkQ2xpZW50SUQpIH0pO1xyXG4gICAgICAgICAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdjc2tpaV91cG4nLCB1c2VyRW1haWwpIH0pO1xyXG4gICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICAgICAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgdG9rZW4pIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUh0dHBSZXF1ZXN0KHJlcSwgbmV4dCwgbG9hZGluZ1JlcXVpcmVkKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIdHRwUmVxdWVzdChyZXEsIG5leHQsIGxvYWRpbmdSZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0V2ZW50c1xyXG4gIG9uUmVxdWVzdFN0YXJ0KGxvYWRpbmdSZXF1aXJlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGxvYWRpbmdSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUmVxdWVzdEVuZChsb2FkaW5nUmVxdWlyZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChsb2FkaW5nUmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==