@sunbird-cb/utils 1.0.2 → 1.0.6

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 +5253 -4901
  2. package/bundles/sunbird-cb-utils.umd.js.map +1 -1
  3. package/bundles/sunbird-cb-utils.umd.min.js +15 -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 -101
  66. package/esm2015/lib/services/content-strip-multiple.model.js +74 -74
  67. package/esm2015/lib/services/event.model.js +223 -154
  68. package/esm2015/lib/services/event.service.js +106 -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 +414 -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 +145 -100
  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 -103
  144. package/esm5/lib/services/content-strip-multiple.model.js +74 -74
  145. package/esm5/lib/services/event.model.js +223 -154
  146. package/esm5/lib/services/event.service.js +108 -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 +446 -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 +178 -128
  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 +4834 -4502
  162. package/fesm2015/sunbird-cb-utils.js.map +1 -1
  163. package/fesm5/sunbird-cb-utils.js +5250 -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 -48
  227. package/lib/services/content-strip-multiple.model.d.ts +79 -79
  228. package/lib/services/event.model.d.ts +187 -129
  229. package/lib/services/event.service.d.ts +14 -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 +40 -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 +31 -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,446 @@
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(configSvc, eventsSvc, logger, environment) {
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
+ this.addCustomImpressionListener();
37
+ }
38
+ }
39
+ Object.defineProperty(TelemetryService.prototype, "getTelemetrySessionId", {
40
+ get: function () {
41
+ return localStorage.getItem('telemetrySessionId') || '';
42
+ },
43
+ enumerable: true,
44
+ configurable: true
45
+ });
46
+ Object.defineProperty(TelemetryService.prototype, "rootOrgId", {
47
+ get: function () {
48
+ if (this.configSvc && this.configSvc.userProfile && this.configSvc.userProfile.rootOrgId) {
49
+ return this.configSvc.userProfile.rootOrgId;
50
+ }
51
+ return '';
52
+ },
53
+ enumerable: true,
54
+ configurable: true
55
+ });
56
+ TelemetryService.prototype.start = function (type, mode, id, data) {
57
+ try {
58
+ if (this.telemetryConfig) {
59
+ $t.start(this.telemetryConfig, id, '1.0', {
60
+ type: type,
61
+ mode: mode,
62
+ pageid: id,
63
+ duration: 1,
64
+ }, {
65
+ context: {
66
+ pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }),
67
+ env: 'home',
68
+ },
69
+ object: tslib_1.__assign({}, (data) && data),
70
+ });
71
+ }
72
+ else {
73
+ this.logger.error('Error Initializing Telemetry. Config missing.');
74
+ }
75
+ }
76
+ catch (e) {
77
+ console.log('Error in telemetry start', e);
78
+ }
79
+ };
80
+ TelemetryService.prototype.end = function (type, mode, id, data) {
81
+ try {
82
+ $t.end({
83
+ type: type,
84
+ mode: mode,
85
+ pageid: id,
86
+ }, {
87
+ context: {
88
+ pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }),
89
+ },
90
+ object: tslib_1.__assign({}, (data) && data),
91
+ });
92
+ }
93
+ catch (e) {
94
+ console.log('Error in telemetry end', e);
95
+ }
96
+ };
97
+ TelemetryService.prototype.audit = function (type, props, data) {
98
+ try {
99
+ $t.audit({
100
+ type: type,
101
+ props: props,
102
+ state: data,
103
+ prevstate: '',
104
+ duration: '',
105
+ }, {
106
+ context: {
107
+ pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }),
108
+ },
109
+ });
110
+ }
111
+ catch (e) {
112
+ console.log('Error in telemetry audit', e);
113
+ }
114
+ };
115
+ TelemetryService.prototype.heartbeat = function (type, id) {
116
+ try {
117
+ $t.heartbeat({
118
+ id: id,
119
+ type: type,
120
+ });
121
+ }
122
+ catch (e) {
123
+ console.log('Error in telemetry heartbeat', e);
124
+ }
125
+ };
126
+ TelemetryService.prototype.impression = function (data) {
127
+ try {
128
+ var page = this.getPageDetails();
129
+ if (data) {
130
+ page.pageid = data.pageId;
131
+ page.module = data.module;
132
+ }
133
+ var edata = {
134
+ pageid: page.pageid,
135
+ type: page.pageUrlParts[0],
136
+ uri: page.pageUrl,
137
+ };
138
+ if (page.objectId) {
139
+ var config = {
140
+ context: {
141
+ pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }),
142
+ env: page.module || (this.telemetryConfig && this.telemetryConfig.env),
143
+ },
144
+ object: {
145
+ id: page.objectId,
146
+ },
147
+ };
148
+ $t.impression(edata, config);
149
+ }
150
+ else {
151
+ $t.impression(edata, {
152
+ context: {
153
+ pdata: tslib_1.__assign({}, this.pData, { id: this.pData.id }),
154
+ env: page.module || '',
155
+ },
156
+ });
157
+ }
158
+ this.previousUrl = page.pageUrl;
159
+ }
160
+ catch (e) {
161
+ console.log('Error in telemetry impression', e);
162
+ }
163
+ };
164
+ TelemetryService.prototype.externalImpression = function (impressionData) {
165
+ try {
166
+ var page = this.getPageDetails();
167
+ if (this.externalApps[impressionData.subApplicationName]) {
168
+ var externalConfig = page.objectId ? {
169
+ context: {
170
+ pdata: tslib_1.__assign({}, this.pData, { id: this.externalApps[impressionData.subApplicationName] }),
171
+ },
172
+ object: {
173
+ id: page.objectId,
174
+ },
175
+ } : {
176
+ context: {
177
+ pdata: tslib_1.__assign({}, this.pData, { id: this.externalApps[impressionData.subApplicationName] }),
178
+ },
179
+ };
180
+ $t.impression(impressionData.data, externalConfig);
181
+ }
182
+ }
183
+ catch (e) {
184
+ console.log('Error in telemetry externalImpression', e);
185
+ }
186
+ };
187
+ TelemetryService.prototype.addTimeSpentListener = function () {
188
+ var _this = this;
189
+ this.eventsSvc.events$
190
+ .pipe(filter((function (event) {
191
+ return event &&
192
+ event.eventType === WsEvents.WsEventType.Telemetry &&
193
+ event.data.type === WsEvents.WsTimeSpentType.Page &&
194
+ event.data.mode &&
195
+ event.data;
196
+ })))
197
+ .subscribe((function (event) {
198
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
199
+ _this.start(event.data.type || WsEvents.WsTimeSpentType.Page, event.data.mode || WsEvents.WsTimeSpentMode.View, event.data.pageId);
200
+ }
201
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded) {
202
+ _this.end(event.data.type || WsEvents.WsTimeSpentType.Page, event.data.mode || WsEvents.WsTimeSpentMode.View, event.data.pageId);
203
+ }
204
+ }));
205
+ };
206
+ TelemetryService.prototype.addPlayerListener = function () {
207
+ var _this = this;
208
+ this.eventsSvc.events$
209
+ .pipe(filter((function (event) {
210
+ return event &&
211
+ event.eventType === WsEvents.WsEventType.Telemetry &&
212
+ event.data.type === WsEvents.WsTimeSpentType.Player &&
213
+ event.data.mode &&
214
+ event.data;
215
+ })))
216
+ .subscribe((function (event) {
217
+ var content = event.data.content;
218
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded &&
219
+ (!content ||
220
+ (content.isIframeSupported || '').toLowerCase() === 'maybe' ||
221
+ (content.isIframeSupported || '').toLowerCase() === 'yes')) {
222
+ _this.start(event.data.type || WsEvents.WsTimeSpentType.Player, event.data.mode || WsEvents.WsTimeSpentMode.Play, event.data.identifier, event.data.object);
223
+ }
224
+ if (event.data.state === WsEvents.EnumTelemetrySubType.Unloaded &&
225
+ (!content ||
226
+ (content.isIframeSupported || '').toLowerCase() === 'maybe' ||
227
+ (content.isIframeSupported || '').toLowerCase() === 'yes')) {
228
+ _this.end(event.data.type || WsEvents.WsTimeSpentType.Player, event.data.mode || WsEvents.WsTimeSpentMode.Play, event.data.identifier, event.data.object);
229
+ }
230
+ }));
231
+ };
232
+ TelemetryService.prototype.addInteractListener = function () {
233
+ var _this = this;
234
+ this.eventsSvc.events$
235
+ .pipe(filter((function (event) {
236
+ return event &&
237
+ event.data &&
238
+ event.eventType === WsEvents.WsEventType.Telemetry &&
239
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.Interact;
240
+ })))
241
+ .subscribe((function (event) {
242
+ var page = _this.getPageDetails();
243
+ if (typeof event.from === 'string' && _this.externalApps[event.from]) {
244
+ var externalConfig = {
245
+ context: {
246
+ pdata: tslib_1.__assign({}, _this.pData, { id: _this.externalApps[event.from] }),
247
+ },
248
+ };
249
+ try {
250
+ $t.interact(event.data, externalConfig);
251
+ }
252
+ catch (e) {
253
+ console.log('Error in telemetry interact', e);
254
+ }
255
+ }
256
+ else {
257
+ try {
258
+ $t.interact({
259
+ type: event.data.edata.type,
260
+ subtype: event.data.edata.subType,
261
+ id: (event.data.edata && event.data.edata.id) ?
262
+ event.data.edata.id
263
+ : '',
264
+ pageid: event.data.context && event.data.context.pageId || page.pageid,
265
+ }, {
266
+ context: tslib_1.__assign({ pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }) }, (event.data.context && event.data.context.module ? { env: event.data.context.module } : null)),
267
+ object: tslib_1.__assign({}, event.data.object),
268
+ });
269
+ }
270
+ catch (e) {
271
+ console.log('Error in telemetry interact', e);
272
+ }
273
+ }
274
+ }));
275
+ };
276
+ TelemetryService.prototype.addFeedbackListener = function () {
277
+ var _this = this;
278
+ this.eventsSvc.events$
279
+ .pipe(filter((function (event) {
280
+ return event &&
281
+ event.data &&
282
+ event.eventType === WsEvents.WsEventType.Telemetry &&
283
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.Feedback;
284
+ })))
285
+ .subscribe((function (event) {
286
+ var page = _this.getPageDetails();
287
+ try {
288
+ $t.feedback({
289
+ rating: event.data.object.rating || 0,
290
+ commentid: event.data.object.commentid || '',
291
+ commenttxt: event.data.object.commenttxt || '',
292
+ pageid: page.pageid,
293
+ }, {
294
+ context: {
295
+ pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }),
296
+ },
297
+ object: {
298
+ id: event.data.object.contentId || event.data.object.id || '',
299
+ type: event.data.edata.type || '',
300
+ ver: "" + (event.data.object.version || '1') + '',
301
+ rollup: {},
302
+ },
303
+ });
304
+ }
305
+ catch (e) {
306
+ console.log('Error in telemetry interact', e);
307
+ }
308
+ }));
309
+ };
310
+ TelemetryService.prototype.addCustomImpressionListener = function () {
311
+ var _this = this;
312
+ this.eventsSvc.events$
313
+ .pipe(filter((function (event) {
314
+ return event &&
315
+ event.data &&
316
+ event.eventType === WsEvents.WsEventType.Telemetry &&
317
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.Impression;
318
+ })))
319
+ .subscribe((function (event) {
320
+ try {
321
+ _this.impression(event.data.context);
322
+ }
323
+ catch (e) {
324
+ console.log('Error in telemetry impression', e);
325
+ }
326
+ }));
327
+ };
328
+ TelemetryService.prototype.addHearbeatListener = function () {
329
+ var _this = this;
330
+ this.eventsSvc.events$
331
+ .pipe(filter((function (event) {
332
+ return event &&
333
+ event.data &&
334
+ event.eventType === WsEvents.WsEventType.Telemetry &&
335
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.HeartBeat;
336
+ })))
337
+ .subscribe((function (event) {
338
+ if (typeof event.from === 'string' && _this.externalApps[event.from]) {
339
+ var externalConfig = {
340
+ context: {
341
+ pdata: tslib_1.__assign({}, _this.pData, { id: _this.externalApps[event.from] }),
342
+ },
343
+ };
344
+ try {
345
+ $t.heartbeat(event.data, externalConfig);
346
+ }
347
+ catch (e) {
348
+ console.log('Error in telemetry heartbeat', e);
349
+ }
350
+ }
351
+ else {
352
+ try {
353
+ $t.heartbeat({
354
+ type: event.data.type,
355
+ id: event.data.id,
356
+ }, {
357
+ context: {
358
+ pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }),
359
+ },
360
+ });
361
+ }
362
+ catch (e) {
363
+ console.log('Error in telemetry heartbeat', e);
364
+ }
365
+ }
366
+ }));
367
+ };
368
+ TelemetryService.prototype.addSearchListener = function () {
369
+ var _this = this;
370
+ this.eventsSvc.events$
371
+ .pipe(filter((function (event) {
372
+ return event &&
373
+ event.data &&
374
+ event.eventType === WsEvents.WsEventType.Telemetry &&
375
+ event.data.eventSubType === WsEvents.EnumTelemetrySubType.Search;
376
+ })))
377
+ .subscribe((function (event) {
378
+ try {
379
+ $t.search({
380
+ query: event.data.query,
381
+ filters: event.data.filters,
382
+ size: event.data.size,
383
+ }, {
384
+ context: {
385
+ pdata: tslib_1.__assign({}, _this.pData, { id: _this.pData.id }),
386
+ },
387
+ });
388
+ }
389
+ catch (e) {
390
+ console.log('Error in telemetry search', e);
391
+ }
392
+ }));
393
+ };
394
+ TelemetryService.prototype.getPageDetails = function () {
395
+ var path = window.location.pathname.replace('/', '');
396
+ var url = path + window.location.search;
397
+ return {
398
+ pageid: path,
399
+ pageUrl: url,
400
+ pageUrlParts: path.split('/'),
401
+ refferUrl: this.previousUrl,
402
+ objectId: this.extractContentIdFromUrlParts(path.split('/')),
403
+ module: '',
404
+ };
405
+ };
406
+ TelemetryService.prototype.extractContentIdFromUrlParts = function (urlParts) {
407
+ var tocIdx = urlParts.indexOf('toc');
408
+ var viewerIdx = urlParts.indexOf('viewer');
409
+ if (tocIdx === -1 && viewerIdx === -1) {
410
+ return null;
411
+ }
412
+ if (tocIdx !== -1 && tocIdx < urlParts.length - 1) {
413
+ return urlParts[tocIdx + 1];
414
+ }
415
+ if (viewerIdx !== -1 && viewerIdx < urlParts.length - 2) {
416
+ return urlParts[viewerIdx + 2];
417
+ }
418
+ return null;
419
+ };
420
+ TelemetryService.decorators = [
421
+ { type: Injectable, args: [{
422
+ providedIn: 'root',
423
+ },] }
424
+ ];
425
+ TelemetryService.ctorParameters = function () { return [
426
+ { type: ConfigurationsService },
427
+ { type: EventService },
428
+ { type: LoggerService },
429
+ { type: undefined, decorators: [{ type: Inject, args: ['environment',] }] }
430
+ ]; };
431
+ /** @nocollapse */ TelemetryService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function TelemetryService_Factory() { return new TelemetryService(i0.ɵɵinject(i1.ConfigurationsService), i0.ɵɵinject(i2.EventService), i0.ɵɵinject(i3.LoggerService), i0.ɵɵinject("environment")); }, token: TelemetryService, providedIn: "root" });
432
+ return TelemetryService;
433
+ }());
434
+ export { TelemetryService };
435
+ if (false) {
436
+ TelemetryService.prototype.previousUrl;
437
+ TelemetryService.prototype.telemetryConfig;
438
+ TelemetryService.prototype.pData;
439
+ TelemetryService.prototype.contextCdata;
440
+ TelemetryService.prototype.environment;
441
+ TelemetryService.prototype.externalApps;
442
+ TelemetryService.prototype.configSvc;
443
+ TelemetryService.prototype.eventsSvc;
444
+ TelemetryService.prototype.logger;
445
+ }
446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1jYi91dGlscy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBR3ZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTs7Ozs7QUFLaEQ7SUFhRSwwQkFDVSxTQUFnQyxFQUNoQyxTQUF1QixFQUV2QixNQUFxQixFQUNOLFdBQWdCO1FBSi9CLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFFdkIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQWIvQixnQkFBVyxHQUFrQixJQUFJLENBQUE7UUFDakMsb0JBQWUsR0FBNkMsSUFBSSxDQUFBO1FBQ2hFLFVBQUssR0FBUSxJQUFJLENBQUE7UUFDakIsaUJBQVksR0FBRyxFQUFFLENBQUE7UUFHakIsaUJBQVksR0FBUTtZQUNsQixJQUFJLEVBQUUsYUFBYTtTQUNwQixDQUFBO1lBUU8sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYztRQUNwRCxJQUFJLGNBQWMsRUFBRTtZQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUE7WUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7WUFDOUIsSUFBSSxDQUFDLGVBQWUsd0JBQ2YsSUFBSSxDQUFDLGVB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S0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQTtJQUNILENBQUM7SUFFRCx1REFBNEIsR0FBNUIsVUFBNkIsUUFBa0I7WUFFdkMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2hDLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUU1QyxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7U0FDNUI7UUFFRCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsT0FBTyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQy9CO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDOztnQkEzaUJGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OztnQkFWUSxxQkFBcUI7Z0JBRXJCLFlBQVk7Z0JBQ1osYUFBYTtnREF1QmpCLE1BQU0sU0FBQyxhQUFhOzs7MkJBOUJ6QjtDQXdqQkMsQUE1aUJELElBNGlCQztTQXppQlksZ0JBQWdCOztJQUMzQix1Q0FBaUM7SUFDakMsMkNBQWdFO0lBQ2hFLGlDQUFpQjtJQUNqQix3Q0FBaUI7SUFDakIsdUNBQWdCO0lBRWhCLHdDQUVDO0lBRUMscUNBQXdDO0lBQ3hDLHFDQUErQjtJQUUvQixrQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuLy8gaW1wb3J0IHsgQXV0aEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vYXV0aC1rZXljbG9hay5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBOc0luc3RhbmNlQ29uZmlnIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5tb2RlbCdcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBXc0V2ZW50cyB9IGZyb20gJy4vZXZlbnQubW9kZWwnXHJcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4vZXZlbnQuc2VydmljZSdcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vbG9nZ2VyLnNlcnZpY2UnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbnRlbnQubW9kZWwnXHJcblxyXG5kZWNsYXJlIHZhciAkdDogYW55XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XHJcbiAgcHJldmlvdXNVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXHJcbiAgdGVsZW1ldHJ5Q29uZmlnOiBOc0luc3RhbmNlQ29uZmlnLklUZWxlbWV0cnlDb25maWcgfCBudWxsID0gbnVsbFxyXG4gIHBEYXRhOiBhbnkgPSBudWxsXHJcbiAgY29udGV4dENkYXRhID0gW11cclxuICBlbnZpcm9ubWVudDogYW55XHJcblxyXG4gIGV4dGVybmFsQXBwczogYW55ID0ge1xyXG4gICAgUkJDUDogJ3JiY3Atd2ViLXVpJyxcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBldmVudHNTdmM6IEV2ZW50U2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgYXV0aFN2YzogQXV0aEtleWNsb2FrU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxyXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgaW5zdGFuY2VDb25maWcgPSB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZ1xyXG4gICAgaWYgKGluc3RhbmNlQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMudGVsZW1ldHJ5Q29uZmlnID0gaW5zdGFuY2VDb25maWcudGVsZW1ldHJ5Q29uZmlnXHJcbiAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxyXG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyA9IHtcclxuICAgICAgICAuLi50aGlzLnRlbGVtZXRyeUNvbmZpZyxcclxuICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgLi4udGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGEsXHJcbiAgICAgICAgICAvLyBwaWQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgICAgICBpZDogYCR7ZW52aXJvbm1lbnQubmFtZX0uJHt0aGlzLnRlbGVtZXRyeUNvbmZpZy5wZGF0YS5pZH1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdWlkOiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQsXHJcbiAgICAgICAgLy8gYXV0aHRva2VuOiB0aGlzLmF1dGhTdmMudG9rZW4sXHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBjaGFubmVsOiB0aGlzLnJvb3RPcmdJZCB8fCB0aGlzLnRlbGVtZXRyeUNvbmZpZy5jaGFubmVsLFxyXG4gICAgICAgIHNpZDogdGhpcy5nZXRUZWxlbWV0cnlTZXNzaW9uSWQsXHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucERhdGEgPSB0aGlzLnRlbGVtZXRyeUNvbmZpZy5wZGF0YVxyXG4gICAgICB0aGlzLmFkZFBsYXllckxpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRJbnRlcmFjdExpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRGZWVkYmFja0xpc3RlbmVyKClcclxuICAgICAgdGhpcy5hZGRUaW1lU3BlbnRMaXN0ZW5lcigpXHJcbiAgICAgIHRoaXMuYWRkU2VhcmNoTGlzdGVuZXIoKVxyXG4gICAgICB0aGlzLmFkZEhlYXJiZWF0TGlzdGVuZXIoKVxyXG4gICAgICB0aGlzLmFkZEN1c3RvbUltcHJlc3Npb25MaXN0ZW5lcigpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0VGVsZW1ldHJ5U2Vzc2lvbklkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGVtZXRyeVNlc3Npb25JZCcpIHx8ICcnXHJcbiAgfVxyXG5cclxuICBnZXQgcm9vdE9yZ0lkKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5jb25maWdTdmMgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWRcclxuICAgIH1cclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgc3RhcnQodHlwZTogc3RyaW5nLCBtb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRhdGE/OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnRlbGVtZXRyeUNvbmZpZykge1xyXG4gICAgICAgICR0LnN0YXJ0KFxyXG4gICAgICAgICAgdGhpcy50ZWxlbWV0cnlDb25maWcsXHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgICcxLjAnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBpZCxcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgbW9kZSxcclxuICAgICAgICAgICAgcGFnZWlkOiBpZCxcclxuICAgICAgICAgICAgZHVyYXRpb246IDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudjogJ2hvbWUnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAuLi4oZGF0YSkgJiYgZGF0YSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIEluaXRpYWxpemluZyBUZWxlbWV0cnkuIENvbmZpZyBtaXNzaW5nLicpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgc3RhcnQnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kKHR5cGU6IHN0cmluZywgbW9kZTogc3RyaW5nLCBpZDogc3RyaW5nLCBkYXRhPzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAkdC5lbmQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIG1vZGUsXHJcbiAgICAgICAgICBwYWdlaWQ6IGlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgIC4uLihkYXRhKSAmJiBkYXRhLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICApXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGVuZCcsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhdWRpdCh0eXBlOiBzdHJpbmcsIHByb3BzOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgJHQuYXVkaXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIHByb3BzLFxyXG4gICAgICAgICAgLy8gZGF0YSxcclxuICAgICAgICAgIHN0YXRlOiBkYXRhLCAvLyBPcHRpb25hbC4gQ3VycmVudCBTdGF0ZVxyXG4gICAgICAgICAgcHJldnN0YXRlOiAnJywgLy8gT3B0aW9uYWwuIFByZXZpb3VzIFN0YXRlXHJcbiAgICAgICAgICBkdXJhdGlvbjogJycsIC8vIE9wdGlvbmFsLlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgYXVkaXQnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGVhcnRiZWF0KHR5cGU6IHN0cmluZywgaWQ6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgJHQuaGVhcnRiZWF0KHtcclxuICAgICAgICBpZCxcclxuICAgICAgICAvLyBtb2RlLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgIH0pXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGhlYXJ0YmVhdCcsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbXByZXNzaW9uKGRhdGE/OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VEZXRhaWxzKClcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICBwYWdlLnBhZ2VpZCA9IGRhdGEucGFnZUlkXHJcbiAgICAgICAgcGFnZS5tb2R1bGUgPSBkYXRhLm1vZHVsZVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVkYXRhID0ge1xyXG4gICAgICAgIHBhZ2VpZDogcGFnZS5wYWdlaWQsIC8vIFJlcXVpcmVkLiBVbmlxdWUgcGFnZSBpZFxyXG4gICAgICAgIHR5cGU6IHBhZ2UucGFnZVVybFBhcnRzWzBdLCAvLyBSZXF1aXJlZC4gSW1wcmVzc2lvbiB0eXBlIChsaXN0LCBkZXRhaWwsIHZpZXcsIGVkaXQsIHdvcmtmbG93LCBzZWFyY2gpXHJcbiAgICAgICAgdXJpOiBwYWdlLnBhZ2VVcmwsXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhZ2Uub2JqZWN0SWQpIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW52OiBwYWdlLm1vZHVsZSB8fCAodGhpcy50ZWxlbWV0cnlDb25maWcgJiYgdGhpcy50ZWxlbWV0cnlDb25maWcuZW52KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgaWQ6IHBhZ2Uub2JqZWN0SWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgICAkdC5pbXByZXNzaW9uKGVkYXRhLCBjb25maWcpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJHQuaW1wcmVzc2lvbihlZGF0YSwge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVudjogcGFnZS5tb2R1bGUgfHwgJycsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmV2aW91c1VybCA9IHBhZ2UucGFnZVVybFxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbXByZXNzaW9uJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dGVybmFsSW1wcmVzc2lvbihpbXByZXNzaW9uRGF0YTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgIGlmICh0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSBwYWdlLm9iamVjdElkID8ge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgIGlkOiBwYWdlLm9iamVjdElkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9IDoge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgICAkdC5pbXByZXNzaW9uKGltcHJlc3Npb25EYXRhLmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGV4dGVybmFsSW1wcmVzc2lvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUaW1lU3BlbnRMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgZXZlbnQgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS50eXBlID09PSBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGFnZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmIChldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGFnZSxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5WaWV3LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnBhZ2VJZCxcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZChcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QYWdlLFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlZpZXcsXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEucGFnZUlkLFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcbiAgYWRkUGxheWVyTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSA9PT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllciAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBldmVudC5kYXRhLmNvbnRlbnRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQgJiZcclxuICAgICAgICAgICghY29udGVudCB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ21heWJlJyB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0KFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkICYmXHJcbiAgICAgICAgICAoIWNvbnRlbnQgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdtYXliZScgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuaWRlbnRpZmllcixcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3RcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRJbnRlcmFjdExpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdCkgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3QsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5mcm9tID09PSAnc3RyaW5nJyAmJiB0aGlzLmV4dGVybmFsQXBwc1tldmVudC5mcm9tXSkge1xyXG4gICAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tldmVudC5mcm9tXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgJHQuaW50ZXJhY3QoZXZlbnQuZGF0YSwgZXh0ZXJuYWxDb25maWcpXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGludGVyYWN0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gbGV0IGludGVyYWN0aWRcclxuICAgICAgICAgIC8vIGlmIChldmVudC5kYXRhLmVkYXRhLnR5cGUgPT09ICdnb2FsJykge1xyXG4gICAgICAgICAgLy8gICBpbnRlcmFjdGlkID0gcGFnZS5wYWdlVXJsUGFydHNbNF1cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmludGVyYWN0KFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEuZWRhdGEudHlwZSxcclxuICAgICAgICAgICAgICAgIHN1YnR5cGU6IGV2ZW50LmRhdGEuZWRhdGEuc3ViVHlwZSxcclxuICAgICAgICAgICAgICAgIC8vIG9iamVjdDogZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICBpZDogKGV2ZW50LmRhdGEuZWRhdGEgJiYgZXZlbnQuZGF0YS5lZGF0YS5pZCkgP1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuZWRhdGEuaWRcclxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgICAgcGFnZWlkOiBldmVudC5kYXRhLmNvbnRleHQgJiYgZXZlbnQuZGF0YS5jb250ZXh0LnBhZ2VJZCB8fCAgcGFnZS5wYWdlaWQsXHJcbiAgICAgICAgICAgICAgICAvLyB0YXJnZXQ6IHsgcGFnZSB9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIC4uLihldmVudC5kYXRhLmNvbnRleHQgJiYgZXZlbnQuZGF0YS5jb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5kYXRhLmNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAgICAgLi4uZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGludGVyYWN0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRGZWVkYmFja0xpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlGZWVkYmFjaykgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuRmVlZGJhY2ssXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICR0LmZlZWRiYWNrKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcmF0aW5nOiBldmVudC5kYXRhLm9iamVjdC5yYXRpbmcgfHwgMCxcclxuICAgICAgICAgICAgICBjb21tZW50aWQ6IGV2ZW50LmRhdGEub2JqZWN0LmNvbW1lbnRpZCB8fCAnJyxcclxuICAgICAgICAgICAgICBjb21tZW50dHh0OiBldmVudC5kYXRhLm9iamVjdC5jb21tZW50dHh0IHx8ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogcGFnZS5wYWdlaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAgIGlkOiBldmVudC5kYXRhLm9iamVjdC5jb250ZW50SWQgfHwgZXZlbnQuZGF0YS5vYmplY3QuaWQgfHwgJycsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICB2ZXI6IGAkeyhldmVudC5kYXRhLm9iamVjdC52ZXJzaW9uIHx8ICcxJyl9JHsnJ31gLFxyXG4gICAgICAgICAgICAgICAgcm9sbHVwOiB7fSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbnRlcmFjdCcsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkQ3VzdG9tSW1wcmVzc2lvbkxpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlJbXByZXNzaW9uKSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbXByZXNzaW9uLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdldmVudC5kYXRhOjonLCBldmVudC5kYXRhKVxyXG4gICAgICAgICAgdGhpcy5pbXByZXNzaW9uKGV2ZW50LmRhdGEuY29udGV4dClcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW1wcmVzc2lvbicsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkSGVhcmJlYXRMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5SGVhcnRCZWF0KSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5IZWFydEJlYXQsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmZyb20gPT09ICdzdHJpbmcnICYmIHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dKSB7XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbENvbmZpZyA9IHtcclxuICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkdC5oZWFydGJlYXQoZXZlbnQuZGF0YSwgZXh0ZXJuYWxDb25maWcpXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGhlYXJ0YmVhdCcsIGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmhlYXJ0YmVhdChcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAvLyBzdWJ0eXBlOiBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSxcclxuICAgICAgICAgICAgICAgIGlkOiBldmVudC5kYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgLy8gbWltZVR5cGU6IGV2ZW50LmRhdGEubWltZVR5cGUsXHJcbiAgICAgICAgICAgICAgICAvLyBtb2RlOiBldmVudC5kYXRhLm1vZGUsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaGVhcnRiZWF0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRTZWFyY2hMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5U2VhcmNoKSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5TZWFyY2gsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgJHQuc2VhcmNoKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcXVlcnk6IGV2ZW50LmRhdGEucXVlcnksXHJcbiAgICAgICAgICAgICAgZmlsdGVyczogZXZlbnQuZGF0YS5maWx0ZXJzLFxyXG4gICAgICAgICAgICAgIHNpemU6IGV2ZW50LmRhdGEuc2l6ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBzZWFyY2gnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldFBhZ2VEZXRhaWxzKCkge1xyXG4gICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKCcvJywgJycpXHJcbiAgICBjb25zdCB1cmwgPSBwYXRoICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFnZWlkOiBwYXRoLFxyXG4gICAgICBwYWdlVXJsOiB1cmwsXHJcbiAgICAgIHBhZ2VVcmxQYXJ0czogcGF0aC5zcGxpdCgnLycpLFxyXG4gICAgICByZWZmZXJVcmw6IHRoaXMucHJldmlvdXNVcmwsXHJcbiAgICAgIG9iamVjdElkOiB0aGlzLmV4dHJhY3RDb250ZW50SWRGcm9tVXJsUGFydHMocGF0aC5zcGxpdCgnLycpKSxcclxuICAgICAgbW9kdWxlOiAnJyxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dHJhY3RDb250ZW50SWRGcm9tVXJsUGFydHModXJsUGFydHM6IHN0cmluZ1tdKSB7XHJcbiAgICAvLyBUT0RPOiBwaWNrIHRvYyBhbmQgdmlld2VyIHVybCBmcm9tIHNvbWUgY29uZmlndXJhdGlvblxyXG4gICAgY29uc3QgdG9jSWR4ID0gdXJsUGFydHMuaW5kZXhPZigndG9jJylcclxuICAgIGNvbnN0IHZpZXdlcklkeCA9IHVybFBhcnRzLmluZGV4T2YoJ3ZpZXdlcicpXHJcblxyXG4gICAgaWYgKHRvY0lkeCA9PT0gLTEgJiYgdmlld2VySWR4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0b2NJZHggIT09IC0xICYmIHRvY0lkeCA8IHVybFBhcnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgcmV0dXJuIHVybFBhcnRzW3RvY0lkeCArIDFdIC8vIGUuZy4gdXJsIC9hcHAvdG9jLzxjb250ZW50X2lkPlxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2aWV3ZXJJZHggIT09IC0xICYmIHZpZXdlcklkeCA8IHVybFBhcnRzLmxlbmd0aCAtIDIpIHtcclxuICAgICAgcmV0dXJuIHVybFBhcnRzW3ZpZXdlcklkeCArIDJdIC8vIGUuZy4gdXJsIC9hcHAvdmlld2VyLzxjb250ZW50X3R5cGU+Lzxjb250ZW50X2lkPlxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG59XHJcbiJdfQ==