@dealpos-npm/ng-dealpos-library 2.0.0 → 2.0.1

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,5 +1,5 @@
1
1
  import { Injectable } from "@angular/core";
2
- import { Observable, from, of } from "rxjs";
2
+ import { Observable, throwError } from "rxjs";
3
3
  import { HttpHeaders, } from "@angular/common/http";
4
4
  import { catchError, timeout } from "rxjs/operators";
5
5
  import * as i0 from "@angular/core";
@@ -11,18 +11,13 @@ export class HttpService {
11
11
  this.http = http;
12
12
  this.toastr = toastr;
13
13
  this.router = router;
14
- this.a = 0;
15
- alert('Dealpos');
16
- }
17
- testToastr() {
18
- this.toastr.success("1", "1");
19
14
  }
20
15
  PostToUrlEncode(url, params, time = 100000) {
21
16
  let headers = new HttpHeaders();
22
17
  headers = headers.set("Content-Type", "application/x-www-form-urlencoded");
23
18
  return new Observable((observer) => {
24
19
  this.http
25
- .post(url, params, { headers: headers })
20
+ .post((url), params, { headers: headers })
26
21
  .pipe(timeout(time))
27
22
  .subscribe((data) => {
28
23
  observer.next(data);
@@ -38,7 +33,7 @@ export class HttpService {
38
33
  const options = { responseType: "text", headers: httpHeaders };
39
34
  return new Observable((observer) => {
40
35
  this.http
41
- .get("/API/Token/GetZendeskJWT", options)
36
+ .get(("/API/Token/GetZendeskJWT"), options)
42
37
  .pipe(timeout(time))
43
38
  .subscribe((data) => {
44
39
  observer.next(data);
@@ -56,7 +51,7 @@ export class HttpService {
56
51
  const options = { responseType: "text", headers: httpHeaders };
57
52
  return new Observable((observer) => {
58
53
  this.http
59
- .post(url, data, options)
54
+ .post((url), data, options)
60
55
  .pipe(timeout(time))
61
56
  .subscribe((res) => {
62
57
  observer.next(res);
@@ -81,21 +76,30 @@ export class HttpService {
81
76
  let options = {
82
77
  headers: httpHeaders,
83
78
  };
84
- return this.http.get(url, options)
79
+ return this.http.get((url), options)
85
80
  .pipe(catchError(err => {
86
- // show toastr error
87
- let errMessage = this.errorMessageHandling(err);
88
- this.toastr.error(errMessage.Message != "" ? errMessage.Message : "An unknown error has occured!", errMessage.header);
89
- let error$ = of('error', err);
90
- if (err.status == 402) {
91
- error$ = from(this.router.navigate(['/menu/Profile/Main/My_Subscription']));
81
+ let unauthorized = this.unauthorizedErrorHandling(err);
82
+ if (!unauthorized) {
83
+ // show toastr error
84
+ let errMessage = this.errorMessageHandling(err);
85
+ this.toastr.error(errMessage.Message != "" ? errMessage.Message : "An unknown error has occured!", errMessage.header);
86
+ this.paymentErrorHandling(err);
92
87
  }
93
- return error$;
88
+ return throwError(() => err);
94
89
  }));
95
90
  }
96
91
  getNews(url) {
97
92
  return this.http.get(url);
98
93
  }
94
+ /**
95
+ * Handles payment errors by navigating to the subscription page if the error status is 402.
96
+ * @param err - The HttpErrorResponse object containing the error information.
97
+ */
98
+ paymentErrorHandling(err) {
99
+ if (err.status == 402) {
100
+ this.router.navigate(['/menu/Profile/Main/My_Subscription']);
101
+ }
102
+ }
99
103
  /**
100
104
  * METHOD POST
101
105
  * This should cast the httpResponse to the data model we expect
@@ -115,10 +119,26 @@ export class HttpService {
115
119
  httpHeaders = httpHeaders.append("Authorization", "Bearer " + token);
116
120
  }
117
121
  let options = {
118
- headers: httpHeaders,
122
+ headers: httpHeaders
123
+ };
124
+ Date.prototype.toJSON = function () {
125
+ let v = this.getFullYear() +
126
+ '-' + pad(this.getMonth() + 1) +
127
+ '-' + pad(this.getDate()) +
128
+ 'T' + pad(this.getHours()) +
129
+ ':' + pad(this.getMinutes()) +
130
+ ':' + pad(this.getSeconds()) +
131
+ '.' + '000';
132
+ return v;
119
133
  };
134
+ function pad(number) {
135
+ if (number < 10) {
136
+ return '0' + number;
137
+ }
138
+ return number;
139
+ }
120
140
  this.http
121
- .post(url, data, options)
141
+ .post((url), data, options)
122
142
  .pipe(timeout(time))
123
143
  .subscribe({
124
144
  next: (result) => {
@@ -145,6 +165,53 @@ export class HttpService {
145
165
  });
146
166
  });
147
167
  }
168
+ /**
169
+ * METHOD POST
170
+ * Use this method when we are expecting blob to be written from the server
171
+ * @param url
172
+ * @param data
173
+ * @param time
174
+ * @returns
175
+ */
176
+ postFile(url, data, time = 100000) {
177
+ return new Observable((observer) => {
178
+ let token = localStorage.getItem("Token");
179
+ let httpHeaders = new HttpHeaders({
180
+ "Content-Type": "application/json",
181
+ "Cache-Control": "no-cache",
182
+ });
183
+ if (token) {
184
+ httpHeaders = httpHeaders.append("Authorization", "Bearer " + token);
185
+ }
186
+ this.http
187
+ .post((url), data, { headers: httpHeaders, observe: 'response', responseType: 'blob' })
188
+ .pipe(timeout(time))
189
+ .subscribe({
190
+ next: (result) => {
191
+ observer.next({
192
+ title: result.headers.get('Content-Disposition'),
193
+ file: result.body
194
+ });
195
+ observer.complete();
196
+ },
197
+ error: (err) => {
198
+ if ('application/json; charset=utf-8' === err.headers.get('Content-Type')) {
199
+ const reader = new FileReader();
200
+ reader.addEventListener('loadend', (e) => {
201
+ const er = JSON.parse(e.srcElement['result'])?.Message;
202
+ let unauthorized = this.unauthorizedErrorHandling(err);
203
+ if (!unauthorized) {
204
+ let errMessage = this.errorMessageHandling(err);
205
+ this.toastr.error(er ?? "An unknown error has occured!", errMessage.header, { enableHtml: true });
206
+ }
207
+ });
208
+ reader.readAsText(err.error);
209
+ }
210
+ observer.error(err);
211
+ },
212
+ });
213
+ });
214
+ }
148
215
  /**
149
216
  * METHOD PUT
150
217
  * This should cast the httpResponse to the data model we expect
@@ -167,7 +234,7 @@ export class HttpService {
167
234
  headers: httpHeaders,
168
235
  };
169
236
  this.http
170
- .put(url, data, options)
237
+ .put((url), data, options)
171
238
  .pipe(timeout(time))
172
239
  .subscribe({
173
240
  next: (result) => {
@@ -217,7 +284,7 @@ export class HttpService {
217
284
  body: data
218
285
  };
219
286
  this.http
220
- .delete(url, options)
287
+ .delete((url), options)
221
288
  .pipe(timeout(time))
222
289
  .subscribe({
223
290
  next: (result) => {
@@ -261,6 +328,7 @@ export class HttpService {
261
328
  return retVal;
262
329
  }
263
330
  errorMessageHandling(err) {
331
+ ;
264
332
  let header = "API Error";
265
333
  let message = "Exception Message";
266
334
  if (err.error) {
@@ -285,7 +353,7 @@ export class HttpService {
285
353
  postFormDataWithoutBearer(url, data) {
286
354
  return new Observable((observer) => {
287
355
  this.http
288
- .post(url, data)
356
+ .post((url), data)
289
357
  .pipe(timeout(100000))
290
358
  .subscribe({
291
359
  next: (data) => {
@@ -312,38 +380,41 @@ export class HttpService {
312
380
  headers: httpHeaders,
313
381
  };
314
382
  this.http
315
- .post(url, data, options)
383
+ .post((url), data, options)
316
384
  .pipe(timeout(100000))
317
- .subscribe((data) => {
318
- observer.next(data);
319
- observer.complete();
320
- }, (err) => {
321
- //Exception Handling
322
- if (err.status == 200) {
323
- //when Response is not application/json ex: some API return text/csv
324
- observer.next(err.error.text);
385
+ .subscribe({
386
+ next: (value) => {
387
+ observer.next(value);
325
388
  observer.complete();
326
- }
327
- else {
328
- let unauthorized = this.unauthorizedErrorHandling(err);
329
- if (!unauthorized && showToastr) {
330
- let errMessage = this.errorMessageHandling(err);
331
- this.toastr.error(errMessage.Message != ""
332
- ? errMessage.Message
333
- : "An unknown error has occured!", errMessage.header);
389
+ },
390
+ error: (err) => {
391
+ //Exception Handling
392
+ if (err.status == 200) {
393
+ //when Response is not application/json ex: some API return text/csv
394
+ observer.next(err.error.text);
395
+ observer.complete();
396
+ }
397
+ else {
398
+ let unauthorized = this.unauthorizedErrorHandling(err);
399
+ if (!unauthorized && showToastr) {
400
+ let errMessage = this.errorMessageHandling(err);
401
+ this.toastr.error(errMessage.Message != ""
402
+ ? errMessage.Message
403
+ : "An unknown error has occured!", errMessage.header);
404
+ }
405
+ observer.error(err);
334
406
  }
335
- observer.error(err);
336
407
  }
337
408
  });
338
409
  });
339
410
  }
340
411
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i2.ToastrService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
341
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HttpService, providedIn: 'root' }); }
412
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HttpService, providedIn: "root" }); }
342
413
  }
343
414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HttpService, decorators: [{
344
415
  type: Injectable,
345
416
  args: [{
346
- providedIn: 'root'
417
+ providedIn: "root",
347
418
  }]
348
419
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ToastrService }, { type: i3.Router }] });
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVhbHBvcy1ucG0vbmctZGVhbHBvcy1saWJyYXJ5L3NlcnZpY2VzL2h0dHAvc3JjL2h0dHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBR0wsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFLckQsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFDVSxJQUFnQixFQUNoQixNQUFxQixFQUNyQixNQUFjO1FBRmQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFKeEIsTUFBQyxHQUFHLENBQUMsQ0FBQTtRQU1ILEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNsQixDQUFDO0lBQ00sVUFBVTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBQ00sZUFBZSxDQUNwQixHQUFXLEVBQ1gsTUFBZSxFQUNmLE9BQWUsTUFBTTtRQUVyQixJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSTtpQkFDTixJQUFJLENB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QUMsK0JBQStCLEVBQ25DLFVBQVUsQ0FBQyxNQUFNLENBQ2xCLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBcllVLFdBQVc7a0hBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtcclxuICBIdHRwQ2xpZW50LFxyXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gIEh0dHBIZWFkZXJzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSBcIm5neC10b2FzdHJcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGltZW91dCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlIHtcclxuICBhID0gMFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBhbGVydCgnRGVhbHBvcycpXHJcbiAgfVxyXG4gIHB1YmxpYyB0ZXN0VG9hc3RyKCkge1xyXG4gICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIjFcIiwgXCIxXCIpXHJcbiAgfVxyXG4gIHB1YmxpYyBQb3N0VG9VcmxFbmNvZGUoXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIHBhcmFtcz86IHN0cmluZyxcclxuICAgIHRpbWU6IG51bWJlciA9IDEwMDAwMFxyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICB0aGlzLmh0dHBcclxuICAgICAgICAucG9zdCh1cmwsIHBhcmFtcywgeyBoZWFkZXJzOiBoZWFkZXJzIH0pXHJcbiAgICAgICAgLnBpcGUodGltZW91dCh0aW1lKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xyXG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFRleHQodGltZTogbnVtYmVyID0gMTAwMDAwKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGxldCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVG9rZW5cIik7XHJcbiAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBcIkJlYXJlciBcIiArIHRva2VuLFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBvcHRpb25zID0geyByZXNwb25zZVR5cGU6IFwidGV4dFwiIGFzIFwidGV4dFwiLCBoZWFkZXJzOiBodHRwSGVhZGVycyB9O1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICB0aGlzLmh0dHBcclxuICAgICAgICAuZ2V0KFwiL0FQSS9Ub2tlbi9HZXRaZW5kZXNrSldUXCIsIG9wdGlvbnMpXHJcbiAgICAgICAgLnBpcGUodGltZW91dCh0aW1lKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xyXG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFBPU1RleHQoXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGRhdGE/OiBhbnksXHJcbiAgICB0aW1lOiBudW1iZXIgPSAxMDAwMDBcclxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJUb2tlblwiKTtcclxuICAgIGxldCBodHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxyXG4gICAgICBBdXRob3JpemF0aW9uOiBcIkJlYXJlciBcIiArIHRva2VuLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgcmVzcG9uc2VUeXBlOiBcInRleHRcIiBhcyBcInRleHRcIiwgaGVhZGVyczogaHR0cEhlYWRlcnMgfTtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgLnBvc3QodXJsLCBkYXRhLCBvcHRpb25zKVxyXG4gICAgICAgIC5waXBlKHRpbWVvdXQodGltZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlcyk7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gdXJsIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQ8VD4odXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGxldCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVG9rZW5cIik7XHJcbiAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcclxuICAgIH0pO1xyXG4gICAgaWYgKHRva2VuKSB7XHJcbiAgICAgIGh0dHBIZWFkZXJzID0gaHR0cEhlYWRlcnMuYXBwZW5kKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHRva2VuKTtcclxuICAgIH1cclxuICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBodHRwSGVhZGVycyxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odXJsLCBvcHRpb25zKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAvLyBzaG93IHRvYXN0ciBlcnJvclxyXG4gICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSB0aGlzLmVycm9yTWVzc2FnZUhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcclxuICAgICAgICAgICAgZXJyTWVzc2FnZS5NZXNzYWdlICE9IFwiXCIgPyBlcnJNZXNzYWdlLk1lc3NhZ2UgOiBcIkFuIHVua25vd24gZXJyb3IgaGFzIG9jY3VyZWQhXCIsXHJcbiAgICAgICAgICAgIGVyck1lc3NhZ2UuaGVhZGVyKTtcclxuICAgICAgICAgIGxldCBlcnJvciQgPSBvZignZXJyb3InLCBlcnIpXHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PSA0MDIpIHtcclxuICAgICAgICAgICAgZXJyb3IkID0gZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tZW51L1Byb2ZpbGUvTWFpbi9NeV9TdWJzY3JpcHRpb24nXSkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZXJyb3IkXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgcHVibGljIGdldE5ld3M8VD4odXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHVybClcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTUVUSE9EIFBPU1RcclxuICAgKiBUaGlzIHNob3VsZCBjYXN0IHRoZSBodHRwUmVzcG9uc2UgdG8gdGhlIGRhdGEgbW9kZWwgd2UgZXhwZWN0XHJcbiAgICogQHBhcmFtIHVybFxyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICogQHBhcmFtIHRpbWVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBwb3N0PFQ+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBkYXRhPzogYW55LFxyXG4gICAgdGltZTogbnVtYmVyID0gMTAwMDAwXHJcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIGxldCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVG9rZW5cIik7XHJcbiAgICAgIGxldCBodHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGh0dHBIZWFkZXJzID0gaHR0cEhlYWRlcnMuYXBwZW5kKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHRva2VuKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgICBoZWFkZXJzOiBodHRwSGVhZGVycyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0PFQ+KHVybCwgZGF0YSwgb3B0aW9ucylcclxuICAgICAgICAucGlwZSh0aW1lb3V0KHRpbWUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgLy93aGVuIFJlc3BvbnNlIGlzIG5vdCBhcHBsaWNhdGlvbi9qc29uIGV4OiBzb21lIEFQSSByZXR1cm4gdGV4dC9jc3ZcclxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGVyci5lcnJvci50ZXh0KTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxldCB1bmF1dGhvcml6ZWQgPSB0aGlzLnVuYXV0aG9yaXplZEVycm9ySGFuZGxpbmcoZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoIXVuYXV0aG9yaXplZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSB0aGlzLmVycm9yTWVzc2FnZUhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcclxuICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZS5NZXNzYWdlICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICA/IGVyck1lc3NhZ2UuTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIDogXCJBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cmVkIVwiLFxyXG4gICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlLmhlYWRlciwgeyBlbmFibGVIdG1sOiB0cnVlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1FVEhPRCBQVVRcclxuICAgKiBUaGlzIHNob3VsZCBjYXN0IHRoZSBodHRwUmVzcG9uc2UgdG8gdGhlIGRhdGEgbW9kZWwgd2UgZXhwZWN0XHJcbiAgICogQHBhcmFtIHVybFxyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICogQHBhcmFtIHRpbWVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBwdXQ8VD4oXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGRhdGE/OiBhbnksXHJcbiAgICB0aW1lOiBudW1iZXIgPSAxMDAwMDBcclxuICApOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgbGV0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJUb2tlblwiKTtcclxuICAgICAgbGV0IGh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgaHR0cEhlYWRlcnMgPSBodHRwSGVhZGVycy5hcHBlbmQoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgdG9rZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICAgIGhlYWRlcnM6IGh0dHBIZWFkZXJzLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgLnB1dDxUPih1cmwsIGRhdGEsIG9wdGlvbnMpXHJcbiAgICAgICAgLnBpcGUodGltZW91dCh0aW1lKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXN1bHQpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIC8vd2hlbiBSZXNwb25zZSBpcyBub3QgYXBwbGljYXRpb24vanNvbiBleDogc29tZSBBUEkgcmV0dXJuIHRleHQvY3N2XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlcnIuZXJyb3IudGV4dCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZXQgdW5hdXRob3JpemVkID0gdGhpcy51bmF1dGhvcml6ZWRFcnJvckhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKCF1bmF1dGhvcml6ZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gdGhpcy5lcnJvck1lc3NhZ2VIYW5kbGluZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UuTWVzc2FnZSAhPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJNZXNzYWdlLk1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICA6IFwiQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCFcIixcclxuICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZS5oZWFkZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1FVEhPRCBERUxFVEVcclxuICAgKiBUaGlzIHNob3VsZCBjYXN0IHRoZSBodHRwUmVzcG9uc2UgdG8gdGhlIGRhdGEgbW9kZWwgd2UgZXhwZWN0XHJcbiAgICogQHBhcmFtIHVybFxyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICogQHBhcmFtIHRpbWVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWxldGU8VD4oXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGRhdGE/OiBhbnksXHJcbiAgICB0aW1lOiBudW1iZXIgPSAxMDAwMDBcclxuICApOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgbGV0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJUb2tlblwiKTtcclxuICAgICAgbGV0IGh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgaHR0cEhlYWRlcnMgPSBodHRwSGVhZGVycy5hcHBlbmQoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgdG9rZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICAgIGhlYWRlcnM6IGh0dHBIZWFkZXJzLFxyXG4gICAgICAgIGJvZHk6IGRhdGFcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5kZWxldGU8VD4odXJsLCBvcHRpb25zKVxyXG4gICAgICAgIC5waXBlKHRpbWVvdXQodGltZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzdWx0KTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgICAvL3doZW4gUmVzcG9uc2UgaXMgbm90IGFwcGxpY2F0aW9uL2pzb24gZXg6IHNvbWUgQVBJIHJldHVybiB0ZXh0L2NzdlxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZXJyLmVycm9yLnRleHQpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IHVuYXV0aG9yaXplZCA9IHRoaXMudW5hdXRob3JpemVkRXJyb3JIYW5kbGluZyhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICghdW5hdXRob3JpemVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHRoaXMuZXJyb3JNZXNzYWdlSGFuZGxpbmcoZXJyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlLk1lc3NhZ2UgIT0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgID8gZXJyTWVzc2FnZS5NZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgOiBcIkFuIHVua25vd24gZXJyb3IgaGFzIG9jY3VyZWQhXCIsXHJcbiAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UuaGVhZGVyXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVuYXV0aG9yaXplZEVycm9ySGFuZGxpbmcoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgbGV0IHJldFZhbCA9IGZhbHNlO1xyXG4gICAgaWYgKGVyci5zdGF0dXMgPT0gNDAxIHx8IGVyci5zdGF0dXMgPT0gNDAzKSB7XHJcbiAgICAgIC8vVW5hdXRob3JpemVkIEVycm9yIEhhbmRsaW5nXHJcbiAgICAgIGxldCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVG9rZW5cIik7XHJcbiAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tZW51L1VuYXV0aG9yaXplZC9NYWluL1VuYXV0aG9yaXplZFwiXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy9yZWRpcmVjdCB0byBMb2dpbiBwYWdlIGlmIHRoZXJlIGlzIG5vIEpXVCBUT0tFTiBhdmFpbGFibGVcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL1wiO1xyXG4gICAgICB9XHJcbiAgICAgIHJldFZhbCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmFsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlcnJvck1lc3NhZ2VIYW5kbGluZyhlcnI6IGFueSk6IHsgTWVzc2FnZTogc3RyaW5nOyBoZWFkZXI6IHN0cmluZyB9IHtcclxuICAgIGxldCBoZWFkZXIgPSBcIkFQSSBFcnJvclwiO1xyXG4gICAgbGV0IG1lc3NhZ2UgPSBcIkV4Y2VwdGlvbiBNZXNzYWdlXCI7XHJcbiAgICBpZiAoZXJyLmVycm9yKSB7XHJcbiAgICAgIC8vSGFuZGxlIDRYWCBlcnJvciBhbmQgNVhYIEVycm9yXHJcbiAgICAgIGhlYWRlciA9IFwiQVBJIEVycm9yIC0gXCIgKyBlcnIuc3RhdHVzO1xyXG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PSA0NTEpIHtcclxuICAgICAgICBoZWFkZXIgPSBcIkVycm9yXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlcnIuZXJyb3IpIHtcclxuICAgICAgICBtZXNzYWdlID0gZXJyLmVycm9yLk1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChlcnIuTWVzc2FnZSkge1xyXG4gICAgICAgIC8vSGFuZGxlIHRpbWVvdXQgc2NlbmFyaW8gd2UgZG8gbm90IHJlY2VpdmUgSFRUUCBTdGF0dXNDb2RlXHJcbiAgICAgICAgaGVhZGVyID0gXCJBUEkgRXJyb3IgLSBcIiArIGVyci5uYW1lO1xyXG4gICAgICAgIG1lc3NhZ2UgPSBlcnIuTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgaGVhZGVyOiBoZWFkZXIsIE1lc3NhZ2U6IG1lc3NhZ2UgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwb3N0Rm9ybURhdGFXaXRob3V0QmVhcmVyKFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBGb3JtRGF0YVxyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0PGFueT4odXJsLCBkYXRhKVxyXG4gICAgICAgIC5waXBlKHRpbWVvdXQoMTAwMDAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YSk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlcnIuZXJyb3IudGV4dCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBvc3RGb3JtRGF0YShcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgZGF0YTogRm9ybURhdGEsXHJcbiAgICBzaG93VG9hc3RyOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIGxldCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVG9rZW5cIik7XHJcbiAgICAgIGxldCBodHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB0b2tlbixcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICAgIGhlYWRlcnM6IGh0dHBIZWFkZXJzLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgLnBvc3Q8YW55Pih1cmwsIGRhdGEsIG9wdGlvbnMpXHJcbiAgICAgICAgLnBpcGUodGltZW91dCgxMDAwMDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgLy9FeGNlcHRpb24gSGFuZGxpbmdcclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIC8vd2hlbiBSZXNwb25zZSBpcyBub3QgYXBwbGljYXRpb24vanNvbiBleDogc29tZSBBUEkgcmV0dXJuIHRleHQvY3N2XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlcnIuZXJyb3IudGV4dCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZXQgdW5hdXRob3JpemVkID0gdGhpcy51bmF1dGhvcml6ZWRFcnJvckhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKCF1bmF1dGhvcml6ZWQgJiYgc2hvd1RvYXN0cikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSB0aGlzLmVycm9yTWVzc2FnZUhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcclxuICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZS5NZXNzYWdlICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICA/IGVyck1lc3NhZ2UuTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIDogXCJBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cmVkIVwiLFxyXG4gICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlLmhlYWRlclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVhbHBvcy1ucG0vbmctZGVhbHBvcy1saWJyYXJ5L3NlcnZpY2VzL2h0dHAvc3JjL2h0dHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFHTCxXQUFXLEdBQ1osTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU1yRCxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUNVLElBQWdCLEVBQ2hCLE1BQXFCLEVBQ3JCLE1BQWM7UUFGZCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUV4QixDQUFDO0lBRU0sZUFBZSxDQUNwQixHQUFXLEVBQ1gsTUFBZSxFQUNmLE9BQWUsTUFBTTtRQUVyQixJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSTtpQkFDTixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7aUJBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ25CLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNs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QUUsQ0FBQzt3QkFDdEIsb0VBQW9FO3dCQUNwRSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzlCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdEIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLFlBQVksSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDaEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUU7Z0NBQ3RCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTztnQ0FDcEIsQ0FBQyxDQUFDLCtCQUErQixFQUNuQyxVQUFVLENBQUMsTUFBTSxDQUNsQixDQUFDO3dCQUNKLENBQUM7d0JBQ0QsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDO2FBQ0YsQ0FDQSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXJkVSxXQUFXO2tIQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtcclxuICBIdHRwQ2xpZW50LFxyXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gIEh0dHBIZWFkZXJzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSBcIm5neC10b2FzdHJcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGltZW91dCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIdHRwU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBQb3N0VG9VcmxFbmNvZGUoXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIHBhcmFtcz86IHN0cmluZyxcclxuICAgIHRpbWU6IG51bWJlciA9IDEwMDAwMFxyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICB0aGlzLmh0dHBcclxuICAgICAgICAucG9zdCgodXJsKSwgcGFyYW1zLCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICAgICAgICAucGlwZSh0aW1lb3V0KHRpbWUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YSk7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0VGV4dCh0aW1lOiBudW1iZXIgPSAxMDAwMDApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJUb2tlblwiKTtcclxuICAgIGxldCBodHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiICsgdG9rZW4sXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IHJlc3BvbnNlVHlwZTogXCJ0ZXh0XCIgYXMgXCJ0ZXh0XCIsIGhlYWRlcnM6IGh0dHBIZWFkZXJzIH07XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5nZXQoKFwiL0FQSS9Ub2tlbi9HZXRaZW5kZXNrSldUXCIpLCBvcHRpb25zKVxyXG4gICAgICAgIC5waXBlKHRpbWVvdXQodGltZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChkYXRhKTtcclxuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBQT1NUZXh0KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBkYXRhPzogYW55LFxyXG4gICAgdGltZTogbnVtYmVyID0gMTAwMDAwXHJcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGxldCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVG9rZW5cIik7XHJcbiAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcclxuICAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB0b2tlbixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IHJlc3BvbnNlVHlwZTogXCJ0ZXh0XCIgYXMgXCJ0ZXh0XCIsIGhlYWRlcnM6IGh0dHBIZWFkZXJzIH07XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0KCh1cmwpLCBkYXRhLCBvcHRpb25zKVxyXG4gICAgICAgIC5waXBlKHRpbWVvdXQodGltZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlcyk7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gdXJsIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQ8VD4odXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGxldCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVG9rZW5cIik7XHJcbiAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcclxuICAgIH0pO1xyXG4gICAgaWYgKHRva2VuKSB7XHJcbiAgICAgIGh0dHBIZWFkZXJzID0gaHR0cEhlYWRlcnMuYXBwZW5kKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHRva2VuKTtcclxuICAgIH1cclxuICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBodHRwSGVhZGVycyxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4oKHVybCksIG9wdGlvbnMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGxldCB1bmF1dGhvcml6ZWQgPSB0aGlzLnVuYXV0aG9yaXplZEVycm9ySGFuZGxpbmcoZXJyKTtcclxuICAgICAgICAgIGlmICghdW5hdXRob3JpemVkKSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgdG9hc3RyIGVycm9yXHJcbiAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gdGhpcy5lcnJvck1lc3NhZ2VIYW5kbGluZyhlcnIpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcclxuICAgICAgICAgICAgICBlcnJNZXNzYWdlLk1lc3NhZ2UgIT0gXCJcIiA/IGVyck1lc3NhZ2UuTWVzc2FnZSA6IFwiQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCFcIixcclxuICAgICAgICAgICAgICBlcnJNZXNzYWdlLmhlYWRlcik7XHJcbiAgICAgICAgICAgIHRoaXMucGF5bWVudEVycm9ySGFuZGxpbmcoZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXROZXdzPFQ+KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPih1cmwpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHBheW1lbnQgZXJyb3JzIGJ5IG5hdmlnYXRpbmcgdG8gdGhlIHN1YnNjcmlwdGlvbiBwYWdlIGlmIHRoZSBlcnJvciBzdGF0dXMgaXMgNDAyLlxyXG4gICAqIEBwYXJhbSBlcnIgLSBUaGUgSHR0cEVycm9yUmVzcG9uc2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9yIGluZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGF5bWVudEVycm9ySGFuZGxpbmcoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgaWYgKGVyci5zdGF0dXMgPT0gNDAyKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21lbnUvUHJvZmlsZS9NYWluL015X1N1YnNjcmlwdGlvbiddKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1FVEhPRCBQT1NUXHJcbiAgICogVGhpcyBzaG91bGQgY2FzdCB0aGUgaHR0cFJlc3BvbnNlIHRvIHRoZSBkYXRhIG1vZGVsIHdlIGV4cGVjdFxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqIEBwYXJhbSB0aW1lXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBwdWJsaWMgcG9zdDxUPihcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgZGF0YT86IGFueSxcclxuICAgIHRpbWU6IG51bWJlciA9IDEwMDAwMFxyXG4gICk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICBsZXQgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlRva2VuXCIpO1xyXG4gICAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICBodHRwSGVhZGVycyA9IGh0dHBIZWFkZXJzLmFwcGVuZChcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgaGVhZGVyczogaHR0cEhlYWRlcnNcclxuICAgICAgfTtcclxuICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCB2ID0gdGhpcy5nZXRGdWxsWWVhcigpICtcclxuICAgICAgICAgICctJyArIHBhZCh0aGlzLmdldE1vbnRoKCkgKyAxKSArXHJcbiAgICAgICAgICAnLScgKyBwYWQodGhpcy5nZXREYXRlKCkpICtcclxuICAgICAgICAgICdUJyArIHBhZCh0aGlzLmdldEhvdXJzKCkpICtcclxuICAgICAgICAgICc6JyArIHBhZCh0aGlzLmdldE1pbnV0ZXMoKSkgK1xyXG4gICAgICAgICAgJzonICsgcGFkKHRoaXMuZ2V0U2Vjb25kcygpKSArXHJcbiAgICAgICAgICAnLicgKyAnMDAwJztcclxuICAgICAgICByZXR1cm4gdlxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBwYWQobnVtYmVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAobnVtYmVyIDwgMTApIHtcclxuICAgICAgICAgIHJldHVybiAnMCcgKyBudW1iZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1iZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0PFQ+KCh1cmwpLCBkYXRhLCBvcHRpb25zKVxyXG4gICAgICAgIC5waXBlKHRpbWVvdXQodGltZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzdWx0KTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgICAvL3doZW4gUmVzcG9uc2UgaXMgbm90IGFwcGxpY2F0aW9uL2pzb24gZXg6IHNvbWUgQVBJIHJldHVybiB0ZXh0L2NzdlxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZXJyLmVycm9yLnRleHQpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IHVuYXV0aG9yaXplZCA9IHRoaXMudW5hdXRob3JpemVkRXJyb3JIYW5kbGluZyhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICghdW5hdXRob3JpemVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHRoaXMuZXJyb3JNZXNzYWdlSGFuZGxpbmcoZXJyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlLk1lc3NhZ2UgIT0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgID8gZXJyTWVzc2FnZS5NZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgOiBcIkFuIHVua25vd24gZXJyb3IgaGFzIG9jY3VyZWQhXCIsXHJcbiAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UuaGVhZGVyLCB7IGVuYWJsZUh0bWw6IHRydWUgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIE1FVEhPRCBQT1NUXHJcbiAqIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHdlIGFyZSBleHBlY3RpbmcgYmxvYiB0byBiZSB3cml0dGVuIGZyb20gdGhlIHNlcnZlclxyXG4gKiBAcGFyYW0gdXJsXHJcbiAqIEBwYXJhbSBkYXRhXHJcbiAqIEBwYXJhbSB0aW1lXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG4gIHB1YmxpYyBwb3N0RmlsZShcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgZGF0YT86IGFueSxcclxuICAgIHRpbWU6IG51bWJlciA9IDEwMDAwMFxyXG4gICk6IE9ic2VydmFibGU8eyB0aXRsZTogc3RyaW5nIHwgbnVsbCwgZmlsZTogQmxvYiB8IG51bGwgfT4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICBsZXQgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlRva2VuXCIpO1xyXG4gICAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICBodHRwSGVhZGVycyA9IGh0dHBIZWFkZXJzLmFwcGVuZChcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0KCh1cmwpLCBkYXRhLCB7IGhlYWRlcnM6IGh0dHBIZWFkZXJzLCBvYnNlcnZlOiAncmVzcG9uc2UnLCByZXNwb25zZVR5cGU6ICdibG9iJyB9KVxyXG4gICAgICAgIC5waXBlKHRpbWVvdXQodGltZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgICAgIHRpdGxlOiByZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKSxcclxuICAgICAgICAgICAgICBmaWxlOiByZXN1bHQuYm9keVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnID09PSBlcnIuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVyID0gSlNPTi5wYXJzZShlLnNyY0VsZW1lbnRbJ3Jlc3VsdCddKT8uTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgbGV0IHVuYXV0aG9yaXplZCA9IHRoaXMudW5hdXRob3JpemVkRXJyb3JIYW5kbGluZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1bmF1dGhvcml6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSB0aGlzLmVycm9yTWVzc2FnZUhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyID8/IFwiQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCFcIixcclxuICAgICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlLmhlYWRlciwgeyBlbmFibGVIdG1sOiB0cnVlIH1cclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChlcnIuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNRVRIT0QgUFVUXHJcbiAgICogVGhpcyBzaG91bGQgY2FzdCB0aGUgaHR0cFJlc3BvbnNlIHRvIHRoZSBkYXRhIG1vZGVsIHdlIGV4cGVjdFxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqIEBwYXJhbSB0aW1lXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBwdWJsaWMgcHV0PFQ+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBkYXRhPzogYW55LFxyXG4gICAgdGltZTogbnVtYmVyID0gMTAwMDAwXHJcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIGxldCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVG9rZW5cIik7XHJcbiAgICAgIGxldCBodHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGh0dHBIZWFkZXJzID0gaHR0cEhlYWRlcnMuYXBwZW5kKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHRva2VuKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgICBoZWFkZXJzOiBodHRwSGVhZGVycyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wdXQ8VD4oKHVybCksIGRhdGEsIG9wdGlvbnMpXHJcbiAgICAgICAgLnBpcGUodGltZW91dCh0aW1lKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXN1bHQpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIC8vd2hlbiBSZXNwb25zZSBpcyBub3QgYXBwbGljYXRpb24vanNvbiBleDogc29tZSBBUEkgcmV0dXJuIHRleHQvY3N2XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlcnIuZXJyb3IudGV4dCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZXQgdW5hdXRob3JpemVkID0gdGhpcy51bmF1dGhvcml6ZWRFcnJvckhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKCF1bmF1dGhvcml6ZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gdGhpcy5lcnJvck1lc3NhZ2VIYW5kbGluZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UuTWVzc2FnZSAhPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJNZXNzYWdlLk1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICA6IFwiQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCFcIixcclxuICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZS5oZWFkZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1FVEhPRCBERUxFVEVcclxuICAgKiBUaGlzIHNob3VsZCBjYXN0IHRoZSBodHRwUmVzcG9uc2UgdG8gdGhlIGRhdGEgbW9kZWwgd2UgZXhwZWN0XHJcbiAgICogQHBhcmFtIHVybFxyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICogQHBhcmFtIHRpbWVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWxldGU8VD4oXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGRhdGE/OiBhbnksXHJcbiAgICB0aW1lOiBudW1iZXIgPSAxMDAwMDBcclxuICApOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgbGV0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJUb2tlblwiKTtcclxuICAgICAgbGV0IGh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgaHR0cEhlYWRlcnMgPSBodHRwSGVhZGVycy5hcHBlbmQoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgdG9rZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICAgIGhlYWRlcnM6IGh0dHBIZWFkZXJzLFxyXG4gICAgICAgIGJvZHk6IGRhdGFcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5kZWxldGU8VD4oKHVybCksIG9wdGlvbnMpXHJcbiAgICAgICAgLnBpcGUodGltZW91dCh0aW1lKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXN1bHQpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIC8vd2hlbiBSZXNwb25zZSBpcyBub3QgYXBwbGljYXRpb24vanNvbiBleDogc29tZSBBUEkgcmV0dXJuIHRleHQvY3N2XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlcnIuZXJyb3IudGV4dCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZXQgdW5hdXRob3JpemVkID0gdGhpcy51bmF1dGhvcml6ZWRFcnJvckhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKCF1bmF1dGhvcml6ZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gdGhpcy5lcnJvck1lc3NhZ2VIYW5kbGluZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UuTWVzc2FnZSAhPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJNZXNzYWdlLk1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICA6IFwiQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCFcIixcclxuICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZS5oZWFkZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5hdXRob3JpemVkRXJyb3JIYW5kbGluZyhlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICBsZXQgcmV0VmFsID0gZmFsc2U7XHJcbiAgICBpZiAoZXJyLnN0YXR1cyA9PSA0MDEgfHwgZXJyLnN0YXR1cyA9PSA0MDMpIHtcclxuICAgICAgLy9VbmF1dGhvcml6ZWQgRXJyb3IgSGFuZGxpbmdcclxuICAgICAgbGV0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJUb2tlblwiKTtcclxuICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21lbnUvVW5hdXRob3JpemVkL01haW4vVW5hdXRob3JpemVkXCJdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL3JlZGlyZWN0IHRvIExvZ2luIHBhZ2UgaWYgdGhlcmUgaXMgbm8gSldUIFRPS0VOIGF2YWlsYWJsZVxyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvXCI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0VmFsID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWYWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVycm9yTWVzc2FnZUhhbmRsaW5nKGVycjogYW55KTogeyBNZXNzYWdlOiBzdHJpbmc7IGhlYWRlcjogc3RyaW5nIH0ge1xyXG4gICAgO1xyXG4gICAgbGV0IGhlYWRlciA9IFwiQVBJIEVycm9yXCI7XHJcbiAgICBsZXQgbWVzc2FnZSA9IFwiRXhjZXB0aW9uIE1lc3NhZ2VcIjtcclxuICAgIGlmIChlcnIuZXJyb3IpIHtcclxuICAgICAgLy9IYW5kbGUgNFhYIGVycm9yIGFuZCA1WFggRXJyb3JcclxuICAgICAgaGVhZGVyID0gXCJBUEkgRXJyb3IgLSBcIiArIGVyci5zdGF0dXM7XHJcbiAgICAgIGlmIChlcnIuc3RhdHVzID09IDQ1MSkge1xyXG4gICAgICAgIGhlYWRlciA9IFwiRXJyb3JcIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVyci5lcnJvcikge1xyXG4gICAgICAgIG1lc3NhZ2UgPSBlcnIuZXJyb3IuTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGVyci5NZXNzYWdlKSB7XHJcbiAgICAgICAgLy9IYW5kbGUgdGltZW91dCBzY2VuYXJpbyB3ZSBkbyBub3QgcmVjZWl2ZSBIVFRQIFN0YXR1c0NvZGVcclxuICAgICAgICBoZWFkZXIgPSBcIkFQSSBFcnJvciAtIFwiICsgZXJyLm5hbWU7XHJcbiAgICAgICAgbWVzc2FnZSA9IGVyci5NZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBoZWFkZXI6IGhlYWRlciwgTWVzc2FnZTogbWVzc2FnZSB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBvc3RGb3JtRGF0YVdpdGhvdXRCZWFyZXIoXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGRhdGE6IEZvcm1EYXRhXHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgLnBvc3Q8YW55PigodXJsKSwgZGF0YSlcclxuICAgICAgICAucGlwZSh0aW1lb3V0KDEwMDAwMCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZXJyLmVycm9yLnRleHQpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwb3N0Rm9ybURhdGEoXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGRhdGE6IEZvcm1EYXRhLFxyXG4gICAgc2hvd1RvYXN0cjogYm9vbGVhbiA9IHRydWVcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICBsZXQgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlRva2VuXCIpO1xyXG4gICAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgIEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiICsgdG9rZW4sXHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgICBoZWFkZXJzOiBodHRwSGVhZGVycyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0PGFueT4oKHVybCksIGRhdGEsIG9wdGlvbnMpXHJcbiAgICAgICAgLnBpcGUodGltZW91dCgxMDAwMDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIC8vRXhjZXB0aW9uIEhhbmRsaW5nXHJcbiAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIC8vd2hlbiBSZXNwb25zZSBpcyBub3QgYXBwbGljYXRpb24vanNvbiBleDogc29tZSBBUEkgcmV0dXJuIHRleHQvY3N2XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlcnIuZXJyb3IudGV4dCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZXQgdW5hdXRob3JpemVkID0gdGhpcy51bmF1dGhvcml6ZWRFcnJvckhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKCF1bmF1dGhvcml6ZWQgJiYgc2hvd1RvYXN0cikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSB0aGlzLmVycm9yTWVzc2FnZUhhbmRsaW5nKGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcclxuICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZS5NZXNzYWdlICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICA/IGVyck1lc3NhZ2UuTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIDogXCJBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cmVkIVwiLFxyXG4gICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlLmhlYWRlclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59Il19
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable } from '@angular/core';
3
- import { Observable, of, from } from 'rxjs';
3
+ import { Observable, throwError } from 'rxjs';
4
4
  import * as i1 from '@angular/common/http';
5
5
  import { HttpHeaders } from '@angular/common/http';
6
6
  import { timeout, catchError } from 'rxjs/operators';
@@ -12,18 +12,13 @@ class HttpService {
12
12
  this.http = http;
13
13
  this.toastr = toastr;
14
14
  this.router = router;
15
- this.a = 0;
16
- alert('Dealpos');
17
- }
18
- testToastr() {
19
- this.toastr.success("1", "1");
20
15
  }
21
16
  PostToUrlEncode(url, params, time = 100000) {
22
17
  let headers = new HttpHeaders();
23
18
  headers = headers.set("Content-Type", "application/x-www-form-urlencoded");
24
19
  return new Observable((observer) => {
25
20
  this.http
26
- .post(url, params, { headers: headers })
21
+ .post((url), params, { headers: headers })
27
22
  .pipe(timeout(time))
28
23
  .subscribe((data) => {
29
24
  observer.next(data);
@@ -39,7 +34,7 @@ class HttpService {
39
34
  const options = { responseType: "text", headers: httpHeaders };
40
35
  return new Observable((observer) => {
41
36
  this.http
42
- .get("/API/Token/GetZendeskJWT", options)
37
+ .get(("/API/Token/GetZendeskJWT"), options)
43
38
  .pipe(timeout(time))
44
39
  .subscribe((data) => {
45
40
  observer.next(data);
@@ -57,7 +52,7 @@ class HttpService {
57
52
  const options = { responseType: "text", headers: httpHeaders };
58
53
  return new Observable((observer) => {
59
54
  this.http
60
- .post(url, data, options)
55
+ .post((url), data, options)
61
56
  .pipe(timeout(time))
62
57
  .subscribe((res) => {
63
58
  observer.next(res);
@@ -82,21 +77,30 @@ class HttpService {
82
77
  let options = {
83
78
  headers: httpHeaders,
84
79
  };
85
- return this.http.get(url, options)
80
+ return this.http.get((url), options)
86
81
  .pipe(catchError(err => {
87
- // show toastr error
88
- let errMessage = this.errorMessageHandling(err);
89
- this.toastr.error(errMessage.Message != "" ? errMessage.Message : "An unknown error has occured!", errMessage.header);
90
- let error$ = of('error', err);
91
- if (err.status == 402) {
92
- error$ = from(this.router.navigate(['/menu/Profile/Main/My_Subscription']));
82
+ let unauthorized = this.unauthorizedErrorHandling(err);
83
+ if (!unauthorized) {
84
+ // show toastr error
85
+ let errMessage = this.errorMessageHandling(err);
86
+ this.toastr.error(errMessage.Message != "" ? errMessage.Message : "An unknown error has occured!", errMessage.header);
87
+ this.paymentErrorHandling(err);
93
88
  }
94
- return error$;
89
+ return throwError(() => err);
95
90
  }));
96
91
  }
97
92
  getNews(url) {
98
93
  return this.http.get(url);
99
94
  }
95
+ /**
96
+ * Handles payment errors by navigating to the subscription page if the error status is 402.
97
+ * @param err - The HttpErrorResponse object containing the error information.
98
+ */
99
+ paymentErrorHandling(err) {
100
+ if (err.status == 402) {
101
+ this.router.navigate(['/menu/Profile/Main/My_Subscription']);
102
+ }
103
+ }
100
104
  /**
101
105
  * METHOD POST
102
106
  * This should cast the httpResponse to the data model we expect
@@ -116,10 +120,26 @@ class HttpService {
116
120
  httpHeaders = httpHeaders.append("Authorization", "Bearer " + token);
117
121
  }
118
122
  let options = {
119
- headers: httpHeaders,
123
+ headers: httpHeaders
124
+ };
125
+ Date.prototype.toJSON = function () {
126
+ let v = this.getFullYear() +
127
+ '-' + pad(this.getMonth() + 1) +
128
+ '-' + pad(this.getDate()) +
129
+ 'T' + pad(this.getHours()) +
130
+ ':' + pad(this.getMinutes()) +
131
+ ':' + pad(this.getSeconds()) +
132
+ '.' + '000';
133
+ return v;
120
134
  };
135
+ function pad(number) {
136
+ if (number < 10) {
137
+ return '0' + number;
138
+ }
139
+ return number;
140
+ }
121
141
  this.http
122
- .post(url, data, options)
142
+ .post((url), data, options)
123
143
  .pipe(timeout(time))
124
144
  .subscribe({
125
145
  next: (result) => {
@@ -146,6 +166,53 @@ class HttpService {
146
166
  });
147
167
  });
148
168
  }
169
+ /**
170
+ * METHOD POST
171
+ * Use this method when we are expecting blob to be written from the server
172
+ * @param url
173
+ * @param data
174
+ * @param time
175
+ * @returns
176
+ */
177
+ postFile(url, data, time = 100000) {
178
+ return new Observable((observer) => {
179
+ let token = localStorage.getItem("Token");
180
+ let httpHeaders = new HttpHeaders({
181
+ "Content-Type": "application/json",
182
+ "Cache-Control": "no-cache",
183
+ });
184
+ if (token) {
185
+ httpHeaders = httpHeaders.append("Authorization", "Bearer " + token);
186
+ }
187
+ this.http
188
+ .post((url), data, { headers: httpHeaders, observe: 'response', responseType: 'blob' })
189
+ .pipe(timeout(time))
190
+ .subscribe({
191
+ next: (result) => {
192
+ observer.next({
193
+ title: result.headers.get('Content-Disposition'),
194
+ file: result.body
195
+ });
196
+ observer.complete();
197
+ },
198
+ error: (err) => {
199
+ if ('application/json; charset=utf-8' === err.headers.get('Content-Type')) {
200
+ const reader = new FileReader();
201
+ reader.addEventListener('loadend', (e) => {
202
+ const er = JSON.parse(e.srcElement['result'])?.Message;
203
+ let unauthorized = this.unauthorizedErrorHandling(err);
204
+ if (!unauthorized) {
205
+ let errMessage = this.errorMessageHandling(err);
206
+ this.toastr.error(er ?? "An unknown error has occured!", errMessage.header, { enableHtml: true });
207
+ }
208
+ });
209
+ reader.readAsText(err.error);
210
+ }
211
+ observer.error(err);
212
+ },
213
+ });
214
+ });
215
+ }
149
216
  /**
150
217
  * METHOD PUT
151
218
  * This should cast the httpResponse to the data model we expect
@@ -168,7 +235,7 @@ class HttpService {
168
235
  headers: httpHeaders,
169
236
  };
170
237
  this.http
171
- .put(url, data, options)
238
+ .put((url), data, options)
172
239
  .pipe(timeout(time))
173
240
  .subscribe({
174
241
  next: (result) => {
@@ -218,7 +285,7 @@ class HttpService {
218
285
  body: data
219
286
  };
220
287
  this.http
221
- .delete(url, options)
288
+ .delete((url), options)
222
289
  .pipe(timeout(time))
223
290
  .subscribe({
224
291
  next: (result) => {
@@ -262,6 +329,7 @@ class HttpService {
262
329
  return retVal;
263
330
  }
264
331
  errorMessageHandling(err) {
332
+ ;
265
333
  let header = "API Error";
266
334
  let message = "Exception Message";
267
335
  if (err.error) {
@@ -286,7 +354,7 @@ class HttpService {
286
354
  postFormDataWithoutBearer(url, data) {
287
355
  return new Observable((observer) => {
288
356
  this.http
289
- .post(url, data)
357
+ .post((url), data)
290
358
  .pipe(timeout(100000))
291
359
  .subscribe({
292
360
  next: (data) => {
@@ -313,38 +381,41 @@ class HttpService {
313
381
  headers: httpHeaders,
314
382
  };
315
383
  this.http
316
- .post(url, data, options)
384
+ .post((url), data, options)
317
385
  .pipe(timeout(100000))
318
- .subscribe((data) => {
319
- observer.next(data);
320
- observer.complete();
321
- }, (err) => {
322
- //Exception Handling
323
- if (err.status == 200) {
324
- //when Response is not application/json ex: some API return text/csv
325
- observer.next(err.error.text);
386
+ .subscribe({
387
+ next: (value) => {
388
+ observer.next(value);
326
389
  observer.complete();
327
- }
328
- else {
329
- let unauthorized = this.unauthorizedErrorHandling(err);
330
- if (!unauthorized && showToastr) {
331
- let errMessage = this.errorMessageHandling(err);
332
- this.toastr.error(errMessage.Message != ""
333
- ? errMessage.Message
334
- : "An unknown error has occured!", errMessage.header);
390
+ },
391
+ error: (err) => {
392
+ //Exception Handling
393
+ if (err.status == 200) {
394
+ //when Response is not application/json ex: some API return text/csv
395
+ observer.next(err.error.text);
396
+ observer.complete();
397
+ }
398
+ else {
399
+ let unauthorized = this.unauthorizedErrorHandling(err);
400
+ if (!unauthorized && showToastr) {
401
+ let errMessage = this.errorMessageHandling(err);
402
+ this.toastr.error(errMessage.Message != ""
403
+ ? errMessage.Message
404
+ : "An unknown error has occured!", errMessage.header);
405
+ }
406
+ observer.error(err);
335
407
  }
336
- observer.error(err);
337
408
  }
338
409
  });
339
410
  });
340
411
  }
341
412
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i2.ToastrService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
342
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HttpService, providedIn: 'root' }); }
413
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HttpService, providedIn: "root" }); }
343
414
  }
344
415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HttpService, decorators: [{
345
416
  type: Injectable,
346
417
  args: [{
347
- providedIn: 'root'
418
+ providedIn: "root",
348
419
  }]
349
420
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ToastrService }, { type: i3.Router }] });
350
421
 
@@ -1 +1 @@
1
- {"version":3,"file":"dealpos-npm-ng-dealpos-library-services-http.mjs","sources":["../../../projects/dealpos-npm/ng-dealpos-library/services/http/src/http.service.ts","../../../projects/dealpos-npm/ng-dealpos-library/services/http/dealpos-npm-ng-dealpos-library-services-http.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { Observable, from, of } from \"rxjs\";\r\nimport {\r\n HttpClient,\r\n HttpErrorResponse,\r\n HttpHeaders,\r\n} from \"@angular/common/http\";\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport { catchError, timeout } from \"rxjs/operators\";\r\nimport { Router } from \"@angular/router\";\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n a = 0\r\n constructor(\r\n private http: HttpClient,\r\n private toastr: ToastrService,\r\n private router: Router\r\n ) {\r\n alert('Dealpos')\r\n }\r\n public testToastr() {\r\n this.toastr.success(\"1\", \"1\")\r\n }\r\n public PostToUrlEncode(\r\n url: string,\r\n params?: string,\r\n time: number = 100000\r\n ): Observable<any> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n return new Observable((observer) => {\r\n this.http\r\n .post(url, params, { headers: headers })\r\n .pipe(timeout(time))\r\n .subscribe((data) => {\r\n observer.next(data);\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n public GetText(time: number = 100000): Observable<string> {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n Authorization: \"Bearer \" + token,\r\n });\r\n const options = { responseType: \"text\" as \"text\", headers: httpHeaders };\r\n return new Observable((observer) => {\r\n this.http\r\n .get(\"/API/Token/GetZendeskJWT\", options)\r\n .pipe(timeout(time))\r\n .subscribe((data) => {\r\n observer.next(data);\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n public POSText(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<string> {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n Authorization: \"Bearer \" + token,\r\n });\r\n\r\n const options = { responseType: \"text\" as \"text\", headers: httpHeaders };\r\n return new Observable((observer) => {\r\n this.http\r\n .post(url, data, options)\r\n .pipe(timeout(time))\r\n .subscribe((res) => {\r\n observer.next(res);\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * @param url \r\n * @returns \r\n */\r\n public get<T>(url: string): Observable<T> {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n let options = {\r\n headers: httpHeaders,\r\n };\r\n\r\n return this.http.get<T>(url, options)\r\n .pipe(\r\n catchError(err => {\r\n // show toastr error\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\" ? errMessage.Message : \"An unknown error has occured!\",\r\n errMessage.header);\r\n let error$ = of('error', err)\r\n if (err.status == 402) {\r\n error$ = from(this.router.navigate(['/menu/Profile/Main/My_Subscription']))\r\n }\r\n return error$\r\n })\r\n );\r\n }\r\n public getNews<T>(url: string): Observable<T> {\r\n return this.http.get<T>(url)\r\n }\r\n /**\r\n * METHOD POST\r\n * This should cast the httpResponse to the data model we expect\r\n * @param url\r\n * @param data\r\n * @param time\r\n * @returns\r\n */\r\n public post<T>(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<T> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n let options = {\r\n headers: httpHeaders,\r\n };\r\n\r\n this.http\r\n .post<T>(url, data, options)\r\n .pipe(timeout(time))\r\n .subscribe({\r\n next: (result) => {\r\n observer.next(result);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if (err.status == 200) {\r\n //when Response is not application/json ex: some API return text/csv\r\n observer.next(err.error.text);\r\n observer.complete();\r\n } else {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\"\r\n ? errMessage.Message\r\n : \"An unknown error has occured!\",\r\n errMessage.header, { enableHtml: true }\r\n );\r\n }\r\n observer.error(err);\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * METHOD PUT\r\n * This should cast the httpResponse to the data model we expect\r\n * @param url\r\n * @param data\r\n * @param time\r\n * @returns\r\n */\r\n public put<T>(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<T> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n let options = {\r\n headers: httpHeaders,\r\n };\r\n\r\n this.http\r\n .put<T>(url, data, options)\r\n .pipe(timeout(time))\r\n .subscribe({\r\n next: (result) => {\r\n observer.next(result);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if (err.status == 200) {\r\n //when Response is not application/json ex: some API return text/csv\r\n observer.next(err.error.text);\r\n observer.complete();\r\n } else {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\"\r\n ? errMessage.Message\r\n : \"An unknown error has occured!\",\r\n errMessage.header\r\n );\r\n }\r\n observer.error(err);\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * METHOD DELETE\r\n * This should cast the httpResponse to the data model we expect\r\n * @param url\r\n * @param data\r\n * @param time\r\n * @returns\r\n */\r\n public delete<T>(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<T> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n let options = {\r\n headers: httpHeaders,\r\n body: data\r\n };\r\n\r\n this.http\r\n .delete<T>(url, options)\r\n .pipe(timeout(time))\r\n .subscribe({\r\n next: (result) => {\r\n observer.next(result);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if (err.status == 200) {\r\n //when Response is not application/json ex: some API return text/csv\r\n observer.next(err.error.text);\r\n observer.complete();\r\n } else {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\"\r\n ? errMessage.Message\r\n : \"An unknown error has occured!\",\r\n errMessage.header\r\n );\r\n }\r\n observer.error(err);\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n private unauthorizedErrorHandling(err: HttpErrorResponse) {\r\n let retVal = false;\r\n if (err.status == 401 || err.status == 403) {\r\n //Unauthorized Error Handling\r\n let token = localStorage.getItem(\"Token\");\r\n if (token) {\r\n this.router.navigate([\"/menu/Unauthorized/Main/Unauthorized\"]);\r\n } else {\r\n //redirect to Login page if there is no JWT TOKEN available\r\n window.location.href = \"/\";\r\n }\r\n retVal = true;\r\n }\r\n return retVal;\r\n }\r\n\r\n private errorMessageHandling(err: any): { Message: string; header: string } {\r\n let header = \"API Error\";\r\n let message = \"Exception Message\";\r\n if (err.error) {\r\n //Handle 4XX error and 5XX Error\r\n header = \"API Error - \" + err.status;\r\n if (err.status == 451) {\r\n header = \"Error\";\r\n }\r\n\r\n if (err.error) {\r\n message = err.error.Message;\r\n }\r\n } else {\r\n if (err.Message) {\r\n //Handle timeout scenario we do not receive HTTP StatusCode\r\n header = \"API Error - \" + err.name;\r\n message = err.Message;\r\n }\r\n }\r\n return { header: header, Message: message };\r\n }\r\n\r\n public postFormDataWithoutBearer(\r\n url: string,\r\n data: FormData\r\n ): Observable<any> {\r\n return new Observable((observer) => {\r\n this.http\r\n .post<any>(url, data)\r\n .pipe(timeout(100000))\r\n .subscribe({\r\n next: (data) => {\r\n observer.next(data);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if (err.status == 200) {\r\n observer.next(err.error.text);\r\n observer.complete();\r\n }\r\n observer.error(err);\r\n },\r\n });\r\n });\r\n }\r\n\r\n public postFormData(\r\n url: string,\r\n data: FormData,\r\n showToastr: boolean = true\r\n ): Observable<any> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n Authorization: \"Bearer \" + token,\r\n });\r\n let options = {\r\n headers: httpHeaders,\r\n };\r\n\r\n this.http\r\n .post<any>(url, data, options)\r\n .pipe(timeout(100000))\r\n .subscribe(\r\n (data) => {\r\n observer.next(data);\r\n observer.complete();\r\n },\r\n (err) => {\r\n //Exception Handling\r\n\r\n if (err.status == 200) {\r\n //when Response is not application/json ex: some API return text/csv\r\n observer.next(err.error.text);\r\n observer.complete();\r\n } else {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized && showToastr) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\"\r\n ? errMessage.Message\r\n : \"An unknown error has occured!\",\r\n errMessage.header\r\n );\r\n }\r\n\r\n observer.error(err);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dealpos-npm-ng-dealpos-library-services-http.mjs","sources":["../../../projects/dealpos-npm/ng-dealpos-library/services/http/src/http.service.ts","../../../projects/dealpos-npm/ng-dealpos-library/services/http/dealpos-npm-ng-dealpos-library-services-http.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { Observable, throwError } from \"rxjs\";\r\nimport {\r\n HttpClient,\r\n HttpErrorResponse,\r\n HttpHeaders,\r\n} from \"@angular/common/http\";\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport { catchError, timeout } from \"rxjs/operators\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class HttpService {\r\n constructor(\r\n private http: HttpClient,\r\n private toastr: ToastrService,\r\n private router: Router\r\n ) {\r\n }\r\n\r\n public PostToUrlEncode(\r\n url: string,\r\n params?: string,\r\n time: number = 100000\r\n ): Observable<any> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n return new Observable((observer) => {\r\n this.http\r\n .post((url), params, { headers: headers })\r\n .pipe(timeout(time))\r\n .subscribe((data) => {\r\n observer.next(data);\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n public GetText(time: number = 100000): Observable<string> {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n Authorization: \"Bearer \" + token,\r\n });\r\n const options = { responseType: \"text\" as \"text\", headers: httpHeaders };\r\n return new Observable((observer) => {\r\n this.http\r\n .get((\"/API/Token/GetZendeskJWT\"), options)\r\n .pipe(timeout(time))\r\n .subscribe((data) => {\r\n observer.next(data);\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n public POSText(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<string> {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n Authorization: \"Bearer \" + token,\r\n });\r\n\r\n const options = { responseType: \"text\" as \"text\", headers: httpHeaders };\r\n return new Observable((observer) => {\r\n this.http\r\n .post((url), data, options)\r\n .pipe(timeout(time))\r\n .subscribe((res) => {\r\n observer.next(res);\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * @param url \r\n * @returns \r\n */\r\n public get<T>(url: string): Observable<T> {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n let options = {\r\n headers: httpHeaders,\r\n };\r\n\r\n return this.http.get<T>((url), options)\r\n .pipe(\r\n catchError(err => {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized) {\r\n // show toastr error\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\" ? errMessage.Message : \"An unknown error has occured!\",\r\n errMessage.header);\r\n this.paymentErrorHandling(err);\r\n }\r\n return throwError(() => err);\r\n })\r\n );\r\n }\r\n\r\n public getNews<T>(url: string): Observable<T> {\r\n return this.http.get<T>(url)\r\n }\r\n\r\n /**\r\n * Handles payment errors by navigating to the subscription page if the error status is 402.\r\n * @param err - The HttpErrorResponse object containing the error information.\r\n */\r\n private paymentErrorHandling(err: HttpErrorResponse) {\r\n if (err.status == 402) {\r\n this.router.navigate(['/menu/Profile/Main/My_Subscription']);\r\n }\r\n }\r\n\r\n /**\r\n * METHOD POST\r\n * This should cast the httpResponse to the data model we expect\r\n * @param url\r\n * @param data\r\n * @param time\r\n * @returns\r\n */\r\n public post<T>(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<T> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n let options = {\r\n headers: httpHeaders\r\n };\r\n Date.prototype.toJSON = function () {\r\n let v = this.getFullYear() +\r\n '-' + pad(this.getMonth() + 1) +\r\n '-' + pad(this.getDate()) +\r\n 'T' + pad(this.getHours()) +\r\n ':' + pad(this.getMinutes()) +\r\n ':' + pad(this.getSeconds()) +\r\n '.' + '000';\r\n return v\r\n }\r\n\r\n function pad(number: number) {\r\n if (number < 10) {\r\n return '0' + number;\r\n }\r\n return number;\r\n }\r\n\r\n this.http\r\n .post<T>((url), data, options)\r\n .pipe(timeout(time))\r\n .subscribe({\r\n next: (result) => {\r\n observer.next(result);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if (err.status == 200) {\r\n //when Response is not application/json ex: some API return text/csv\r\n observer.next(err.error.text);\r\n observer.complete();\r\n } else {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\"\r\n ? errMessage.Message\r\n : \"An unknown error has occured!\",\r\n errMessage.header, { enableHtml: true }\r\n );\r\n }\r\n observer.error(err);\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * METHOD POST\r\n * Use this method when we are expecting blob to be written from the server\r\n * @param url\r\n * @param data\r\n * @param time\r\n * @returns\r\n */\r\n public postFile(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<{ title: string | null, file: Blob | null }> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n\r\n this.http\r\n .post((url), data, { headers: httpHeaders, observe: 'response', responseType: 'blob' })\r\n .pipe(timeout(time))\r\n .subscribe({\r\n next: (result) => {\r\n observer.next({\r\n title: result.headers.get('Content-Disposition'),\r\n file: result.body\r\n });\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if ('application/json; charset=utf-8' === err.headers.get('Content-Type')) {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', (e: any) => {\r\n const er = JSON.parse(e.srcElement['result'])?.Message\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(er ?? \"An unknown error has occured!\",\r\n errMessage.header, { enableHtml: true }\r\n );\r\n }\r\n });\r\n reader.readAsText(err.error);\r\n }\r\n observer.error(err);\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * METHOD PUT\r\n * This should cast the httpResponse to the data model we expect\r\n * @param url\r\n * @param data\r\n * @param time\r\n * @returns\r\n */\r\n public put<T>(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<T> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n let options = {\r\n headers: httpHeaders,\r\n };\r\n\r\n this.http\r\n .put<T>((url), data, options)\r\n .pipe(timeout(time))\r\n .subscribe({\r\n next: (result) => {\r\n observer.next(result);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if (err.status == 200) {\r\n //when Response is not application/json ex: some API return text/csv\r\n observer.next(err.error.text);\r\n observer.complete();\r\n } else {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\"\r\n ? errMessage.Message\r\n : \"An unknown error has occured!\",\r\n errMessage.header\r\n );\r\n }\r\n observer.error(err);\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * METHOD DELETE\r\n * This should cast the httpResponse to the data model we expect\r\n * @param url\r\n * @param data\r\n * @param time\r\n * @returns\r\n */\r\n public delete<T>(\r\n url: string,\r\n data?: any,\r\n time: number = 100000\r\n ): Observable<T> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n });\r\n if (token) {\r\n httpHeaders = httpHeaders.append(\"Authorization\", \"Bearer \" + token);\r\n }\r\n let options = {\r\n headers: httpHeaders,\r\n body: data\r\n };\r\n\r\n this.http\r\n .delete<T>((url), options)\r\n .pipe(timeout(time))\r\n .subscribe({\r\n next: (result) => {\r\n observer.next(result);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if (err.status == 200) {\r\n //when Response is not application/json ex: some API return text/csv\r\n observer.next(err.error.text);\r\n observer.complete();\r\n } else {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\"\r\n ? errMessage.Message\r\n : \"An unknown error has occured!\",\r\n errMessage.header\r\n );\r\n }\r\n observer.error(err);\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n private unauthorizedErrorHandling(err: HttpErrorResponse) {\r\n let retVal = false;\r\n if (err.status == 401 || err.status == 403) {\r\n //Unauthorized Error Handling\r\n let token = localStorage.getItem(\"Token\");\r\n if (token) {\r\n this.router.navigate([\"/menu/Unauthorized/Main/Unauthorized\"]);\r\n } else {\r\n //redirect to Login page if there is no JWT TOKEN available\r\n window.location.href = \"/\";\r\n }\r\n retVal = true;\r\n }\r\n return retVal;\r\n }\r\n\r\n private errorMessageHandling(err: any): { Message: string; header: string } {\r\n ;\r\n let header = \"API Error\";\r\n let message = \"Exception Message\";\r\n if (err.error) {\r\n //Handle 4XX error and 5XX Error\r\n header = \"API Error - \" + err.status;\r\n if (err.status == 451) {\r\n header = \"Error\";\r\n }\r\n\r\n if (err.error) {\r\n message = err.error.Message;\r\n }\r\n } else {\r\n if (err.Message) {\r\n //Handle timeout scenario we do not receive HTTP StatusCode\r\n header = \"API Error - \" + err.name;\r\n message = err.Message;\r\n }\r\n }\r\n return { header: header, Message: message };\r\n }\r\n\r\n public postFormDataWithoutBearer(\r\n url: string,\r\n data: FormData\r\n ): Observable<any> {\r\n return new Observable((observer) => {\r\n this.http\r\n .post<any>((url), data)\r\n .pipe(timeout(100000))\r\n .subscribe({\r\n next: (data) => {\r\n observer.next(data);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n if (err.status == 200) {\r\n observer.next(err.error.text);\r\n observer.complete();\r\n }\r\n observer.error(err);\r\n },\r\n });\r\n });\r\n }\r\n\r\n public postFormData(\r\n url: string,\r\n data: FormData,\r\n showToastr: boolean = true\r\n ): Observable<any> {\r\n return new Observable((observer) => {\r\n let token = localStorage.getItem(\"Token\");\r\n let httpHeaders = new HttpHeaders({\r\n Authorization: \"Bearer \" + token,\r\n });\r\n let options = {\r\n headers: httpHeaders,\r\n };\r\n\r\n this.http\r\n .post<any>((url), data, options)\r\n .pipe(timeout(100000))\r\n .subscribe({\r\n next: (value) => {\r\n observer.next(value);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n //Exception Handling\r\n if (err.status == 200) {\r\n //when Response is not application/json ex: some API return text/csv\r\n observer.next(err.error.text);\r\n observer.complete();\r\n } else {\r\n let unauthorized = this.unauthorizedErrorHandling(err);\r\n if (!unauthorized && showToastr) {\r\n let errMessage = this.errorMessageHandling(err);\r\n this.toastr.error(\r\n errMessage.Message != \"\"\r\n ? errMessage.Message\r\n : \"An unknown error has occured!\",\r\n errMessage.header\r\n );\r\n }\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n );\r\n });\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dealpos-npm/ng-dealpos-library",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.4",
6
6
  "@angular/core": "^17.3.4",
@@ -50,18 +50,18 @@
50
50
  "esm": "./esm2022/components/dialog/dealpos-npm-ng-dealpos-library-components-dialog.mjs",
51
51
  "default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-dialog.mjs"
52
52
  },
53
- "./components/modal-changelog": {
54
- "types": "./components/modal-changelog/index.d.ts",
55
- "esm2022": "./esm2022/components/modal-changelog/dealpos-npm-ng-dealpos-library-components-modal-changelog.mjs",
56
- "esm": "./esm2022/components/modal-changelog/dealpos-npm-ng-dealpos-library-components-modal-changelog.mjs",
57
- "default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-modal-changelog.mjs"
58
- },
59
53
  "./components/info-page-input": {
60
54
  "types": "./components/info-page-input/index.d.ts",
61
55
  "esm2022": "./esm2022/components/info-page-input/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs",
62
56
  "esm": "./esm2022/components/info-page-input/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs",
63
57
  "default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs"
64
58
  },
59
+ "./components/modal-changelog": {
60
+ "types": "./components/modal-changelog/index.d.ts",
61
+ "esm2022": "./esm2022/components/modal-changelog/dealpos-npm-ng-dealpos-library-components-modal-changelog.mjs",
62
+ "esm": "./esm2022/components/modal-changelog/dealpos-npm-ng-dealpos-library-components-modal-changelog.mjs",
63
+ "default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-modal-changelog.mjs"
64
+ },
65
65
  "./components/ng-select-infinite": {
66
66
  "types": "./components/ng-select-infinite/index.d.ts",
67
67
  "esm2022": "./esm2022/components/ng-select-infinite/dealpos-npm-ng-dealpos-library-components-ng-select-infinite.mjs",
@@ -7,9 +7,7 @@ export declare class HttpService {
7
7
  private http;
8
8
  private toastr;
9
9
  private router;
10
- a: number;
11
10
  constructor(http: HttpClient, toastr: ToastrService, router: Router);
12
- testToastr(): void;
13
11
  PostToUrlEncode(url: string, params?: string, time?: number): Observable<any>;
14
12
  GetText(time?: number): Observable<string>;
15
13
  POSText(url: string, data?: any, time?: number): Observable<string>;
@@ -20,6 +18,11 @@ export declare class HttpService {
20
18
  */
21
19
  get<T>(url: string): Observable<T>;
22
20
  getNews<T>(url: string): Observable<T>;
21
+ /**
22
+ * Handles payment errors by navigating to the subscription page if the error status is 402.
23
+ * @param err - The HttpErrorResponse object containing the error information.
24
+ */
25
+ private paymentErrorHandling;
23
26
  /**
24
27
  * METHOD POST
25
28
  * This should cast the httpResponse to the data model we expect
@@ -29,6 +32,18 @@ export declare class HttpService {
29
32
  * @returns
30
33
  */
31
34
  post<T>(url: string, data?: any, time?: number): Observable<T>;
35
+ /**
36
+ * METHOD POST
37
+ * Use this method when we are expecting blob to be written from the server
38
+ * @param url
39
+ * @param data
40
+ * @param time
41
+ * @returns
42
+ */
43
+ postFile(url: string, data?: any, time?: number): Observable<{
44
+ title: string | null;
45
+ file: Blob | null;
46
+ }>;
32
47
  /**
33
48
  * METHOD PUT
34
49
  * This should cast the httpResponse to the data model we expect