@sunbird-cb/utils 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sunbird-cb-utils.umd.js +5078 -4904
- package/bundles/sunbird-cb-utils.umd.js.map +1 -1
- package/bundles/sunbird-cb-utils.umd.min.js +1 -1
- package/bundles/sunbird-cb-utils.umd.min.js.map +1 -1
- package/esm2015/lib/components/image-crop/image-crop.component.js +194 -194
- package/esm2015/lib/components/image-crop/image-crop.module.js +26 -26
- package/esm2015/lib/constants/features.enum.js +554 -554
- package/esm2015/lib/constants/instances.enum.js +4 -4
- package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +86 -86
- package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +14 -14
- package/esm2015/lib/directives/default-thumbnail/default-thumbnail.directive.js +37 -37
- package/esm2015/lib/directives/default-thumbnail/default-thumbnail.module.js +14 -14
- package/esm2015/lib/directives/image-responsive/image-responsive.directive.js +91 -91
- package/esm2015/lib/directives/image-responsive/image-responsive.module.js +14 -14
- package/esm2015/lib/directives/in-view-port/in-view-port.directive.js +67 -67
- package/esm2015/lib/directives/in-view-port/in-view-port.module.js +14 -14
- package/esm2015/lib/directives/navigation/navigation.directive.js +38 -38
- package/esm2015/lib/directives/navigation/navigation.module.js +14 -14
- package/esm2015/lib/directives/permission/permission.directive.js +10 -10
- package/esm2015/lib/directives/permission/permission.module.js +14 -14
- package/esm2015/lib/helpers/functions/getStringifiedQueryParams.js +8 -8
- package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +98 -98
- package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +18 -18
- package/esm2015/lib/helpers/logout/logout.component.js +55 -55
- package/esm2015/lib/helpers/logout/logout.module.js +17 -17
- package/esm2015/lib/models/contentRating.model.js +12 -12
- package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +12 -12
- package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +58 -58
- package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +14 -14
- package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +32 -32
- package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +14 -14
- package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +42 -42
- package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +14 -14
- package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +59 -59
- package/esm2015/lib/pipes/pipe-filter/pipe-filter.module.js +14 -14
- package/esm2015/lib/pipes/pipe-filter/pipe-filter.pipe.js +15 -15
- package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +14 -14
- package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +29 -29
- package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +14 -14
- package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +11 -11
- package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +14 -14
- package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +24 -24
- package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +14 -14
- package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +16 -16
- package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +14 -14
- package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +30 -30
- package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.module.js +14 -14
- package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +15 -15
- package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +14 -14
- package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +17 -17
- package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +14 -14
- package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +15 -15
- package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +14 -14
- package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +34 -34
- package/esm2015/lib/resolvers/explore-detail.resolver.js +88 -88
- package/esm2015/lib/resolvers/marketing-offering.resolve.js +39 -39
- package/esm2015/lib/resolvers/page.constant.js +3 -3
- package/esm2015/lib/resolvers/page.model.js +46 -46
- package/esm2015/lib/resolvers/page.resolver.js +89 -89
- package/esm2015/lib/resolvers/resolver.model.js +5 -5
- package/esm2015/lib/services/auth-keycloak.service.js +225 -225
- package/esm2015/lib/services/auth-microsoft.service.js +195 -195
- package/esm2015/lib/services/card-content.model.js +30 -30
- package/esm2015/lib/services/configurations.model.js +508 -490
- package/esm2015/lib/services/configurations.service.js +103 -103
- package/esm2015/lib/services/content-strip-multiple.model.js +74 -74
- package/esm2015/lib/services/event.model.js +163 -154
- package/esm2015/lib/services/event.service.js +53 -39
- package/esm2015/lib/services/logger.service.js +54 -54
- package/esm2015/lib/services/ms-office.model.js +7 -7
- package/esm2015/lib/services/subapplication-respond.service.js +224 -224
- package/esm2015/lib/services/telemetry.service.js +400 -278
- package/esm2015/lib/services/user-preference.model.js +28 -28
- package/esm2015/lib/services/user-preference.service.js +89 -89
- package/esm2015/lib/services/utility.service.js +99 -99
- package/esm2015/lib/services/value.service.js +30 -30
- package/esm2015/lib/services/widget-content.model.js +341 -341
- package/esm2015/lib/services/widget-content.service.js +191 -191
- package/esm2015/lib/services/widget-resolver.model.js +56 -56
- package/esm2015/lib/services/widget-search.model.js +125 -125
- package/esm2015/public-api.js +66 -66
- package/esm2015/sunbird-cb-utils.js +8 -8
- package/esm5/lib/components/image-crop/image-crop.component.js +199 -199
- package/esm5/lib/components/image-crop/image-crop.module.js +30 -30
- package/esm5/lib/constants/features.enum.js +554 -554
- package/esm5/lib/constants/instances.enum.js +4 -4
- package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +104 -104
- package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +18 -18
- package/esm5/lib/directives/default-thumbnail/default-thumbnail.directive.js +39 -39
- package/esm5/lib/directives/default-thumbnail/default-thumbnail.module.js +18 -18
- package/esm5/lib/directives/image-responsive/image-responsive.directive.js +94 -94
- package/esm5/lib/directives/image-responsive/image-responsive.module.js +18 -18
- package/esm5/lib/directives/in-view-port/in-view-port.directive.js +72 -72
- package/esm5/lib/directives/in-view-port/in-view-port.module.js +18 -18
- package/esm5/lib/directives/navigation/navigation.directive.js +40 -40
- package/esm5/lib/directives/navigation/navigation.module.js +18 -18
- package/esm5/lib/directives/permission/permission.directive.js +13 -13
- package/esm5/lib/directives/permission/permission.module.js +18 -18
- package/esm5/lib/helpers/functions/getStringifiedQueryParams.js +8 -8
- package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +102 -102
- package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +22 -22
- package/esm5/lib/helpers/logout/logout.component.js +61 -61
- package/esm5/lib/helpers/logout/logout.module.js +21 -21
- package/esm5/lib/models/contentRating.model.js +12 -12
- package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +16 -16
- package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +62 -62
- package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +18 -18
- package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +36 -36
- package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +18 -18
- package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +44 -44
- package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +18 -18
- package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +63 -63
- package/esm5/lib/pipes/pipe-filter/pipe-filter.module.js +18 -18
- package/esm5/lib/pipes/pipe-filter/pipe-filter.pipe.js +19 -19
- package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +18 -18
- package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +37 -37
- package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +18 -18
- package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +15 -15
- package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +18 -18
- package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +29 -29
- package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +18 -18
- package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +20 -20
- package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +18 -18
- package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +34 -34
- package/esm5/lib/pipes/pipe-order-by/pipe-order-by.module.js +18 -18
- package/esm5/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +17 -17
- package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +18 -18
- package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +33 -33
- package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +18 -18
- package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +19 -19
- package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +18 -18
- package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +37 -37
- package/esm5/lib/resolvers/explore-detail.resolver.js +92 -92
- package/esm5/lib/resolvers/marketing-offering.resolve.js +42 -42
- package/esm5/lib/resolvers/page.constant.js +3 -3
- package/esm5/lib/resolvers/page.model.js +46 -46
- package/esm5/lib/resolvers/page.resolver.js +97 -97
- package/esm5/lib/resolvers/resolver.model.js +5 -5
- package/esm5/lib/services/auth-keycloak.service.js +293 -293
- package/esm5/lib/services/auth-microsoft.service.js +250 -250
- package/esm5/lib/services/card-content.model.js +30 -30
- package/esm5/lib/services/configurations.model.js +508 -490
- package/esm5/lib/services/configurations.service.js +105 -105
- package/esm5/lib/services/content-strip-multiple.model.js +74 -74
- package/esm5/lib/services/event.model.js +163 -154
- package/esm5/lib/services/event.service.js +55 -41
- package/esm5/lib/services/logger.service.js +72 -72
- package/esm5/lib/services/ms-office.model.js +7 -7
- package/esm5/lib/services/subapplication-respond.service.js +229 -229
- package/esm5/lib/services/telemetry.service.js +429 -296
- package/esm5/lib/services/user-preference.model.js +28 -28
- package/esm5/lib/services/user-preference.service.js +108 -108
- package/esm5/lib/services/utility.service.js +127 -127
- package/esm5/lib/services/value.service.js +32 -32
- package/esm5/lib/services/widget-content.model.js +341 -341
- package/esm5/lib/services/widget-content.service.js +213 -213
- package/esm5/lib/services/widget-resolver.model.js +56 -56
- package/esm5/lib/services/widget-search.model.js +125 -125
- package/esm5/public-api.js +66 -66
- package/esm5/sunbird-cb-utils.js +8 -8
- package/fesm2015/sunbird-cb-utils.js +4665 -4502
- package/fesm2015/sunbird-cb-utils.js.map +1 -1
- package/fesm5/sunbird-cb-utils.js +5073 -4899
- package/fesm5/sunbird-cb-utils.js.map +1 -1
- package/lib/components/image-crop/image-crop.component.d.ts +56 -56
- package/lib/components/image-crop/image-crop.module.d.ts +2 -2
- package/lib/constants/features.enum.d.ts +553 -553
- package/lib/constants/instances.enum.d.ts +3 -3
- package/lib/constants/misc.constants.d.ts +2 -2
- package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts +18 -18
- package/lib/directives/class-change-on-scroll/class-change-on-scroll.module.d.ts +2 -2
- package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts +9 -9
- package/lib/directives/default-thumbnail/default-thumbnail.module.d.ts +2 -2
- package/lib/directives/image-responsive/image-responsive.directive.d.ts +17 -17
- package/lib/directives/image-responsive/image-responsive.module.d.ts +2 -2
- package/lib/directives/in-view-port/in-view-port.directive.d.ts +11 -11
- package/lib/directives/in-view-port/in-view-port.module.d.ts +2 -2
- package/lib/directives/navigation/navigation.directive.d.ts +9 -9
- package/lib/directives/navigation/navigation.module.d.ts +2 -2
- package/lib/directives/permission/permission.directive.d.ts +3 -3
- package/lib/directives/permission/permission.module.d.ts +2 -2
- package/lib/helpers/functions/getStringifiedQueryParams.d.ts +3 -3
- package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts +18 -18
- package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts +2 -2
- package/lib/helpers/logout/logout.component.d.ts +18 -18
- package/lib/helpers/logout/logout.module.d.ts +2 -2
- package/lib/models/contentRating.model.d.ts +9 -9
- package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.d.ts +2 -2
- package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts +10 -10
- package/lib/pipes/pipe-count-transform/pipe-count-transform.module.d.ts +2 -2
- package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts +4 -4
- package/lib/pipes/pipe-date-concat/pipe-date-concat.module.d.ts +2 -2
- package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts +13 -13
- package/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts +2 -2
- package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +5 -5
- package/lib/pipes/pipe-filter/pipe-filter.module.d.ts +2 -2
- package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts +4 -4
- package/lib/pipes/pipe-filter-search/pipe-filter-search.module.d.ts +2 -2
- package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts +4 -4
- package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.d.ts +2 -2
- package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts +4 -4
- package/lib/pipes/pipe-limit-to/pipe-limit-to.module.d.ts +2 -2
- package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts +4 -4
- package/lib/pipes/pipe-list-filter/pipe-list-filter.module.d.ts +2 -2
- package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts +4 -4
- package/lib/pipes/pipe-name-transform/pipe-name-transform.module.d.ts +2 -2
- package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts +10 -10
- package/lib/pipes/pipe-order-by/pipe-order-by.module.d.ts +2 -2
- package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts +9 -9
- package/lib/pipes/pipe-partial-content/pipe-partial-content.module.d.ts +2 -2
- package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts +4 -4
- package/lib/pipes/pipe-relative-time/pipe-relative-time.module.d.ts +2 -2
- package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts +4 -4
- package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.d.ts +2 -2
- package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts +7 -7
- package/lib/resolvers/explore-detail.resolver.d.ts +16 -16
- package/lib/resolvers/marketing-offering.resolve.d.ts +10 -10
- package/lib/resolvers/page.constant.d.ts +1 -1
- package/lib/resolvers/page.model.d.ts +40 -40
- package/lib/resolvers/page.resolver.d.ts +17 -17
- package/lib/resolvers/resolver.model.d.ts +4 -4
- package/lib/services/auth-keycloak.service.d.ts +27 -27
- package/lib/services/auth-microsoft.service.d.ts +30 -30
- package/lib/services/card-content.model.d.ts +29 -29
- package/lib/services/configurations.model.d.ts +487 -473
- package/lib/services/configurations.service.d.ts +49 -49
- package/lib/services/content-strip-multiple.model.d.ts +79 -79
- package/lib/services/event.model.d.ts +137 -129
- package/lib/services/event.service.d.ts +9 -8
- package/lib/services/logger.service.d.ts +15 -15
- package/lib/services/ms-office.model.d.ts +6 -6
- package/lib/services/subapplication-respond.service.d.ts +25 -25
- package/lib/services/telemetry.service.d.ts +39 -33
- package/lib/services/user-preference.model.d.ts +26 -26
- package/lib/services/user-preference.service.d.ts +11 -11
- package/lib/services/utility.service.d.ts +23 -23
- package/lib/services/value.service.d.ts +8 -8
- package/lib/services/widget-content.model.d.ts +314 -314
- package/lib/services/widget-content.service.d.ts +49 -49
- package/lib/services/widget-resolver.model.d.ts +48 -48
- package/lib/services/widget-search.model.d.ts +114 -114
- package/package.json +1 -1
- package/public-api.d.ts +66 -66
- package/sunbird-cb-utils.d.ts +8 -8
- package/sunbird-cb-utils.metadata.json +1 -1
|
@@ -1,278 +1,400 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { filter } from 'rxjs/operators';
|
|
3
|
-
import { ConfigurationsService } from './configurations.service';
|
|
4
|
-
import { WsEvents } from './event.model';
|
|
5
|
-
import { EventService } from './event.service';
|
|
6
|
-
import { LoggerService } from './logger.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "./configurations.service";
|
|
9
|
-
import * as i2 from "./event.service";
|
|
10
|
-
import * as i3 from "./logger.service";
|
|
11
|
-
export class TelemetryService {
|
|
12
|
-
constructor(configSvc, eventsSvc, logger) {
|
|
13
|
-
this.configSvc = configSvc;
|
|
14
|
-
this.eventsSvc = eventsSvc;
|
|
15
|
-
this.logger = logger;
|
|
16
|
-
this.previousUrl = null;
|
|
17
|
-
this.telemetryConfig = null;
|
|
18
|
-
this.pData = null;
|
|
19
|
-
this.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.telemetryConfig =
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
$t.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
}));
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
this.eventsSvc.events$
|
|
216
|
-
.pipe(filter(((event) => event &&
|
|
217
|
-
event.data &&
|
|
218
|
-
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
219
|
-
event.data.eventSubType === WsEvents.EnumTelemetrySubType.
|
|
220
|
-
.subscribe((event => {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1jYi91dGlscy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7Ozs7O0FBUWhELE1BQU0sT0FBTyxnQkFBZ0I7SUFPM0IsWUFDVSxTQUFnQyxFQUNoQyxTQUF1QixFQUV2QixNQUFxQjtRQUhyQixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBRXZCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFWL0IsZ0JBQVcsR0FBa0IsSUFBSSxDQUFBO1FBQ2pDLG9CQUFlLEdBQTZDLElBQUksQ0FBQTtRQUNoRSxVQUFLLEdBQVEsSUFBSSxDQUFBO1FBQ2pCLGlCQUFZLEdBQVE7WUFDbEIsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FBQTtjQU9PLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWM7UUFDcEQsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsZUFBZSxDQUFBO1lBQ3JELElBQUksQ0FBQyxlQUFlLHFCQUNmLElBQUksQ0FBQyxlQUFlLElBQ3ZCLEtBQUssb0JBQ0EsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQzdCLEdBQUcsRUFBRSxTQUFTLENB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LENBQUMsUUFBUSxDQUFDO1FBRTVDLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUM1QjtRQUVELElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2RCxPQUFPLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUE7U0FDL0I7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7OztZQTNXRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVZRLHFCQUFxQjtZQUVyQixZQUFZO1lBQ1osYUFBYTs7OztJQVNwQix1Q0FBaUM7SUFDakMsMkNBQWdFO0lBQ2hFLGlDQUFpQjtJQUNqQix3Q0FFQztJQUVDLHFDQUF3QztJQUN4QyxxQ0FBK0I7SUFFL0Isa0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG4vLyBpbXBvcnQgeyBBdXRoS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLWtleWNsb2FrLnNlcnZpY2UnXHJcbmltcG9ydCB7IE5zSW5zdGFuY2VDb25maWcgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb25zLm1vZGVsJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb25zLnNlcnZpY2UnXHJcbmltcG9ydCB7IFdzRXZlbnRzIH0gZnJvbSAnLi9ldmVudC5tb2RlbCdcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9ldmVudC5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSdcclxuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi93aWRnZXQtY29udGVudC5tb2RlbCdcclxuXHJcbmRlY2xhcmUgdmFyICR0OiBhbnlcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcclxuICBwcmV2aW91c1VybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICB0ZWxlbWV0cnlDb25maWc6IE5zSW5zdGFuY2VDb25maWcuSVRlbGVtZXRyeUNvbmZpZyB8IG51bGwgPSBudWxsXHJcbiAgcERhdGE6IGFueSA9IG51bGxcclxuICBleHRlcm5hbEFwcHM6IGFueSA9IHtcclxuICAgIFJCQ1A6ICdyYmNwLXdlYi11aScsXHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgZXZlbnRzU3ZjOiBFdmVudFNlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlIGF1dGhTdmM6IEF1dGhLZXljbG9ha1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcclxuICApIHtcclxuICAgIGNvbnN0IGluc3RhbmNlQ29uZmlnID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWdcclxuICAgIGlmIChpbnN0YW5jZUNvbmZpZykge1xyXG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyA9IGluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZ1xyXG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyA9IHtcclxuICAgICAgICAuLi50aGlzLnRlbGVtZXRyeUNvbmZpZyxcclxuICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgLi4udGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGEsXHJcbiAgICAgICAgICBwaWQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB1aWQ6IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCxcclxuICAgICAgICAvLyBhdXRodG9rZW46IHRoaXMuYXV0aFN2Yy50b2tlbixcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBEYXRhID0gdGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGFcclxuICAgICAgdGhpcy5hZGRQbGF5ZXJMaXN0ZW5lcigpXHJcbiAgICAgIHRoaXMuYWRkSW50ZXJhY3RMaXN0ZW5lcigpXHJcbiAgICAgIHRoaXMuYWRkVGltZVNwZW50TGlzdGVuZXIoKVxyXG4gICAgICB0aGlzLmFkZFNlYXJjaExpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRIZWFyYmVhdExpc3RlbmVyKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0KHR5cGU6IHN0cmluZywgbW9kZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy50ZWxlbWV0cnlDb25maWcpIHtcclxuICAgICAgJHQuc3RhcnQodGhpcy50ZWxlbWV0cnlDb25maWcsIGlkLCAnMS4wJywge1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgbW9kZSxcclxuICAgICAgICBzdGFnZWlkOiAnJyxcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBJbml0aWFsaXppbmcgVGVsZW1ldHJ5LiBDb25maWcgbWlzc2luZy4nKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kKHR5cGU6IHN0cmluZywgbW9kZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XHJcbiAgICAkdC5lbmQoXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIG1vZGUsXHJcbiAgICAgICAgY29udGVudElkOiBpZCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgYXVkaXQodHlwZTogc3RyaW5nLCBwcm9wczogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgICR0LmF1ZGl0KFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBwcm9wcyxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBoZWFydGJlYXQodHlwZTogc3RyaW5nLCBtb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcclxuICAgICR0LmhlYXJ0YmVhdCh7XHJcbiAgICAgIGlkLFxyXG4gICAgICBtb2RlLFxyXG4gICAgICB0eXBlLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGltcHJlc3Npb24oKSB7XHJcbiAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICBpZiAocGFnZS5vYmplY3RJZCkge1xyXG4gICAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICBpZDogcGFnZS5vYmplY3RJZCxcclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICAgICR0LmltcHJlc3Npb24ocGFnZSwgY29uZmlnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgJHQuaW1wcmVzc2lvbihwYWdlLCB7XHJcbiAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLnByZXZpb3VzVXJsID0gcGFnZS5wYWdlVXJsXHJcbiAgfVxyXG5cclxuICBleHRlcm5hbEltcHJlc3Npb24oaW1wcmVzc2lvbkRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0pIHtcclxuICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSBwYWdlLm9iamVjdElkID8ge1xyXG4gICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgaWQ6IHBhZ2Uub2JqZWN0SWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSA6IHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgICR0LmltcHJlc3Npb24oaW1wcmVzc2lvbkRhdGEuZGF0YSwgZXh0ZXJuYWxDb25maWcpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUaW1lU3BlbnRMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgZXZlbnQgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS50eXBlID09PSBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGFnZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmIChldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGFnZSxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5WaWV3LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnBhZ2VJZCxcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZChcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QYWdlLFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlZpZXcsXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEucGFnZUlkLFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcbiAgYWRkUGxheWVyTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSA9PT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllciAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBldmVudC5kYXRhLmNvbnRlbnRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQgJiZcclxuICAgICAgICAgICghY29udGVudCB8fFxyXG4gICAgICAgICAgICBjb250ZW50LmlzSWZyYW1lU3VwcG9ydGVkLnRvTG93ZXJDYXNlKCkgPT09ICdtYXliZScgfHxcclxuICAgICAgICAgICAgY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZC50b0xvd2VyQ2FzZSgpID09PSAneWVzJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuaWRlbnRpZmllcixcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuVW5sb2FkZWQgJiZcclxuICAgICAgICAgICghY29udGVudCB8fFxyXG4gICAgICAgICAgICBjb250ZW50LmlzSWZyYW1lU3VwcG9ydGVkLnRvTG93ZXJDYXNlKCkgPT09ICdtYXliZScgfHxcclxuICAgICAgICAgICAgY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZC50b0xvd2VyQ2FzZSgpID09PSAneWVzJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZW5kKFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmlkZW50aWZpZXIsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkSW50ZXJhY3RMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3QpID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZnJvbSA9PT0gJ3N0cmluZycgJiYgdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0pIHtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICR0LmludGVyYWN0KGV2ZW50LmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAkdC5pbnRlcmFjdChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSxcclxuICAgICAgICAgICAgICBzdWJ0eXBlOiBldmVudC5kYXRhLnN1YlR5cGUsXHJcbiAgICAgICAgICAgICAgb2JqZWN0OiBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICBwYWdlaWQ6IHBhZ2UucGFnZWlkLFxyXG4gICAgICAgICAgICAgIHRhcmdldDogeyBwYWdlIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG4gIGFkZEhlYXJiZWF0TGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUhlYXJ0QmVhdCkgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSGVhcnRCZWF0LFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5mcm9tID09PSAnc3RyaW5nJyAmJiB0aGlzLmV4dGVybmFsQXBwc1tldmVudC5mcm9tXSkge1xyXG4gICAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tldmVudC5mcm9tXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgJHQuaGVhcnRiZWF0KGV2ZW50LmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAkdC5oZWFydGJlYXQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUsXHJcbiAgICAgICAgICAgICAgaWQ6IGV2ZW50LmRhdGEuaWQsXHJcbiAgICAgICAgICAgICAgLy8gbWltZVR5cGU6IGV2ZW50LmRhdGEubWltZVR5cGUsXHJcbiAgICAgICAgICAgICAgLy8gbW9kZTogZXZlbnQuZGF0YS5tb2RlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkU2VhcmNoTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeVNlYXJjaCkgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuU2VhcmNoLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgJHQuc2VhcmNoKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBxdWVyeTogZXZlbnQuZGF0YS5xdWVyeSxcclxuICAgICAgICAgICAgZmlsdGVyczogZXZlbnQuZGF0YS5maWx0ZXJzLFxyXG4gICAgICAgICAgICBzaXplOiBldmVudC5kYXRhLnNpemUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRQYWdlRGV0YWlscygpIHtcclxuICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgnLycsICcnKVxyXG4gICAgY29uc3QgdXJsID0gcGF0aCArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2hcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhZ2VpZDogcGF0aCxcclxuICAgICAgcGFnZVVybDogdXJsLFxyXG4gICAgICBwYWdlVXJsUGFydHM6IHBhdGguc3BsaXQoJy8nKSxcclxuICAgICAgcmVmZmVyVXJsOiB0aGlzLnByZXZpb3VzVXJsLFxyXG4gICAgICBvYmplY3RJZDogdGhpcy5leHRyYWN0Q29udGVudElkRnJvbVVybFBhcnRzKHBhdGguc3BsaXQoJy8nKSksXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHRyYWN0Q29udGVudElkRnJvbVVybFBhcnRzKHVybFBhcnRzOiBzdHJpbmdbXSkge1xyXG4gICAgLy8gVE9ETzogcGljayB0b2MgYW5kIHZpZXdlciB1cmwgZnJvbSBzb21lIGNvbmZpZ3VyYXRpb25cclxuICAgIGNvbnN0IHRvY0lkeCA9IHVybFBhcnRzLmluZGV4T2YoJ3RvYycpXHJcbiAgICBjb25zdCB2aWV3ZXJJZHggPSB1cmxQYXJ0cy5pbmRleE9mKCd2aWV3ZXInKVxyXG5cclxuICAgIGlmICh0b2NJZHggPT09IC0xICYmIHZpZXdlcklkeCA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodG9jSWR4ICE9PSAtMSAmJiB0b2NJZHggPCB1cmxQYXJ0cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJ0c1t0b2NJZHggKyAxXSAvLyBlLmcuIHVybCAvYXBwL3RvYy88Y29udGVudF9pZD5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmlld2VySWR4ICE9PSAtMSAmJiB2aWV3ZXJJZHggPCB1cmxQYXJ0cy5sZW5ndGggLSAyKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJ0c1t2aWV3ZXJJZHggKyAyXSAvLyBlLmcuIHVybCAvYXBwL3ZpZXdlci88Y29udGVudF90eXBlPi88Y29udGVudF9pZD5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxufVxyXG4iXX0=
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { filter } from 'rxjs/operators';
|
|
3
|
+
import { ConfigurationsService } from './configurations.service';
|
|
4
|
+
import { WsEvents } from './event.model';
|
|
5
|
+
import { EventService } from './event.service';
|
|
6
|
+
import { LoggerService } from './logger.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./configurations.service";
|
|
9
|
+
import * as i2 from "./event.service";
|
|
10
|
+
import * as i3 from "./logger.service";
|
|
11
|
+
export class TelemetryService {
|
|
12
|
+
constructor(environment, configSvc, eventsSvc, logger) {
|
|
13
|
+
this.configSvc = configSvc;
|
|
14
|
+
this.eventsSvc = eventsSvc;
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
this.previousUrl = null;
|
|
17
|
+
this.telemetryConfig = null;
|
|
18
|
+
this.pData = null;
|
|
19
|
+
this.contextCdata = [];
|
|
20
|
+
this.externalApps = {
|
|
21
|
+
RBCP: 'rbcp-web-ui',
|
|
22
|
+
};
|
|
23
|
+
const instanceConfig = this.configSvc.instanceConfig;
|
|
24
|
+
if (instanceConfig) {
|
|
25
|
+
this.telemetryConfig = instanceConfig.telemetryConfig;
|
|
26
|
+
this.environment = environment;
|
|
27
|
+
this.telemetryConfig = Object.assign({}, this.telemetryConfig, { pdata: Object.assign({}, this.telemetryConfig.pdata, { id: `${environment.name}.${this.telemetryConfig.pdata.id}` }), uid: this.configSvc.userProfile && this.configSvc.userProfile.userId, channel: this.rootOrgId || this.telemetryConfig.channel, sid: this.getTelemetrySessionId });
|
|
28
|
+
this.pData = this.telemetryConfig.pdata;
|
|
29
|
+
this.addPlayerListener();
|
|
30
|
+
this.addInteractListener();
|
|
31
|
+
this.addFeedbackListener();
|
|
32
|
+
this.addTimeSpentListener();
|
|
33
|
+
this.addSearchListener();
|
|
34
|
+
this.addHearbeatListener();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
get getTelemetrySessionId() {
|
|
38
|
+
return localStorage.getItem('telemetrySessionId') || '';
|
|
39
|
+
}
|
|
40
|
+
get rootOrgId() {
|
|
41
|
+
if (this.configSvc && this.configSvc.userProfile && this.configSvc.userProfile.rootOrgId) {
|
|
42
|
+
return this.configSvc.userProfile.rootOrgId;
|
|
43
|
+
}
|
|
44
|
+
return '';
|
|
45
|
+
}
|
|
46
|
+
start(type, mode, id, data) {
|
|
47
|
+
try {
|
|
48
|
+
if (this.telemetryConfig) {
|
|
49
|
+
$t.start(this.telemetryConfig, id, '1.0', {
|
|
50
|
+
type,
|
|
51
|
+
mode,
|
|
52
|
+
pageid: id,
|
|
53
|
+
}, {
|
|
54
|
+
context: {
|
|
55
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
56
|
+
},
|
|
57
|
+
object: Object.assign({}, (data) && data),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.logger.error('Error Initializing Telemetry. Config missing.');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
console.log('Error in telemetry start', e);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
end(type, mode, id, data) {
|
|
69
|
+
try {
|
|
70
|
+
$t.end({
|
|
71
|
+
type,
|
|
72
|
+
mode,
|
|
73
|
+
pageid: id,
|
|
74
|
+
}, {
|
|
75
|
+
context: {
|
|
76
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
77
|
+
},
|
|
78
|
+
object: Object.assign({}, (data) && data),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
console.log('Error in telemetry end', e);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
audit(type, props, data) {
|
|
86
|
+
try {
|
|
87
|
+
$t.audit({
|
|
88
|
+
type,
|
|
89
|
+
props,
|
|
90
|
+
state: data,
|
|
91
|
+
prevstate: '',
|
|
92
|
+
duration: '',
|
|
93
|
+
}, {
|
|
94
|
+
context: {
|
|
95
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
console.log('Error in telemetry audit', e);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
heartbeat(type, id) {
|
|
104
|
+
try {
|
|
105
|
+
$t.heartbeat({
|
|
106
|
+
id,
|
|
107
|
+
type,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
console.log('Error in telemetry heartbeat', e);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
impression(data) {
|
|
115
|
+
try {
|
|
116
|
+
const page = this.getPageDetails();
|
|
117
|
+
if (data) {
|
|
118
|
+
page.pageid = data.pageId;
|
|
119
|
+
page.module = data.pageModule;
|
|
120
|
+
}
|
|
121
|
+
const edata = {
|
|
122
|
+
pageid: page.pageid,
|
|
123
|
+
type: page.pageUrlParts[0],
|
|
124
|
+
uri: page.pageUrl,
|
|
125
|
+
};
|
|
126
|
+
if (page.objectId) {
|
|
127
|
+
const config = {
|
|
128
|
+
context: {
|
|
129
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
130
|
+
env: page.module || (this.telemetryConfig && this.telemetryConfig.env),
|
|
131
|
+
},
|
|
132
|
+
object: {
|
|
133
|
+
id: page.objectId,
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
$t.impression(edata, config);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
$t.impression(edata, {
|
|
140
|
+
context: {
|
|
141
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
142
|
+
env: page.module,
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
this.previousUrl = page.pageUrl;
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
console.log('Error in telemetry impression', e);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
externalImpression(impressionData) {
|
|
153
|
+
try {
|
|
154
|
+
const page = this.getPageDetails();
|
|
155
|
+
if (this.externalApps[impressionData.subApplicationName]) {
|
|
156
|
+
const externalConfig = page.objectId ? {
|
|
157
|
+
context: {
|
|
158
|
+
pdata: Object.assign({}, this.pData, { id: this.externalApps[impressionData.subApplicationName] }),
|
|
159
|
+
},
|
|
160
|
+
object: {
|
|
161
|
+
id: page.objectId,
|
|
162
|
+
},
|
|
163
|
+
} : {
|
|
164
|
+
context: {
|
|
165
|
+
pdata: Object.assign({}, this.pData, { id: this.externalApps[impressionData.subApplicationName] }),
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
$t.impression(impressionData.data, externalConfig);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
console.log('Error in telemetry externalImpression', e);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
addTimeSpentListener() {
|
|
176
|
+
this.eventsSvc.events$
|
|
177
|
+
.pipe(filter((event => event &&
|
|
178
|
+
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
179
|
+
event.data.type === WsEvents.WsTimeSpentType.Page &&
|
|
180
|
+
event.data.mode &&
|
|
181
|
+
event.data)))
|
|
182
|
+
.subscribe((event => {
|
|
183
|
+
if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
|
|
184
|
+
this.start(event.data.type || WsEvents.WsTimeSpentType.Page, event.data.mode || WsEvents.WsTimeSpentMode.View, event.data.pageId);
|
|
185
|
+
}
|
|
186
|
+
if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded) {
|
|
187
|
+
this.end(event.data.type || WsEvents.WsTimeSpentType.Page, event.data.mode || WsEvents.WsTimeSpentMode.View, event.data.pageId);
|
|
188
|
+
}
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
addPlayerListener() {
|
|
192
|
+
this.eventsSvc.events$
|
|
193
|
+
.pipe(filter((event => event &&
|
|
194
|
+
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
195
|
+
event.data.type === WsEvents.WsTimeSpentType.Player &&
|
|
196
|
+
event.data.mode &&
|
|
197
|
+
event.data)))
|
|
198
|
+
.subscribe((event => {
|
|
199
|
+
const content = event.data.content;
|
|
200
|
+
if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded &&
|
|
201
|
+
(!content ||
|
|
202
|
+
(content.isIframeSupported || '').toLowerCase() === 'maybe' ||
|
|
203
|
+
(content.isIframeSupported || '').toLowerCase() === 'yes')) {
|
|
204
|
+
this.start(event.data.type || WsEvents.WsTimeSpentType.Player, event.data.mode || WsEvents.WsTimeSpentMode.Play, event.data.identifier, event.data.object);
|
|
205
|
+
}
|
|
206
|
+
if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded &&
|
|
207
|
+
(!content ||
|
|
208
|
+
(content.isIframeSupported || '').toLowerCase() === 'maybe' ||
|
|
209
|
+
(content.isIframeSupported || '').toLowerCase() === 'yes')) {
|
|
210
|
+
this.end(event.data.type || WsEvents.WsTimeSpentType.Player, event.data.mode || WsEvents.WsTimeSpentMode.Play, event.data.identifier, event.data.object);
|
|
211
|
+
}
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
addInteractListener() {
|
|
215
|
+
this.eventsSvc.events$
|
|
216
|
+
.pipe(filter(((event) => event &&
|
|
217
|
+
event.data &&
|
|
218
|
+
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
219
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Interact)))
|
|
220
|
+
.subscribe((event => {
|
|
221
|
+
const page = this.getPageDetails();
|
|
222
|
+
if (typeof event.from === 'string' && this.externalApps[event.from]) {
|
|
223
|
+
const externalConfig = {
|
|
224
|
+
context: {
|
|
225
|
+
pdata: Object.assign({}, this.pData, { id: this.externalApps[event.from] }),
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
try {
|
|
229
|
+
$t.interact(event.data, externalConfig);
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
console.log('Error in telemetry interact', e);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
let interactid;
|
|
237
|
+
if (event.data.type === 'goal') {
|
|
238
|
+
interactid = page.pageUrlParts[4];
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
$t.interact({
|
|
242
|
+
type: event.data.type,
|
|
243
|
+
subtype: event.data.subType,
|
|
244
|
+
id: (event.data.object) ? event.data.object.contentId || event.data.object.id || interactid || '' : '',
|
|
245
|
+
pageid: page.pageid,
|
|
246
|
+
}, {
|
|
247
|
+
context: {
|
|
248
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
249
|
+
},
|
|
250
|
+
object: Object.assign({}, event.data.object),
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
catch (e) {
|
|
254
|
+
console.log('Error in telemetry interact', e);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}));
|
|
258
|
+
}
|
|
259
|
+
addFeedbackListener() {
|
|
260
|
+
this.eventsSvc.events$
|
|
261
|
+
.pipe(filter(((event) => event &&
|
|
262
|
+
event.data &&
|
|
263
|
+
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
264
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Feedback)))
|
|
265
|
+
.subscribe((event => {
|
|
266
|
+
const page = this.getPageDetails();
|
|
267
|
+
try {
|
|
268
|
+
$t.feedback({
|
|
269
|
+
rating: event.data.object.rating || 0,
|
|
270
|
+
commentid: event.data.object.commentid || '',
|
|
271
|
+
commenttxt: event.data.object.commenttxt || '',
|
|
272
|
+
pageid: page.pageid,
|
|
273
|
+
}, {
|
|
274
|
+
context: {
|
|
275
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
276
|
+
},
|
|
277
|
+
object: {
|
|
278
|
+
id: event.data.object.contentId || event.data.object.id || '',
|
|
279
|
+
type: event.data.type || '',
|
|
280
|
+
ver: `${(event.data.object.version || '1')}${''}`,
|
|
281
|
+
rollup: {},
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
catch (e) {
|
|
286
|
+
console.log('Error in telemetry interact', e);
|
|
287
|
+
}
|
|
288
|
+
}));
|
|
289
|
+
}
|
|
290
|
+
addHearbeatListener() {
|
|
291
|
+
this.eventsSvc.events$
|
|
292
|
+
.pipe(filter(((event) => event &&
|
|
293
|
+
event.data &&
|
|
294
|
+
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
295
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.HeartBeat)))
|
|
296
|
+
.subscribe((event => {
|
|
297
|
+
if (typeof event.from === 'string' && this.externalApps[event.from]) {
|
|
298
|
+
const externalConfig = {
|
|
299
|
+
context: {
|
|
300
|
+
pdata: Object.assign({}, this.pData, { id: this.externalApps[event.from] }),
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
try {
|
|
304
|
+
$t.heartbeat(event.data, externalConfig);
|
|
305
|
+
}
|
|
306
|
+
catch (e) {
|
|
307
|
+
console.log('Error in telemetry heartbeat', e);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
try {
|
|
312
|
+
$t.heartbeat({
|
|
313
|
+
type: event.data.type,
|
|
314
|
+
id: event.data.id,
|
|
315
|
+
}, {
|
|
316
|
+
context: {
|
|
317
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
catch (e) {
|
|
322
|
+
console.log('Error in telemetry heartbeat', e);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}));
|
|
326
|
+
}
|
|
327
|
+
addSearchListener() {
|
|
328
|
+
this.eventsSvc.events$
|
|
329
|
+
.pipe(filter(((event) => event &&
|
|
330
|
+
event.data &&
|
|
331
|
+
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
332
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Search)))
|
|
333
|
+
.subscribe((event => {
|
|
334
|
+
try {
|
|
335
|
+
$t.search({
|
|
336
|
+
query: event.data.query,
|
|
337
|
+
filters: event.data.filters,
|
|
338
|
+
size: event.data.size,
|
|
339
|
+
}, {
|
|
340
|
+
context: {
|
|
341
|
+
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
342
|
+
},
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
catch (e) {
|
|
346
|
+
console.log('Error in telemetry search', e);
|
|
347
|
+
}
|
|
348
|
+
}));
|
|
349
|
+
}
|
|
350
|
+
getPageDetails() {
|
|
351
|
+
const path = window.location.pathname.replace('/', '');
|
|
352
|
+
const url = path + window.location.search;
|
|
353
|
+
return {
|
|
354
|
+
pageid: path,
|
|
355
|
+
pageUrl: url,
|
|
356
|
+
pageUrlParts: path.split('/'),
|
|
357
|
+
refferUrl: this.previousUrl,
|
|
358
|
+
objectId: this.extractContentIdFromUrlParts(path.split('/')),
|
|
359
|
+
module: '',
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
extractContentIdFromUrlParts(urlParts) {
|
|
363
|
+
const tocIdx = urlParts.indexOf('toc');
|
|
364
|
+
const viewerIdx = urlParts.indexOf('viewer');
|
|
365
|
+
if (tocIdx === -1 && viewerIdx === -1) {
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
if (tocIdx !== -1 && tocIdx < urlParts.length - 1) {
|
|
369
|
+
return urlParts[tocIdx + 1];
|
|
370
|
+
}
|
|
371
|
+
if (viewerIdx !== -1 && viewerIdx < urlParts.length - 2) {
|
|
372
|
+
return urlParts[viewerIdx + 2];
|
|
373
|
+
}
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
TelemetryService.decorators = [
|
|
378
|
+
{ type: Injectable, args: [{
|
|
379
|
+
providedIn: 'root',
|
|
380
|
+
},] }
|
|
381
|
+
];
|
|
382
|
+
TelemetryService.ctorParameters = () => [
|
|
383
|
+
{ type: undefined, decorators: [{ type: Inject, args: ['environment',] }] },
|
|
384
|
+
{ type: ConfigurationsService },
|
|
385
|
+
{ type: EventService },
|
|
386
|
+
{ type: LoggerService }
|
|
387
|
+
];
|
|
388
|
+
/** @nocollapse */ TelemetryService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function TelemetryService_Factory() { return new TelemetryService(i0.ɵɵinject("environment"), i0.ɵɵinject(i1.ConfigurationsService), i0.ɵɵinject(i2.EventService), i0.ɵɵinject(i3.LoggerService)); }, token: TelemetryService, providedIn: "root" });
|
|
389
|
+
if (false) {
|
|
390
|
+
TelemetryService.prototype.previousUrl;
|
|
391
|
+
TelemetryService.prototype.telemetryConfig;
|
|
392
|
+
TelemetryService.prototype.pData;
|
|
393
|
+
TelemetryService.prototype.contextCdata;
|
|
394
|
+
TelemetryService.prototype.externalApps;
|
|
395
|
+
TelemetryService.prototype.environment;
|
|
396
|
+
TelemetryService.prototype.configSvc;
|
|
397
|
+
TelemetryService.prototype.eventsSvc;
|
|
398
|
+
TelemetryService.prototype.logger;
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1jYi91dGlscy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBOzs7OztBQVFoRCxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQ3lCLFdBQWdCLEVBQy9CLFNBQWdDLEVBQ2hDLFNBQXVCLEVBRXZCLE1BQXFCO1FBSHJCLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFFdkIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQWQvQixnQkFBVyxHQUFrQixJQUFJLENBQUE7UUFDakMsb0JBQWUsR0FBNkMsSUFBSSxDQUFBO1FBQ2hFLFVBQUssR0FBUSxJQUFJLENBQUE7UUFDakIsaUJBQVksR0FBRyxFQUFFLENBQUE7UUFFakIsaUJBQVksR0FBUTtZQUNsQixJQUFJLEVBQUUsYUFBYTtTQUNwQixDQUFBO2NBVU8sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYztRQUNwRCxJQUFJLGNBQWMsRUFBRTtZQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUE7WUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7WUFDOUIsSUFBSSxDQUFDLGVBQWUs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LENBQUMsQ0FBQztZQUM1RCxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUE7SUFDSCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsUUFBa0I7Y0FFdkMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2NBQ2hDLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUU1QyxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7U0FDNUI7UUFFRCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsT0FBTyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQy9CO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDOzs7WUEvZ0JGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQVlJLE1BQU0sU0FBQyxhQUFhO1lBdEJoQixxQkFBcUI7WUFFckIsWUFBWTtZQUNaLGFBQWE7Ozs7SUFTcEIsdUNBQWlDO0lBQ2pDLDJDQUFnRTtJQUNoRSxpQ0FBaUI7SUFDakIsd0NBQWlCO0lBRWpCLHdDQUVDO0lBQ0QsdUNBQWdCO0lBR2QscUNBQXdDO0lBQ3hDLHFDQUErQjtJQUUvQixrQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuLy8gaW1wb3J0IHsgQXV0aEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vYXV0aC1rZXljbG9hay5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBOc0luc3RhbmNlQ29uZmlnIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5tb2RlbCdcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBXc0V2ZW50cyB9IGZyb20gJy4vZXZlbnQubW9kZWwnXHJcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4vZXZlbnQuc2VydmljZSdcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vbG9nZ2VyLnNlcnZpY2UnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbnRlbnQubW9kZWwnXHJcblxyXG5kZWNsYXJlIHZhciAkdDogYW55XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XHJcbiAgcHJldmlvdXNVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXHJcbiAgdGVsZW1ldHJ5Q29uZmlnOiBOc0luc3RhbmNlQ29uZmlnLklUZWxlbWV0cnlDb25maWcgfCBudWxsID0gbnVsbFxyXG4gIHBEYXRhOiBhbnkgPSBudWxsXHJcbiAgY29udGV4dENkYXRhID0gW11cclxuXHJcbiAgZXh0ZXJuYWxBcHBzOiBhbnkgPSB7XHJcbiAgICBSQkNQOiAncmJjcC13ZWItdWknLFxyXG4gIH1cclxuICBlbnZpcm9ubWVudDogYW55XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnksXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBldmVudHNTdmM6IEV2ZW50U2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgYXV0aFN2YzogQXV0aEtleWNsb2FrU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxyXG5cclxuICApIHtcclxuICAgIGNvbnN0IGluc3RhbmNlQ29uZmlnID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWdcclxuICAgIGlmIChpbnN0YW5jZUNvbmZpZykge1xyXG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyA9IGluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZ1xyXG4gICAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcclxuICAgICAgdGhpcy50ZWxlbWV0cnlDb25maWcgPSB7XHJcbiAgICAgICAgLi4udGhpcy50ZWxlbWV0cnlDb25maWcsXHJcbiAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgIC4uLnRoaXMudGVsZW1ldHJ5Q29uZmlnLnBkYXRhLFxyXG4gICAgICAgICAgLy8gcGlkOiBuYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICAgICAgaWQ6IGAke2Vudmlyb25tZW50Lm5hbWV9LiR7dGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGEuaWR9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHVpZDogdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkLFxyXG4gICAgICAgIC8vIGF1dGh0b2tlbjogdGhpcy5hdXRoU3ZjLnRva2VuLFxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY2hhbm5lbDogdGhpcy5yb290T3JnSWQgfHwgdGhpcy50ZWxlbWV0cnlDb25maWcuY2hhbm5lbCxcclxuICAgICAgICBzaWQ6IHRoaXMuZ2V0VGVsZW1ldHJ5U2Vzc2lvbklkLFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucERhdGEgPSB0aGlzLnRlbGVtZXRyeUNvbmZpZy5wZGF0YVxyXG4gICAgICB0aGlzLmFkZFBsYXllckxpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRJbnRlcmFjdExpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRGZWVkYmFja0xpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRUaW1lU3BlbnRMaXN0ZW5lcigpXHJcbiAgICAgIHRoaXMuYWRkU2VhcmNoTGlzdGVuZXIoKVxyXG4gICAgICB0aGlzLmFkZEhlYXJiZWF0TGlzdGVuZXIoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFRlbGVtZXRyeVNlc3Npb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0ZWxlbWV0cnlTZXNzaW9uSWQnKSB8fCAnJ1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJvb3RPcmdJZCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIHN0YXJ0KHR5cGU6IHN0cmluZywgbW9kZTogc3RyaW5nLCBpZDogc3RyaW5nLCBkYXRhPzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy50ZWxlbWV0cnlDb25maWcpIHtcclxuICAgICAgICAkdC5zdGFydChcclxuICAgICAgICAgIHRoaXMudGVsZW1ldHJ5Q29uZmlnLFxyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICAnMS4wJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gaWQsXHJcbiAgICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICAgIG1vZGUsXHJcbiAgICAgICAgICAgIHBhZ2VpZDogaWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAuLi4oZGF0YSkgJiYgZGF0YSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIEluaXRpYWxpemluZyBUZWxlbWV0cnkuIENvbmZpZyBtaXNzaW5nLicpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgc3RhcnQnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kKHR5cGU6IHN0cmluZywgbW9kZTogc3RyaW5nLCBpZDogc3RyaW5nLCBkYXRhPzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAkdC5lbmQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIG1vZGUsXHJcbiAgICAgICAgICBwYWdlaWQ6IGlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgIC4uLihkYXRhKSAmJiBkYXRhLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICApXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGVuZCcsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhdWRpdCh0eXBlOiBzdHJpbmcsIHByb3BzOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgJHQuYXVkaXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIHByb3BzLFxyXG4gICAgICAgICAgLy8gZGF0YSxcclxuICAgICAgICAgIHN0YXRlOiBkYXRhLCAvLyBPcHRpb25hbC4gQ3VycmVudCBTdGF0ZVxyXG4gICAgICAgICAgcHJldnN0YXRlOiAnJywgLy8gT3B0aW9uYWwuIFByZXZpb3VzIFN0YXRlXHJcbiAgICAgICAgICBkdXJhdGlvbjogJycsIC8vIE9wdGlvbmFsLlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgYXVkaXQnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGVhcnRiZWF0KHR5cGU6IHN0cmluZywgaWQ6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgJHQuaGVhcnRiZWF0KHtcclxuICAgICAgICBpZCxcclxuICAgICAgICAvLyBtb2RlLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgIH0pXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGhlYXJ0YmVhdCcsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbXByZXNzaW9uKGRhdGE/OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VEZXRhaWxzKClcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICBwYWdlLnBhZ2VpZCA9IGRhdGEucGFnZUlkXHJcbiAgICAgICAgcGFnZS5tb2R1bGUgPSBkYXRhLnBhZ2VNb2R1bGVcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBlZGF0YSA9IHtcclxuICAgICAgICBwYWdlaWQ6IHBhZ2UucGFnZWlkLCAvLyBSZXF1aXJlZC4gVW5pcXVlIHBhZ2UgaWRcclxuICAgICAgICB0eXBlOiBwYWdlLnBhZ2VVcmxQYXJ0c1swXSwgLy8gUmVxdWlyZWQuIEltcHJlc3Npb24gdHlwZSAobGlzdCwgZGV0YWlsLCB2aWV3LCBlZGl0LCB3b3JrZmxvdywgc2VhcmNoKVxyXG4gICAgICAgIHVyaTogcGFnZS5wYWdlVXJsLFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYWdlLm9iamVjdElkKSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVudjogcGFnZS5tb2R1bGUgfHwgKHRoaXMudGVsZW1ldHJ5Q29uZmlnICYmIHRoaXMudGVsZW1ldHJ5Q29uZmlnLmVudiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgIGlkOiBwYWdlLm9iamVjdElkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgICAgJHQuaW1wcmVzc2lvbihlZGF0YSwgY29uZmlnKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICR0LmltcHJlc3Npb24oZWRhdGEsIHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnY6IHBhZ2UubW9kdWxlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJldmlvdXNVcmwgPSBwYWdlLnBhZ2VVcmxcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW1wcmVzc2lvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHRlcm5hbEltcHJlc3Npb24oaW1wcmVzc2lvbkRhdGE6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgICBpZiAodGhpcy5leHRlcm5hbEFwcHNbaW1wcmVzc2lvbkRhdGEuc3ViQXBwbGljYXRpb25OYW1lXSkge1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0gcGFnZS5vYmplY3RJZCA/IHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICBpZDogcGFnZS5vYmplY3RJZCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSA6IHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgICAgJHQuaW1wcmVzc2lvbihpbXByZXNzaW9uRGF0YS5kYXRhLCBleHRlcm5hbENvbmZpZylcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBleHRlcm5hbEltcHJlc3Npb24nLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVGltZVNwZW50TGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSA9PT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBhZ2UgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0KFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBhZ2UsXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuVmlldyxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5wYWdlSWQsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGFnZSxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5WaWV3LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnBhZ2VJZCxcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG4gIGFkZFBsYXllckxpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICBldmVudCA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnR5cGUgPT09IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsID0gZXZlbnQuZGF0YS5jb250ZW50XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkICYmXHJcbiAgICAgICAgICAoIWNvbnRlbnQgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdtYXliZScgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIsXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5pZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm9iamVjdFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCAmJlxyXG4gICAgICAgICAgKCFjb250ZW50IHx8XHJcbiAgICAgICAgICAgIChjb250ZW50LmlzSWZyYW1lU3VwcG9ydGVkIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnbWF5YmUnIHx8XHJcbiAgICAgICAgICAgIChjb250ZW50LmlzSWZyYW1lU3VwcG9ydGVkIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAneWVzJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZW5kKFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkSW50ZXJhY3RMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3QpID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZnJvbSA9PT0gJ3N0cmluZycgJiYgdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0pIHtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmludGVyYWN0KGV2ZW50LmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbnRlcmFjdCcsIGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBpbnRlcmFjdGlkXHJcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS50eXBlID09PSAnZ29hbCcpIHtcclxuICAgICAgICAgICAgaW50ZXJhY3RpZCA9IHBhZ2UucGFnZVVybFBhcnRzWzRdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkdC5pbnRlcmFjdChcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBzdWJ0eXBlOiBldmVudC5kYXRhLnN1YlR5cGUsXHJcbiAgICAgICAgICAgICAgICAvLyBvYmplY3Q6IGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgaWQ6IChldmVudC5kYXRhLm9iamVjdCkgPyBldmVudC5kYXRhLm9iamVjdC5jb250ZW50SWQgfHwgZXZlbnQuZGF0YS5vYmplY3QuaWQgfHwgaW50ZXJhY3RpZCB8fCAnJyA6ICcnLFxyXG4gICAgICAgICAgICAgICAgcGFnZWlkOiBwYWdlLnBhZ2VpZCxcclxuICAgICAgICAgICAgICAgIC8vIHRhcmdldDogeyBwYWdlIH0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAgICAgLi4uZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGludGVyYWN0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRGZWVkYmFja0xpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlGZWVkYmFjaykgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuRmVlZGJhY2ssXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICR0LmZlZWRiYWNrKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcmF0aW5nOiBldmVudC5kYXRhLm9iamVjdC5yYXRpbmcgfHwgMCxcclxuICAgICAgICAgICAgICBjb21tZW50aWQ6IGV2ZW50LmRhdGEub2JqZWN0LmNvbW1lbnRpZCB8fCAnJyxcclxuICAgICAgICAgICAgICBjb21tZW50dHh0OiBldmVudC5kYXRhLm9iamVjdC5jb21tZW50dHh0IHx8ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogcGFnZS5wYWdlaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAgIGlkOiBldmVudC5kYXRhLm9iamVjdC5jb250ZW50SWQgfHwgZXZlbnQuZGF0YS5vYmplY3QuaWQgfHwgJycsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICB2ZXI6IGAkeyhldmVudC5kYXRhLm9iamVjdC52ZXJzaW9uIHx8ICcxJyl9JHsnJ31gLFxyXG4gICAgICAgICAgICAgICAgcm9sbHVwOiB7fSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbnRlcmFjdCcsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkSGVhcmJlYXRMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5SGVhcnRCZWF0KSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5IZWFydEJlYXQsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmZyb20gPT09ICdzdHJpbmcnICYmIHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dKSB7XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbENvbmZpZyA9IHtcclxuICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkdC5oZWFydGJlYXQoZXZlbnQuZGF0YSwgZXh0ZXJuYWxDb25maWcpXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGhlYXJ0YmVhdCcsIGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmhlYXJ0YmVhdChcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAvLyBzdWJ0eXBlOiBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSxcclxuICAgICAgICAgICAgICAgIGlkOiBldmVudC5kYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgLy8gbWltZVR5cGU6IGV2ZW50LmRhdGEubWltZVR5cGUsXHJcbiAgICAgICAgICAgICAgICAvLyBtb2RlOiBldmVudC5kYXRhLm1vZGUsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaGVhcnRiZWF0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRTZWFyY2hMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5U2VhcmNoKSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5TZWFyY2gsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgJHQuc2VhcmNoKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcXVlcnk6IGV2ZW50LmRhdGEucXVlcnksXHJcbiAgICAgICAgICAgICAgZmlsdGVyczogZXZlbnQuZGF0YS5maWx0ZXJzLFxyXG4gICAgICAgICAgICAgIHNpemU6IGV2ZW50LmRhdGEuc2l6ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBzZWFyY2gnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldFBhZ2VEZXRhaWxzKCkge1xyXG4gICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKCcvJywgJycpXHJcbiAgICBjb25zdCB1cmwgPSBwYXRoICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFnZWlkOiBwYXRoLFxyXG4gICAgICBwYWdlVXJsOiB1cmwsXHJcbiAgICAgIHBhZ2VVcmxQYXJ0czogcGF0aC5zcGxpdCgnLycpLFxyXG4gICAgICByZWZmZXJVcmw6IHRoaXMucHJldmlvdXNVcmwsXHJcbiAgICAgIG9iamVjdElkOiB0aGlzLmV4dHJhY3RDb250ZW50SWRGcm9tVXJsUGFydHMocGF0aC5zcGxpdCgnLycpKSxcclxuICAgICAgbW9kdWxlOiAnJyxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dHJhY3RDb250ZW50SWRGcm9tVXJsUGFydHModXJsUGFydHM6IHN0cmluZ1tdKSB7XHJcbiAgICAvLyBUT0RPOiBwaWNrIHRvYyBhbmQgdmlld2VyIHVybCBmcm9tIHNvbWUgY29uZmlndXJhdGlvblxyXG4gICAgY29uc3QgdG9jSWR4ID0gdXJsUGFydHMuaW5kZXhPZigndG9jJylcclxuICAgIGNvbnN0IHZpZXdlcklkeCA9IHVybFBhcnRzLmluZGV4T2YoJ3ZpZXdlcicpXHJcblxyXG4gICAgaWYgKHRvY0lkeCA9PT0gLTEgJiYgdmlld2VySWR4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0b2NJZHggIT09IC0xICYmIHRvY0lkeCA8IHVybFBhcnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgcmV0dXJuIHVybFBhcnRzW3RvY0lkeCArIDFdIC8vIGUuZy4gdXJsIC9hcHAvdG9jLzxjb250ZW50X2lkPlxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2aWV3ZXJJZHggIT09IC0xICYmIHZpZXdlcklkeCA8IHVybFBhcnRzLmxlbmd0aCAtIDIpIHtcclxuICAgICAgcmV0dXJuIHVybFBhcnRzW3ZpZXdlcklkeCArIDJdIC8vIGUuZy4gdXJsIC9hcHAvdmlld2VyLzxjb250ZW50X3R5cGU+Lzxjb250ZW50X2lkPlxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG59XHJcbiJdfQ==
|