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