@sunbird-cb/utils 1.0.19-ang-13-16 → 1.0.20-ang-13-16

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 (163) hide show
  1. package/esm2022/lib/components/image-crop/image-crop.component.mjs +172 -0
  2. package/esm2022/lib/components/image-crop/image-crop.module.mjs +55 -0
  3. package/esm2022/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.mjs +87 -0
  4. package/esm2022/lib/directives/class-change-on-scroll/class-change-on-scroll.module.mjs +20 -0
  5. package/{esm2015/lib/directives/default-thumbnail/default-thumbnail.directive.js → esm2022/lib/directives/default-thumbnail/default-thumbnail.directive.mjs} +4 -4
  6. package/esm2022/lib/directives/default-thumbnail/default-thumbnail.module.mjs +20 -0
  7. package/{esm2015/lib/directives/image-responsive/image-responsive.directive.js → esm2022/lib/directives/image-responsive/image-responsive.directive.mjs} +4 -4
  8. package/esm2022/lib/directives/image-responsive/image-responsive.module.mjs +20 -0
  9. package/{esm2015/lib/directives/in-view-port/in-view-port.directive.js → esm2022/lib/directives/in-view-port/in-view-port.directive.mjs} +4 -4
  10. package/esm2022/lib/directives/in-view-port/in-view-port.module.mjs +20 -0
  11. package/esm2022/lib/directives/navigation/navigation.directive.mjs +43 -0
  12. package/esm2022/lib/directives/navigation/navigation.module.mjs +20 -0
  13. package/{esm2015/lib/directives/permission/permission.directive.js → esm2022/lib/directives/permission/permission.directive.mjs} +4 -4
  14. package/esm2022/lib/directives/permission/permission.module.mjs +20 -0
  15. package/esm2022/lib/helpers/horizontal-scroller/horizontal-scroller.component.mjs +96 -0
  16. package/esm2022/lib/helpers/horizontal-scroller/horizontal-scroller.module.mjs +32 -0
  17. package/esm2022/lib/helpers/logout/logout.component.mjs +44 -0
  18. package/esm2022/lib/helpers/logout/logout.module.mjs +27 -0
  19. package/esm2022/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.mjs +18 -0
  20. package/{esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js → esm2022/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.mjs} +4 -4
  21. package/esm2022/lib/pipes/pipe-count-transform/pipe-count-transform.module.mjs +20 -0
  22. package/{esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js → esm2022/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.mjs} +4 -4
  23. package/esm2022/lib/pipes/pipe-date-concat/pipe-date-concat.module.mjs +20 -0
  24. package/{esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js → esm2022/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.mjs} +4 -4
  25. package/esm2022/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.mjs +20 -0
  26. package/{esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js → esm2022/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.mjs} +4 -4
  27. package/esm2022/lib/pipes/pipe-filter/pipe-filter.module.mjs +20 -0
  28. package/{esm2015/lib/pipes/pipe-filter/pipe-filter.pipe.js → esm2022/lib/pipes/pipe-filter/pipe-filter.pipe.mjs} +4 -4
  29. package/esm2022/lib/pipes/pipe-filter-search/pipe-filter-search.module.mjs +20 -0
  30. package/{esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js → esm2022/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.mjs} +4 -4
  31. package/esm2022/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.mjs +20 -0
  32. package/{esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js → esm2022/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.mjs} +4 -4
  33. package/esm2022/lib/pipes/pipe-limit-to/pipe-limit-to.module.mjs +20 -0
  34. package/{esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js → esm2022/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.mjs} +4 -4
  35. package/esm2022/lib/pipes/pipe-list-filter/pipe-list-filter.module.mjs +20 -0
  36. package/{esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js → esm2022/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.mjs} +4 -4
  37. package/esm2022/lib/pipes/pipe-name-transform/pipe-name-transform.module.mjs +20 -0
  38. package/{esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js → esm2022/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.mjs} +4 -4
  39. package/esm2022/lib/pipes/pipe-order-by/pipe-order-by.module.mjs +20 -0
  40. package/{esm2015/lib/pipes/pipe-order-by/pipe-order-by.pipe.js → esm2022/lib/pipes/pipe-order-by/pipe-order-by.pipe.mjs} +4 -4
  41. package/esm2022/lib/pipes/pipe-partial-content/pipe-partial-content.module.mjs +20 -0
  42. package/{esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js → esm2022/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.mjs} +4 -4
  43. package/esm2022/lib/pipes/pipe-relative-time/pipe-relative-time.module.mjs +20 -0
  44. package/{esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js → esm2022/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.mjs} +4 -4
  45. package/esm2022/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.mjs +20 -0
  46. package/{esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js → esm2022/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.mjs} +4 -4
  47. package/{esm2015/lib/resolvers/explore-detail.resolver.js → esm2022/lib/resolvers/explore-detail.resolver.mjs} +4 -4
  48. package/{esm2015/lib/resolvers/marketing-offering.resolve.js → esm2022/lib/resolvers/marketing-offering.resolve.mjs} +4 -4
  49. package/{esm2015/lib/resolvers/page.resolver.js → esm2022/lib/resolvers/page.resolver.mjs} +4 -4
  50. package/esm2022/lib/services/auth-keycloak.service.mjs +52 -0
  51. package/esm2022/lib/services/auth-microsoft.service.mjs +173 -0
  52. package/{esm2015/lib/services/configurations.service.js → esm2022/lib/services/configurations.service.mjs} +4 -4
  53. package/esm2022/lib/services/event.service.mjs +204 -0
  54. package/{esm2015/lib/services/logger.service.js → esm2022/lib/services/logger.service.mjs} +4 -4
  55. package/esm2022/lib/services/subapplication-respond.service.mjs +76 -0
  56. package/esm2022/lib/services/telemetry.service.mjs +502 -0
  57. package/esm2022/lib/services/user-preference.service.mjs +92 -0
  58. package/{esm2015/lib/services/utility.service.js → esm2022/lib/services/utility.service.mjs} +4 -4
  59. package/{esm2015/lib/services/value.service.js → esm2022/lib/services/value.service.mjs} +4 -4
  60. package/esm2022/lib/services/widget-content.service.mjs +182 -0
  61. package/{fesm2015/sunbird-cb-utils.js → fesm2022/sunbird-cb-utils.mjs} +573 -545
  62. package/fesm2022/sunbird-cb-utils.mjs.map +1 -0
  63. package/lib/components/image-crop/image-crop.component.d.ts +3 -3
  64. package/lib/components/image-crop/image-crop.component.d.ts.map +1 -1
  65. package/lib/components/image-crop/image-crop.module.d.ts +6 -6
  66. package/lib/components/image-crop/image-crop.module.d.ts.map +1 -1
  67. package/lib/constants/misc.constants.d.ts +2 -2
  68. package/lib/constants/misc.constants.d.ts.map +1 -1
  69. package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts +1 -1
  70. package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts +1 -1
  71. package/lib/directives/image-responsive/image-responsive.directive.d.ts +1 -1
  72. package/lib/directives/in-view-port/in-view-port.directive.d.ts +1 -1
  73. package/lib/directives/navigation/navigation.directive.d.ts +1 -1
  74. package/lib/directives/permission/permission.directive.d.ts +1 -1
  75. package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts +1 -1
  76. package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts +3 -3
  77. package/lib/helpers/logout/logout.component.d.ts +2 -2
  78. package/lib/helpers/logout/logout.component.d.ts.map +1 -1
  79. package/lib/helpers/logout/logout.module.d.ts +3 -3
  80. package/lib/helpers/logout/logout.module.d.ts.map +1 -1
  81. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts +1 -1
  82. package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts +1 -1
  83. package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts +1 -1
  84. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +1 -1
  85. package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts +1 -1
  86. package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts +1 -1
  87. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts +1 -1
  88. package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts +1 -1
  89. package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts +1 -1
  90. package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts +1 -1
  91. package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts +5 -5
  92. package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts +1 -1
  93. package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts +1 -1
  94. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts +1 -1
  95. package/lib/resolvers/explore-detail.resolver.d.ts +2 -2
  96. package/lib/resolvers/explore-detail.resolver.d.ts.map +1 -1
  97. package/lib/resolvers/marketing-offering.resolve.d.ts +2 -2
  98. package/lib/resolvers/marketing-offering.resolve.d.ts.map +1 -1
  99. package/lib/resolvers/page.resolver.d.ts +2 -2
  100. package/lib/resolvers/page.resolver.d.ts.map +1 -1
  101. package/lib/services/widget-resolver.model.d.ts +1 -1
  102. package/lib/services/widget-resolver.model.d.ts.map +1 -1
  103. package/package.json +26 -18
  104. package/sunbird-cb-utils-1.0.20-ang-13-16.tgz +0 -0
  105. package/bundles/sunbird-cb-utils.umd.js +0 -4785
  106. package/bundles/sunbird-cb-utils.umd.js.map +0 -1
  107. package/esm2015/lib/components/image-crop/image-crop.component.js +0 -166
  108. package/esm2015/lib/components/image-crop/image-crop.module.js +0 -58
  109. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +0 -87
  110. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +0 -22
  111. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.module.js +0 -22
  112. package/esm2015/lib/directives/image-responsive/image-responsive.module.js +0 -22
  113. package/esm2015/lib/directives/in-view-port/in-view-port.module.js +0 -22
  114. package/esm2015/lib/directives/navigation/navigation.directive.js +0 -43
  115. package/esm2015/lib/directives/navigation/navigation.module.js +0 -22
  116. package/esm2015/lib/directives/permission/permission.module.js +0 -22
  117. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +0 -100
  118. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +0 -34
  119. package/esm2015/lib/helpers/logout/logout.component.js +0 -48
  120. package/esm2015/lib/helpers/logout/logout.module.js +0 -30
  121. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +0 -18
  122. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +0 -22
  123. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +0 -22
  124. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +0 -22
  125. package/esm2015/lib/pipes/pipe-filter/pipe-filter.module.js +0 -22
  126. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +0 -22
  127. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +0 -22
  128. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +0 -22
  129. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +0 -22
  130. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +0 -22
  131. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.module.js +0 -22
  132. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +0 -22
  133. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +0 -22
  134. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +0 -22
  135. package/esm2015/lib/services/auth-keycloak.service.js +0 -57
  136. package/esm2015/lib/services/auth-microsoft.service.js +0 -184
  137. package/esm2015/lib/services/event.service.js +0 -199
  138. package/esm2015/lib/services/subapplication-respond.service.js +0 -70
  139. package/esm2015/lib/services/telemetry.service.js +0 -434
  140. package/esm2015/lib/services/user-preference.service.js +0 -82
  141. package/esm2015/lib/services/widget-content.service.js +0 -182
  142. package/fesm2015/sunbird-cb-utils.js.map +0 -1
  143. package/sunbird-cb-utils-1.0.19-ang-13-16.tgz +0 -0
  144. /package/{esm2015/lib/constants/features.enum.js → esm2022/lib/constants/features.enum.mjs} +0 -0
  145. /package/{esm2015/lib/constants/instances.enum.js → esm2022/lib/constants/instances.enum.mjs} +0 -0
  146. /package/{esm2015/lib/constants/misc.constants.js → esm2022/lib/constants/misc.constants.mjs} +0 -0
  147. /package/{esm2015/lib/helpers/functions/getStringifiedQueryParams.js → esm2022/lib/helpers/functions/getStringifiedQueryParams.mjs} +0 -0
  148. /package/{esm2015/lib/models/contentRating.model.js → esm2022/lib/models/contentRating.model.mjs} +0 -0
  149. /package/{esm2015/lib/resolvers/page.constant.js → esm2022/lib/resolvers/page.constant.mjs} +0 -0
  150. /package/{esm2015/lib/resolvers/page.model.js → esm2022/lib/resolvers/page.model.mjs} +0 -0
  151. /package/{esm2015/lib/resolvers/resolver.model.js → esm2022/lib/resolvers/resolver.model.mjs} +0 -0
  152. /package/{esm2015/lib/services/card-content.model.js → esm2022/lib/services/card-content.model.mjs} +0 -0
  153. /package/{esm2015/lib/services/configurations.model.js → esm2022/lib/services/configurations.model.mjs} +0 -0
  154. /package/{esm2015/lib/services/content-strip-multiple.model.js → esm2022/lib/services/content-strip-multiple.model.mjs} +0 -0
  155. /package/{esm2015/lib/services/event.model.js → esm2022/lib/services/event.model.mjs} +0 -0
  156. /package/{esm2015/lib/services/ms-office.model.js → esm2022/lib/services/ms-office.model.mjs} +0 -0
  157. /package/{esm2015/lib/services/user-preference.model.js → esm2022/lib/services/user-preference.model.mjs} +0 -0
  158. /package/{esm2015/lib/services/widget-content.model.js → esm2022/lib/services/widget-content.model.mjs} +0 -0
  159. /package/{esm2015/lib/services/widget-resolver.model.js → esm2022/lib/services/widget-resolver.model.mjs} +0 -0
  160. /package/{esm2015/lib/services/widget-search.model.js → esm2022/lib/services/widget-search.model.mjs} +0 -0
  161. /package/{esm2015/public-api.js → esm2022/public-api.mjs} +0 -0
  162. /package/{esm2015/sunbird-cb-utils.js → esm2022/sunbird-cb-utils.mjs} +0 -0
  163. /package/{sunbird-cb-utils.d.ts → index.d.ts} +0 -0
@@ -1,22 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { PipeSafeSanitizerPipe } from './pipe-safe-sanitizer.pipe';
4
- import * as i0 from "@angular/core";
5
- export class PipeSafeSanitizerModule {
6
- }
7
- PipeSafeSanitizerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PipeSafeSanitizerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- PipeSafeSanitizerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PipeSafeSanitizerModule, declarations: [PipeSafeSanitizerPipe], imports: [CommonModule], exports: [PipeSafeSanitizerPipe] });
9
- PipeSafeSanitizerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PipeSafeSanitizerModule, imports: [[
10
- CommonModule,
11
- ]] });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PipeSafeSanitizerModule, decorators: [{
13
- type: NgModule,
14
- args: [{
15
- declarations: [PipeSafeSanitizerPipe],
16
- imports: [
17
- CommonModule,
18
- ],
19
- exports: [PipeSafeSanitizerPipe],
20
- }]
21
- }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZS1zYWZlLXNhbml0aXplci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdXRpbHMvc3JjL2xpYi9waXBlcy9waXBlLXNhZmUtc2FuaXRpemVyL3BpcGUtc2FmZS1zYW5pdGl6ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBOztBQVNsRSxNQUFNLE9BQU8sdUJBQXVCOztxSEFBdkIsdUJBQXVCO3NIQUF2Qix1QkFBdUIsaUJBTm5CLHFCQUFxQixhQUVsQyxZQUFZLGFBRUoscUJBQXFCO3NIQUVwQix1QkFBdUIsWUFMekI7WUFDUCxZQUFZO1NBQ2I7NEZBR1UsdUJBQXVCO2tCQVBuQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcclxuaW1wb3J0IHsgUGlwZVNhZmVTYW5pdGl6ZXJQaXBlIH0gZnJvbSAnLi9waXBlLXNhZmUtc2FuaXRpemVyLnBpcGUnXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1BpcGVTYWZlU2FuaXRpemVyUGlwZV0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1BpcGVTYWZlU2FuaXRpemVyUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQaXBlU2FmZVNhbml0aXplck1vZHVsZSB7IH1cclxuIl19
@@ -1,57 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { ReplaySubject } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- const storage = localStorage;
6
- const storageKey = 'kc';
7
- export class AuthKeycloakService {
8
- constructor() {
9
- this.loginChangeSubject = new ReplaySubject(1);
10
- }
11
- get isLoggedIn$() {
12
- return this.loginChangeSubject.asObservable();
13
- }
14
- logout(_redirectUrl = this.defaultRedirectUrl) {
15
- return __awaiter(this, void 0, void 0, function* () {
16
- window.location.href = `${_redirectUrl}public/logout`;
17
- });
18
- }
19
- force_logout() {
20
- return __awaiter(this, void 0, void 0, function* () {
21
- if (storage.getItem('telemetrySessionId')) {
22
- storage.removeItem('telemetrySessionId');
23
- }
24
- storage.removeItem(storageKey);
25
- if (localStorage.getItem('login') === 'true') {
26
- try {
27
- sessionStorage.clear();
28
- localStorage.clear();
29
- }
30
- catch (_a) {
31
- }
32
- window.location.href = `${this.defaultRedirectUrl}apis/reset`;
33
- }
34
- else {
35
- window.location.href = `${this.defaultRedirectUrl}public/logout`;
36
- }
37
- });
38
- }
39
- get defaultRedirectUrl() {
40
- try {
41
- const baseUrl = document.baseURI;
42
- return baseUrl || location.origin;
43
- }
44
- catch (error) {
45
- return location.origin;
46
- }
47
- }
48
- }
49
- AuthKeycloakService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AuthKeycloakService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
50
- AuthKeycloakService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AuthKeycloakService, providedIn: 'root' });
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AuthKeycloakService, decorators: [{
52
- type: Injectable,
53
- args: [{
54
- providedIn: 'root',
55
- }]
56
- }], ctorParameters: function () { return []; } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1rZXljbG9hay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3V0aWxzL3NyYy9saWIvc2VydmljZXMvYXV0aC1rZXljbG9hay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUE7O0FBWXBDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQTtBQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUE7QUFLdkIsTUFBTSxPQUFPLG1CQUFtQjtJQUU5QjtRQURRLHVCQUFrQixHQUFHLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFBO0lBb0IxRCxDQUFDO0lBR0QsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDL0MsQ0FBQztJQThGSyxNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0I7O1lBRWpELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsWUFBWSxlQUFlLENBQUE7UUFTdkQsQ0FBQztLQUFBO0lBQ0ssWUFBWTs7WUFNaEIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQTthQUN6QztZQU9ELE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDOUIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRTtnQkFDNUMsSUFBSTtvQkFDRixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUE7b0JBQ3RCLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtpQkFDckI7Z0JBQUMsV0FBTTtpQkFFUDtnQkFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsWUFBWSxDQUFBO2FBQzlEO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixlQUFlLENBQUE7YUFDakU7UUFHSCxDQUFDO0tBQUE7SUF3RkQsSUFBWSxrQkFBa0I7UUFDNUIsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUE7WUFDaEMsT0FBTyxPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQTtTQUNsQztRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFBO1NBQ3ZCO0lBQ0gsQ0FBQzs7aUhBaFFVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuLy8gaW1wb3J0IHsgS2V5Y2xvYWtFdmVudCwgS2V5Y2xvYWtFdmVudFR5cGUsIEtleWNsb2FrSW5pdE9wdGlvbnMsIEtleWNsb2FrU2VydmljZSB9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInXG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcydcbi8vIGltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuLy8gaW1wb3J0IHsgQXV0aE1pY3Jvc29mdFNlcnZpY2UgfSBmcm9tICcuL2F1dGgtbWljcm9zb2Z0LnNlcnZpY2UnXG4vLyBpbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb25zLnNlcnZpY2UnXG5cbi8vIGludGVyZmFjZSBJUGFyc2VkVG9rZW4ge1xuLy8gICBlbWFpbD86IHN0cmluZ1xuLy8gICBlbmNFbWFpbD86IHN0cmluZ1xuLy8gICBuYW1lPzogc3RyaW5nXG4vLyAgIHByZWZlcnJlZF91c2VybmFtZT86IHN0cmluZ1xuLy8gfVxuXG5jb25zdCBzdG9yYWdlID0gbG9jYWxTdG9yYWdlXG5jb25zdCBzdG9yYWdlS2V5ID0gJ2tjJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXV0aEtleWNsb2FrU2VydmljZSB7XG4gIHByaXZhdGUgbG9naW5DaGFuZ2VTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSlcbiAgY29uc3RydWN0b3IoXG4gICAgLy8gcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICAvLyBwcml2YXRlIGtleWNsb2FrU3ZjOiBLZXljbG9ha1NlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSBtc0F1dGhTdmM6IEF1dGhNaWNyb3NvZnRTZXJ2aWNlLFxuICApIHtcbiAgICAvLyB0aGlzLmxvZ2luQ2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGlzTG9nZ2VkSW46IGJvb2xlYW4pID0+IHtcbiAgICAvLyAgIHRoaXMuY29uZmlnU3ZjLmlzQXV0aGVudGljYXRlZCA9IGlzTG9nZ2VkSW5cbiAgICAvLyAgIGlmIChcbiAgICAvLyAgICAgaXNMb2dnZWRJbiAmJlxuICAgIC8vICAgICB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZyAmJlxuICAgIC8vICAgICBCb29sZWFuKHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLmRpc2FibGVQaWRDaGVjaylcbiAgICAvLyAgICkge1xuICAgIC8vICAgICB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSA9IHtcbiAgICAvLyAgICAgICBlbWFpbDogdGhpcy51c2VyRW1haWwsXG4gICAgLy8gICAgICAgdXNlck5hbWU6IHRoaXMudXNlck5hbWUsXG4gICAgLy8gICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCAnJyxcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIGdldCBpc0xvZ2dlZEluJCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpbkNoYW5nZVN1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgfVxuICAvLyBnZXQgaXNMb2dnZWRJbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gICByZXR1cm4gdGhpcy5rZXljbG9ha1N2Yy5pc0xvZ2dlZEluKClcbiAgLy8gfVxuICAvLyBnZXQgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAvLyAgIHJldHVybiB0aGlzLmtleWNsb2FrU3ZjLmdldEtleWNsb2FrSW5zdGFuY2UoKS5hdXRoZW50aWNhdGVkXG4gIC8vIH1cbiAgLy8gZ2V0IHRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vICAgcmV0dXJuIHRoaXMua2V5Y2xvYWtTdmMuZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpLnRva2VuXG4gIC8vIH1cbiAgLy8gZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyAgIHJldHVybiB0aGlzLmtleWNsb2FrU3ZjLmdldEtleWNsb2FrSW5zdGFuY2UoKS5zZXNzaW9uSWRcbiAgLy8gfVxuICAvLyBnZXQgdXNlcklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vICAgY29uc3Qga2MgPSB0aGlzLmtleWNsb2FrU3ZjLmdldEtleWNsb2FrSW5zdGFuY2UoKVxuICAvLyAgIGlmICgha2MpIHtcbiAgLy8gICAgIHJldHVyblxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gKGtjLnRva2VuUGFyc2VkICYmIGtjLnRva2VuUGFyc2VkLnN1YikgfHwgKGtjLmlkVG9rZW5QYXJzZWQgJiYga2MuaWRUb2tlblBhcnNlZC5zdWIpXG4gIC8vIH1cblxuICAvLyBnZXQgdXNlckVtYWlsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vICAgY29uc3Qga2MgPSB0aGlzLmtleWNsb2FrU3ZjLmdldEtleWNsb2FrSW5zdGFuY2UoKVxuXG4gIC8vICAgY29uc3QgdG9rZW5QYXJzZWQgPSBrYy50b2tlblBhcnNlZCBhcyBJUGFyc2VkVG9rZW5cbiAgLy8gICBjb25zdCBpZFRva2VuUGFyc2VkID0ga2MuaWRUb2tlblBhcnNlZCBhcyBJUGFyc2VkVG9rZW5cbiAgLy8gICByZXR1cm4gKFxuICAvLyAgICAgKHRva2VuUGFyc2VkICYmIHRva2VuUGFyc2VkLmVtYWlsKSB8fFxuICAvLyAgICAgKGlkVG9rZW5QYXJzZWQgJiYgaWRUb2tlblBhcnNlZC5lbWFpbCkgfHxcbiAgLy8gICAgIChpZFRva2VuUGFyc2VkICYmIGlkVG9rZW5QYXJzZWQuZW5jRW1haWwpIHx8XG4gIC8vICAgICAodG9rZW5QYXJzZWQgJiYgdG9rZW5QYXJzZWQucHJlZmVycmVkX3VzZXJuYW1lKSB8fFxuICAvLyAgICAgKGlkVG9rZW5QYXJzZWQgJiYgaWRUb2tlblBhcnNlZC5wcmVmZXJyZWRfdXNlcm5hbWUpXG4gIC8vICAgKVxuICAvLyB9XG5cbiAgLy8gZ2V0IHVzZXJOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vICAgY29uc3Qga2MgPSB0aGlzLmtleWNsb2FrU3ZjLmdldEtleWNsb2FrSW5zdGFuY2UoKVxuICAvLyAgIHJldHVybiAoXG4gIC8vICAgICAoa2MudG9rZW5QYXJzZWQgJiYgKGtjLnRva2VuUGFyc2VkIGFzIElQYXJzZWRUb2tlbikubmFtZSkgfHxcbiAgLy8gICAgIChrYy5pZFRva2VuUGFyc2VkICYmIChrYy5pZFRva2VuUGFyc2VkIGFzIElQYXJzZWRUb2tlbikubmFtZSlcbiAgLy8gICApXG4gIC8vIH1cblxuICAvLyBhc3luYyBpbml0QXV0aCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gICBpZiAoIXRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnKSB7XG4gIC8vICAgICByZXR1cm4gZmFsc2VcbiAgLy8gICB9XG4gIC8vICAgY29uc3QgaW5zdGFuY2VDb25maWcgPSB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZ1xuICAvLyAgIGlmIChpbnN0YW5jZUNvbmZpZy5taWNyb3NvZnQuaXNDb25maWd1cmVkKSB7XG4gIC8vICAgICB0aGlzLm1zQXV0aFN2Yy5pbml0KHsgbWljcm9zb2Z0OiBpbnN0YW5jZUNvbmZpZy5taWNyb3NvZnQgfSlcbiAgLy8gICB9XG4gIC8vICAgdHJ5IHtcbiAgLy8gICAgIHRoaXMuc2V0dXBHbG9iYWxBdXRoUmVzcG9uZGVyKClcbiAgLy8gICAgIHRoaXMuYWRkS2V5Y2xvYWtFdmVudExpc3RlbmVyKClcbiAgLy8gICAgIHJldHVybiBhd2FpdCB0aGlzLmtleWNsb2FrU3ZjLmluaXQoe1xuICAvLyAgICAgICBjb25maWc6IHtcbiAgLy8gICAgICAgICB1cmw6IGluc3RhbmNlQ29uZmlnLmtleWNsb2FrLnVybCxcbiAgLy8gICAgICAgICByZWFsbTogaW5zdGFuY2VDb25maWcua2V5Y2xvYWsucmVhbG0sXG4gIC8vICAgICAgICAgY2xpZW50SWQ6IGluc3RhbmNlQ29uZmlnLmtleWNsb2FrLmNsaWVudElkLFxuICAvLyAgICAgICB9LFxuICAvLyAgICAgICBpbml0T3B0aW9uczoge1xuICAvLyAgICAgICAgIC4uLnRoaXMuZ2V0U2F2ZWRLY0NvbmZpZygpLFxuICAvLyAgICAgICAgIG9uTG9hZDogaW5zdGFuY2VDb25maWcua2V5Y2xvYWsub25Mb2FkIHx8ICdjaGVjay1zc28nLFxuICAvLyAgICAgICAgIGNoZWNrTG9naW5JZnJhbWU6IGZhbHNlLFxuICAvLyAgICAgICB9LFxuICAvLyAgICAgICBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcjogdHJ1ZSxcbiAgLy8gICAgICAgbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwOiBmYWxzZSxcbiAgLy8gICAgICAgYmVhcmVyRXhjbHVkZWRVcmxzOiBpbnN0YW5jZUNvbmZpZy5rZXljbG9hay5iZWFyZXJFeGNsdWRlZFVybHMsXG4gIC8vICAgICB9KVxuICAvLyAgIH0gY2F0Y2ggKGVycikge1xuICAvLyAgICAgcmV0dXJuIGZhbHNlXG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLy8gbG9naW4oXG4gIC8vICAgaWRwSGludDogJ0UnIHwgJ04nIHwgJ1MnID0gJ0UnLFxuICAvLyAgIHJlZGlyZWN0VXJsOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRSZWRpcmVjdFVybCxcbiAgLy8gKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vICAgcmV0dXJuIHRoaXMua2V5Y2xvYWtTdmMubG9naW4oe1xuICAvLyAgICAgaWRwSGludCxcbiAgLy8gICAgIHJlZGlyZWN0VXJpOiByZWRpcmVjdFVybCxcbiAgLy8gICB9KVxuICAvLyB9XG5cbiAgLy8gcmVnaXN0ZXIoXG4gIC8vICAgcmVkaXJlY3RVcmw6IHN0cmluZyA9IHRoaXMuZGVmYXVsdFJlZGlyZWN0VXJsLFxuICAvLyApOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gICByZXR1cm4gdGhpcy5rZXljbG9ha1N2Yy5yZWdpc3Rlcih7XG4gIC8vICAgICByZWRpcmVjdFVyaTogcmVkaXJlY3RVcmwsXG4gIC8vICAgfSlcbiAgLy8gfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdGhpcyB3aWxsIGJlIGRlcHJpY2F0ZWRcbiAgICovXG4gIGFzeW5jIGxvZ291dChfcmVkaXJlY3RVcmwgPSB0aGlzLmRlZmF1bHRSZWRpcmVjdFVybCkge1xuICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYCR7X3JlZGlyZWN0VXJsfWFwaXMvcmVzZXRgXG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgJHtfcmVkaXJlY3RVcmx9cHVibGljL2xvZ291dGBcblxuICAgIC8vIHN0b3JhZ2UucmVtb3ZlSXRlbShzdG9yYWdlS2V5KVxuICAgIC8vIGF3YWl0IHRoaXMuaHR0cC5nZXQoJy9hcGlzL3Jlc2V0JykudG9Qcm9taXNlKClcbiAgICAvLyBpZiAodGhpcy5tc0F1dGhTdmMuaXNMb2dvdXRSZXF1aXJlZCkge1xuICAgIC8vICAgdGhpcy5rZXljbG9ha1N2Yy5sb2dvdXQodGhpcy5tc0F1dGhTdmMubG9nb3V0VXJsKHJlZGlyZWN0VXJsKSlcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgdGhpcy5rZXljbG9ha1N2Yy5sb2dvdXQocmVkaXJlY3RVcmwpXG4gICAgLy8gfVxuICB9XG4gIGFzeW5jIGZvcmNlX2xvZ291dCgpIHtcbiAgICAvLyBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAvLyAgICdDYWNoZS1Db250cm9sJzogICduby1jYWNoZSwgbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcsXG4gICAgLy8gICBQcmFnbWE6ICduby1jYWNoZScsXG4gICAgLy8gICBFeHBpcmVzOiAnMCcsXG4gICAgLy8gfSlcbiAgICBpZiAoc3RvcmFnZS5nZXRJdGVtKCd0ZWxlbWV0cnlTZXNzaW9uSWQnKSkge1xuICAgICAgc3RvcmFnZS5yZW1vdmVJdGVtKCd0ZWxlbWV0cnlTZXNzaW9uSWQnKVxuICAgIH1cbiAgICAvLyB0cnkge1xuICAgIC8vICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKVxuICAgIC8vICAgbG9jYWxTdG9yYWdlLmNsZWFyKClcbiAgICAvLyB9IGNhdGNoIHtcblxuICAgIC8vIH1cbiAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oc3RvcmFnZUtleSlcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2luJykgPT09ICd0cnVlJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKVxuICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKVxuICAgICAgfSBjYXRjaCB7XG5cbiAgICAgIH1cbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5kZWZhdWx0UmVkaXJlY3RVcmx9YXBpcy9yZXNldGBcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmRlZmF1bHRSZWRpcmVjdFVybH1wdWJsaWMvbG9nb3V0YFxuICAgIH1cbiAgICAvLyB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvcHVibGljL2xvZ291dCdcbiAgICAvLyBhd2FpdCB0aGlzLmh0dHAuZ2V0KCcvYXBpcy9yZXNldCcsIHsgaGVhZGVycyB9KS50b1Byb21pc2UoKVxuICB9XG4gIC8vIHByaXZhdGUgYWRkS2V5Y2xvYWtFdmVudExpc3RlbmVyKCkge1xuICAvLyAgIHRoaXMua2V5Y2xvYWtTdmMua2V5Y2xvYWtFdmVudHMkLnN1YnNjcmliZSgoZXZlbnQ6IEtleWNsb2FrRXZlbnQpID0+IHtcbiAgLy8gICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAvLyAgICAgICBjYXNlIEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aEVycm9yOlxuICAvLyAgICAgICAgIHRoaXMubG9naW5DaGFuZ2VTdWJqZWN0Lm5leHQoZmFsc2UpXG4gIC8vICAgICAgICAgYnJlYWtcbiAgLy8gICAgICAgY2FzZSBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhMb2dvdXQ6XG4gIC8vICAgICAgICAgdGhpcy5sb2dpbkNoYW5nZVN1YmplY3QubmV4dChmYWxzZSlcbiAgLy8gICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oc3RvcmFnZUtleSlcbiAgLy8gICAgICAgICBicmVha1xuICAvLyAgICAgICBjYXNlIEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFJlZnJlc2hFcnJvcjpcbiAgLy8gICAgICAgICBicmVha1xuICAvLyAgICAgICBjYXNlIEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFJlZnJlc2hTdWNjZXNzOlxuICAvLyAgICAgICAgIGJyZWFrXG4gIC8vICAgICAgIGNhc2UgS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoU3VjY2VzczpcbiAgLy8gICAgICAgICBicmVha1xuICAvLyAgICAgICBjYXNlIEtleWNsb2FrRXZlbnRUeXBlLk9uUmVhZHk6XG4gIC8vICAgICAgICAgdGhpcy5sb2dpbkNoYW5nZVN1YmplY3QubmV4dChldmVudC5hcmdzKVxuICAvLyAgICAgICAgIGlmIChldmVudC5hcmdzKSB7XG4gIC8vICAgICAgICAgICB0aGlzLnNhdmVLZXljbG9ha0NvbmZpZygpXG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICAgIGJyZWFrXG4gIC8vICAgICAgIGNhc2UgS2V5Y2xvYWtFdmVudFR5cGUuT25Ub2tlbkV4cGlyZWQ6XG4gIC8vICAgICAgICAgdGhpcy5rZXljbG9ha1N2Yy51cGRhdGVUb2tlbig2MClcbiAgLy8gICAgICAgICBicmVha1xuICAvLyAgICAgfVxuICAvLyAgIH0pXG4gIC8vIH1cblxuICAvLyBwcml2YXRlIHNldHVwR2xvYmFsQXV0aFJlc3BvbmRlcigpIHtcbiAgLy8gICBmcm9tRXZlbnQ8TWVzc2FnZUV2ZW50Pih3aW5kb3csICdtZXNzYWdlJylcbiAgLy8gICAgIC5waXBlKFxuICAvLyAgICAgICBmaWx0ZXIoXG4gIC8vICAgICAgICAgKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+XG4gIC8vICAgICAgICAgICBCb29sZWFuKGV2ZW50KSAmJlxuICAvLyAgICAgICAgICAgQm9vbGVhbihldmVudC5kYXRhKSAmJlxuICAvLyAgICAgICAgICAgZXZlbnQuZGF0YS50eXBlID09PSAnQVVUSF9SRVFVRVNUJyAmJlxuICAvLyAgICAgICAgICAgQm9vbGVhbihldmVudC5zb3VyY2UgJiYgdHlwZW9mIGV2ZW50LnNvdXJjZS5wb3N0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJyksXG4gIC8vICAgICAgICksXG4gIC8vICAgICApXG4gIC8vICAgICAuc3Vic2NyaWJlKGFzeW5jIChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gIC8vICAgICAgIGNvbnN0IGNvbnRlbnRXaW5kb3cgPSBldmVudC5zb3VyY2UgYXMgV2luZG93XG4gIC8vICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5rZXljbG9ha1N2Yy5nZXRUb2tlbigpXG4gIC8vICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAvLyAgICAgICAgIGFwcDogJ1dFQl9QT1JUQUwnLFxuICAvLyAgICAgICAgIHR5cGU6ICdBVVRIX1JFU1BPTlNFJyxcbiAgLy8gICAgICAgICBzdGF0ZTogJ05PTkUnLFxuICAvLyAgICAgICAgIHBsdWdpbjogJ05PTkUnLFxuICAvLyAgICAgICAgIGRhdGE6IHtcbiAgLy8gICAgICAgICAgIHRva2VuLFxuICAvLyAgICAgICAgICAgaWQ6IGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS5kYXRhICYmIGV2ZW50LmRhdGEuZGF0YS5pZCxcbiAgLy8gICAgICAgICB9LFxuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UocmVzcG9uc2UsICcqJylcbiAgLy8gICAgIH0pXG4gIC8vIH1cblxuICAvLyBVdGlsaXR5IE1ldGhvZHNcbiAgLy8gcHJpdmF0ZSBzYXZlS2V5Y2xvYWtDb25maWcoKSB7XG4gIC8vICAgY29uc3Qga2MgPSB0aGlzLmtleWNsb2FrU3ZjLmdldEtleWNsb2FrSW5zdGFuY2UoKVxuICAvLyAgIGNvbnN0IGtjSW5pdE9wdGlvbnM6IEtleWNsb2FrSW5pdE9wdGlvbnMgPSB7XG4gIC8vICAgICBpZFRva2VuOiBrYy5pZFRva2VuLFxuICAvLyAgICAgcmVmcmVzaFRva2VuOiBrYy5yZWZyZXNoVG9rZW4sXG4gIC8vICAgICB0aW1lU2tldzoga2MudGltZVNrZXcsXG4gIC8vICAgICB0b2tlbjoga2MudG9rZW4sXG4gIC8vICAgfVxuICAvLyAgIHN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShrY0luaXRPcHRpb25zKSlcbiAgLy8gfVxuICAvLyBwcml2YXRlIGdldFNhdmVkS2NDb25maWcoKTogS2V5Y2xvYWtJbml0T3B0aW9ucyB7XG4gIC8vICAgdHJ5IHtcbiAgLy8gICAgIC8vIGNvbnN0IGxhc3RTYXZlZCA9IEtFWUNMT0FLX1NUT1JBR0UuZ2V0SXRlbShrZXkpO1xuICAvLyAgICAgY29uc3QgbGFzdFNhdmVkID0gc3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkpXG4gIC8vICAgICBpZiAobGFzdFNhdmVkKSB7XG4gIC8vICAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IEpTT04ucGFyc2UobGFzdFNhdmVkKVxuICAvLyAgICAgICBpZiAoXG4gIC8vICAgICAgICAgJ2lkVG9rZW4nIGluIHByb2Nlc3NlZCAmJlxuICAvLyAgICAgICAgICdyZWZyZXNoVG9rZW4nIGluIHByb2Nlc3NlZCAmJlxuICAvLyAgICAgICAgICd0aW1lU2tldycgaW4gcHJvY2Vzc2VkICYmXG4gIC8vICAgICAgICAgJ3Rva2VuJyBpbiBwcm9jZXNzZWRcbiAgLy8gICAgICAgKSB7XG4gIC8vICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZFxuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfSBjYXRjaCAoZSkgeyB9XG4gIC8vICAgcmV0dXJuIHt9XG4gIC8vIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0UmVkaXJlY3RVcmwoKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVybCA9IGRvY3VtZW50LmJhc2VVUklcbiAgICAgIHJldHVybiBiYXNlVXJsIHx8IGxvY2F0aW9uLm9yaWdpblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbG9jYXRpb24ub3JpZ2luXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,184 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./logger.service";
5
- import * as i2 from "@angular/common/http";
6
- const msTokenExpiryDuration = 600;
7
- const storageKey = 'msLoginRequested';
8
- const storage = localStorage;
9
- const API_ENDPOINTS = {
10
- sharePointToken: '/apis/protected/v8/user/token',
11
- };
12
- export class AuthMicrosoftService {
13
- constructor(loggerSvc, http) {
14
- this.loggerSvc = loggerSvc;
15
- this.http = http;
16
- this.msConfig = {
17
- clientId: '',
18
- tenant: '',
19
- defaultEmailId: '',
20
- validEmailExtensions: [],
21
- isConfigured: false,
22
- };
23
- this.emailUsed = null;
24
- this.code = null;
25
- this.msToken = {
26
- accessToken: '',
27
- expiresOn: '',
28
- resource: '',
29
- tokenType: '',
30
- };
31
- }
32
- get isLogoutRequired() {
33
- return Boolean(this.msConfig.isConfigured && this.msConfig.clientId && this.emailUsed);
34
- }
35
- get loginUrl() {
36
- if (this.msConfig.isConfigured && this.msConfig.clientId) {
37
- const base = 'https://login.windows.net/common/oauth2/authorize';
38
- const searchParam = new URLSearchParams({
39
- response_type: 'code',
40
- client_id: this.msConfig.clientId,
41
- redirect_uri: window.location.href,
42
- });
43
- const fragment = location.search.substring(1);
44
- if (fragment) {
45
- return `${base}?${searchParam.toString()}#${fragment}`;
46
- }
47
- return `${base}?${searchParam.toString()}`;
48
- }
49
- return null;
50
- }
51
- logoutUrl(redirectUrl) {
52
- if (this.isValidEmail(this.emailUsed || '')) {
53
- return `https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=${redirectUrl}`;
54
- }
55
- return redirectUrl;
56
- }
57
- init(config) {
58
- return __awaiter(this, void 0, void 0, function* () {
59
- if (!config || !config.microsoft || !config.microsoft.isConfigured) {
60
- this.loggerSvc.warn('Empty/No Configuration passed, ignoring Microsoft Authentication');
61
- }
62
- this.msConfig = config.microsoft;
63
- const queryParams = new URLSearchParams(location.search);
64
- if (queryParams.has('code') && queryParams.has('session_state')) {
65
- this.code = queryParams.get('code');
66
- if (!this.code) {
67
- return;
68
- }
69
- let url = location.origin + location.pathname;
70
- yield this.exchangeTokenForCode(this.code, url);
71
- if (location.hash) {
72
- url += location.hash.substring(1);
73
- }
74
- history.replaceState(null, '', url);
75
- }
76
- });
77
- }
78
- login(email) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- if (!this.isValidEmail(email)) {
81
- this.loggerSvc.warn(`Microsoft Login is not allowed for your emailId (${email})`);
82
- return;
83
- }
84
- const loginUrl = this.loginUrl;
85
- if (loginUrl) {
86
- location.assign(loginUrl);
87
- }
88
- else {
89
- this.loggerSvc.warn('Unable to identify Office Login URL, Ignoring login request');
90
- }
91
- });
92
- }
93
- getToken(email) {
94
- return __awaiter(this, void 0, void 0, function* () {
95
- if (this.msToken &&
96
- this.isValid(this.msToken.accessToken, this.msToken.expiresOn) &&
97
- this.msToken.accessToken) {
98
- return this.msToken.accessToken;
99
- }
100
- if (this.isValidEmail(email)) {
101
- try {
102
- this.msToken = yield this.getTokenForEmail(email);
103
- if (this.msToken.accessToken) {
104
- this.emailUsed = email;
105
- return this.msToken.accessToken;
106
- }
107
- }
108
- catch (error) {
109
- if (!this.code) {
110
- this.login(email);
111
- }
112
- }
113
- }
114
- if (this.msConfig.defaultEmailId && this.isValidEmail(this.msConfig.defaultEmailId)) {
115
- try {
116
- this.msToken = yield this.getTokenForEmail(this.msConfig.defaultEmailId);
117
- if (this.msToken.accessToken) {
118
- this.emailUsed = this.msConfig.defaultEmailId;
119
- return this.msToken.accessToken;
120
- }
121
- }
122
- catch (error) { }
123
- }
124
- throw new Error('UNABLE TO FETCH MS AUTH TOKEN');
125
- });
126
- }
127
- loginForSSOEnabledEmbed(email) {
128
- if (!this.isValidEmail(email)) {
129
- this.loggerSvc.warn('SSO Login request Ignored. Invalid Email Id for SSO Enabled Content');
130
- }
131
- let msPrevTS = 0;
132
- try {
133
- msPrevTS = parseInt(storage.getItem(storageKey) || '0', 10);
134
- }
135
- catch (error) { }
136
- if (!msPrevTS || (msPrevTS && (Date.now() - msPrevTS) / 1000 > msTokenExpiryDuration)) {
137
- this.loggerSvc.info(`last login exceeded ${msTokenExpiryDuration} duration. Redirecting to O365 login`);
138
- storage.setItem(storageKey, Date.now().toString());
139
- this.login(email);
140
- }
141
- }
142
- isValidEmail(email) {
143
- return this.msConfig.validEmailExtensions.some(ext => email.endsWith(ext));
144
- }
145
- isValid(accessToken, expiresOn) {
146
- if (accessToken && expiresOn) {
147
- return true;
148
- }
149
- return false;
150
- }
151
- exchangeTokenForCode(code, redirectUrl) {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- const response = yield this.http
154
- .get(`${API_ENDPOINTS}?code=${code}&redirectUrl=${redirectUrl}`)
155
- .toPromise();
156
- return this.getInstanceFromResponse(response);
157
- });
158
- }
159
- getTokenForEmail(email) {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- const response = yield this.http
162
- .get(`${API_ENDPOINTS.sharePointToken}?email=${email}`)
163
- .toPromise();
164
- return this.getInstanceFromResponse(response);
165
- });
166
- }
167
- getInstanceFromResponse(token) {
168
- return {
169
- accessToken: token.accessToken,
170
- expiresOn: token.expiresOn,
171
- resource: token.resource,
172
- tokenType: token.tokenType,
173
- };
174
- }
175
- }
176
- AuthMicrosoftService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AuthMicrosoftService, deps: [{ token: i1.LoggerService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
177
- AuthMicrosoftService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AuthMicrosoftService, providedIn: 'root' });
178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AuthMicrosoftService, decorators: [{
179
- type: Injectable,
180
- args: [{
181
- providedIn: 'root',
182
- }]
183
- }], ctorParameters: function () { return [{ type: i1.LoggerService }, { type: i2.HttpClient }]; } });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1taWNyb3NvZnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi91dGlscy9zcmMvbGliL3NlcnZpY2VzL2F1dGgtbWljcm9zb2Z0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7Ozs7QUFPMUMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUE7QUFDakMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUE7QUFDckMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFBO0FBRTVCLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGVBQWUsRUFBRSwrQkFBK0I7Q0FDakQsQ0FBQTtBQUlELE1BQU0sT0FBTyxvQkFBb0I7SUFpQi9CLFlBQW9CLFNBQXdCLEVBQVUsSUFBZ0I7UUFBbEQsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUFoQjlELGFBQVEsR0FBZ0M7WUFDOUMsUUFBUSxFQUFFLEVBQUU7WUFDWixNQUFNLEVBQUUsRUFBRTtZQUNWLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLG9CQUFvQixFQUFFLEVBQUU7WUFDeEIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQTtRQUNPLGNBQVMsR0FBa0IsSUFBSSxDQUFBO1FBQy9CLFNBQUksR0FBa0IsSUFBSSxDQUFBO1FBQzFCLFlBQU8sR0FBNEI7WUFDekMsV0FBVyxFQUFFLEVBQUU7WUFDZixTQUFTLEVBQUUsRUFBRTtZQUNiLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFBO0lBRXlFLENBQUM7SUFFM0UsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFD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cmUnXHJcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuL2xvZ2dlci5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBOc0luc3RhbmNlQ29uZmlnIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5tb2RlbCdcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xyXG5pbXBvcnQgeyBJV3NNc1Rva2VuTW9kZWxSZXNwb25zZSB9IGZyb20gJy4vbXMtb2ZmaWNlLm1vZGVsJ1xyXG4vLyBUT0RPOiBVc2UgYSB1cmwtc2VhcmNoLXBvbHlmaWxsIGlmIHRoZSBzaXRlIGRpZG5vdCB3b3JrIGluIElFIDExXHJcblxyXG5jb25zdCBtc1Rva2VuRXhwaXJ5RHVyYXRpb24gPSA2MDBcclxuY29uc3Qgc3RvcmFnZUtleSA9ICdtc0xvZ2luUmVxdWVzdGVkJ1xyXG5jb25zdCBzdG9yYWdlID0gbG9jYWxTdG9yYWdlXHJcblxyXG5jb25zdCBBUElfRU5EUE9JTlRTID0ge1xyXG4gIHNoYXJlUG9pbnRUb2tlbjogJy9hcGlzL3Byb3RlY3RlZC92OC91c2VyL3Rva2VuJyxcclxufVxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aE1pY3Jvc29mdFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgbXNDb25maWc6IE5zSW5zdGFuY2VDb25maWcuSU1pY3Jvc29mdCA9IHtcclxuICAgIGNsaWVudElkOiAnJyxcclxuICAgIHRlbmFudDogJycsXHJcbiAgICBkZWZhdWx0RW1haWxJZDogJycsXHJcbiAgICB2YWxpZEVtYWlsRXh0ZW5zaW9uczogW10sXHJcbiAgICBpc0NvbmZpZ3VyZWQ6IGZhbHNlLFxyXG4gIH1cclxuICBwcml2YXRlIGVtYWlsVXNlZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICBwcml2YXRlIGNvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsXHJcbiAgcHJpdmF0ZSBtc1Rva2VuOiBJV3NNc1Rva2VuTW9kZWxSZXNwb25zZSA9IHtcclxuICAgIGFjY2Vzc1Rva2VuOiAnJyxcclxuICAgIGV4cGlyZXNPbjogJycsXHJcbiAgICByZXNvdXJjZTogJycsXHJcbiAgICB0b2tlblR5cGU6ICcnLFxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2dnZXJTdmM6IExvZ2dlclNlcnZpY2UsIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkgeyB9XHJcblxyXG4gIGdldCBpc0xvZ291dFJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5tc0NvbmZpZy5pc0NvbmZpZ3VyZWQgJiYgdGhpcy5tc0NvbmZpZy5jbGllbnRJZCAmJiB0aGlzLmVtYWlsVXNlZClcclxuICB9XHJcbiAgZ2V0IGxvZ2luVXJsKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMubXNDb25maWcuaXNDb25maWd1cmVkICYmIHRoaXMubXNDb25maWcuY2xpZW50SWQpIHtcclxuICAgICAgY29uc3QgYmFzZSA9ICdodHRwczovL2xvZ2luLndpbmRvd3MubmV0L2NvbW1vbi9vYXV0aDIvYXV0aG9yaXplJ1xyXG4gICAgICBjb25zdCBzZWFyY2hQYXJhbSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xyXG4gICAgICAgIHJlc3BvbnNlX3R5cGU6ICdjb2RlJyxcclxuICAgICAgICBjbGllbnRfaWQ6IHRoaXMubXNDb25maWcuY2xpZW50SWQsXHJcbiAgICAgICAgcmVkaXJlY3RfdXJpOiB3aW5kb3cubG9jYXRpb24uaHJlZixcclxuICAgICAgfSlcclxuICAgICAgY29uc3QgZnJhZ21lbnQgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpXHJcbiAgICAgIGlmIChmcmFnbWVudCkge1xyXG4gICAgICAgIHJldHVybiBgJHtiYXNlfT8ke3NlYXJjaFBhcmFtLnRvU3RyaW5nKCl9IyR7ZnJhZ21lbnR9YFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBgJHtiYXNlfT8ke3NlYXJjaFBhcmFtLnRvU3RyaW5nKCl9YFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcbiAgbG9nb3V0VXJsKHJlZGlyZWN0VXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmVtYWlsVXNlZCB8fCAnJykpIHtcclxuICAgICAgcmV0dXJuIGBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vY29tbW9uL29hdXRoMi9sb2dvdXQ/cG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPSR7cmVkaXJlY3RVcmx9YFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlZGlyZWN0VXJsXHJcbiAgfVxyXG5cclxuICAvLyBCZWhhdmlvciBNZXRob2RzXHJcblxyXG4gIGFzeW5jIGluaXQoY29uZmlnOiBQaWNrPE5zSW5zdGFuY2VDb25maWcuSUNvbmZpZywgJ21pY3Jvc29mdCc+KSB7XHJcbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLm1pY3Jvc29mdCB8fCAhY29uZmlnLm1pY3Jvc29mdC5pc0NvbmZpZ3VyZWQpIHtcclxuICAgICAgdGhpcy5sb2dnZXJTdmMud2FybignRW1wdHkvTm8gQ29uZmlndXJhdGlvbiBwYXNzZWQsIGlnbm9yaW5nIE1pY3Jvc29mdCBBdXRoZW50aWNhdGlvbicpXHJcbiAgICB9XHJcbiAgICB0aGlzLm1zQ29uZmlnID0gY29uZmlnLm1pY3Jvc29mdFxyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaClcclxuICAgIGlmIChxdWVyeVBhcmFtcy5oYXMoJ2NvZGUnKSAmJiBxdWVyeVBhcmFtcy5oYXMoJ3Nlc3Npb25fc3RhdGUnKSkge1xyXG4gICAgICB0aGlzLmNvZGUgPSBxdWVyeVBhcmFtcy5nZXQoJ2NvZGUnKVxyXG4gICAgICBpZiAoIXRoaXMuY29kZSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCB1cmwgPSBsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZVxyXG4gICAgICBhd2FpdCB0aGlzLmV4Y2hhbmdlVG9rZW5Gb3JDb2RlKHRoaXMuY29kZSwgdXJsKVxyXG4gICAgICBpZiAobG9jYXRpb24uaGFzaCkge1xyXG4gICAgICAgIHVybCArPSBsb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKVxyXG4gICAgICB9XHJcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCB1cmwpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2dpbihlbWFpbDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEVtYWlsKGVtYWlsKSkge1xyXG4gICAgICB0aGlzLmxvZ2dlclN2Yy53YXJuKGBNaWNyb3NvZnQgTG9naW4gaXMgbm90IGFsbG93ZWQgZm9yIHlvdXIgZW1haWxJZCAoJHtlbWFpbH0pYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCBsb2dpblVybCA9IHRoaXMubG9naW5VcmxcclxuICAgIGlmIChsb2dpblVybCkge1xyXG4gICAgICBsb2NhdGlvbi5hc3NpZ24obG9naW5VcmwpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvZ2dlclN2Yy53YXJuKCdVbmFibGUgdG8gaWRlbnRpZnkgT2ZmaWNlIExvZ2luIFVSTCwgSWdub3JpbmcgbG9naW4gcmVxdWVzdCcpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRUb2tlbihlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tc1Rva2VuICYmXHJcbiAgICAgIHRoaXMuaXNWYWxpZCh0aGlzLm1zVG9rZW4uYWNjZXNzVG9rZW4sIHRoaXMubXNUb2tlbi5leHBpcmVzT24pICYmXHJcbiAgICAgIHRoaXMubXNUb2tlbi5hY2Nlc3NUb2tlblxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1zVG9rZW4uYWNjZXNzVG9rZW5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzVmFsaWRFbWFpbChlbWFpbCkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLm1zVG9rZW4gPSBhd2FpdCB0aGlzLmdldFRva2VuRm9yRW1haWwoZW1haWwpXHJcbiAgICAgICAgaWYgKHRoaXMubXNUb2tlbi5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgdGhpcy5lbWFpbFVzZWQgPSBlbWFpbFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubXNUb2tlbi5hY2Nlc3NUb2tlblxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29kZSkge1xyXG4gICAgICAgICAgdGhpcy5sb2dpbihlbWFpbClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1zQ29uZmlnLmRlZmF1bHRFbWFpbElkICYmIHRoaXMuaXNWYWxpZEVtYWlsKHRoaXMubXNDb25maWcuZGVmYXVsdEVtYWlsSWQpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5tc1Rva2VuID0gYXdhaXQgdGhpcy5nZXRUb2tlbkZvckVtYWlsKHRoaXMubXNDb25maWcuZGVmYXVsdEVtYWlsSWQpXHJcbiAgICAgICAgaWYgKHRoaXMubXNUb2tlbi5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgdGhpcy5lbWFpbFVzZWQgPSB0aGlzLm1zQ29uZmlnLmRlZmF1bHRFbWFpbElkXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5tc1Rva2VuLmFjY2Vzc1Rva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VOQUJMRSBUTyBGRVRDSCBNUyBBVVRIIFRPS0VOJylcclxuICB9XHJcblxyXG4gIGxvZ2luRm9yU1NPRW5hYmxlZEVtYmVkKGVtYWlsOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5pc1ZhbGlkRW1haWwoZW1haWwpKSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyU3ZjLndhcm4oJ1NTTyBMb2dpbiByZXF1ZXN0IElnbm9yZWQuIEludmFsaWQgRW1haWwgSWQgZm9yIFNTTyBFbmFibGVkIENvbnRlbnQnKVxyXG4gICAgfVxyXG4gICAgbGV0IG1zUHJldlRTID0gMFxyXG4gICAgdHJ5IHtcclxuICAgICAgbXNQcmV2VFMgPSBwYXJzZUludChzdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSkgfHwgJzAnLCAxMClcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuICAgIGlmICghbXNQcmV2VFMgfHwgKG1zUHJldlRTICYmIChEYXRlLm5vdygpIC0gbXNQcmV2VFMpIC8gMTAwMCA+IG1zVG9rZW5FeHBpcnlEdXJhdGlvbikpIHtcclxuICAgICAgdGhpcy5sb2dnZXJTdmMuaW5mbyhcclxuICAgICAgICBgbGFzdCBsb2dpbiBleGNlZWRlZCAke21zVG9rZW5FeHBpcnlEdXJhdGlvbn0gZHVyYXRpb24uIFJlZGlyZWN0aW5nIHRvIE8zNjUgbG9naW5gLFxyXG4gICAgICApXHJcbiAgICAgIHN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5LCBEYXRlLm5vdygpLnRvU3RyaW5nKCkpXHJcbiAgICAgIHRoaXMubG9naW4oZW1haWwpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRW1haWwoZW1haWw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMubXNDb25maWcudmFsaWRFbWFpbEV4dGVuc2lvbnMuc29tZShleHQgPT4gZW1haWwuZW5kc1dpdGgoZXh0KSlcclxuICB9XHJcblxyXG4gIGlzVmFsaWQoYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCwgZXhwaXJlc09uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGlmIChhY2Nlc3NUb2tlbiAmJiBleHBpcmVzT24pIHtcclxuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGV4cGlyZWRPbiBhbmQgRGF0ZSBjb21wYXJpc29uIGJhc2VkIHZhbGlkaXR5XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGFzeW5jIGV4Y2hhbmdlVG9rZW5Gb3JDb2RlKGNvZGU6IHN0cmluZywgcmVkaXJlY3RVcmw6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PElXc01zVG9rZW5Nb2RlbFJlc3BvbnNlPihgJHtBUElfRU5EUE9JTlRTfT9jb2RlPSR7Y29kZX0mcmVkaXJlY3RVcmw9JHtyZWRpcmVjdFVybH1gKVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICAgIHJldHVybiB0aGlzLmdldEluc3RhbmNlRnJvbVJlc3BvbnNlKHJlc3BvbnNlKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0VG9rZW5Gb3JFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8SVdzTXNUb2tlbk1vZGVsUmVzcG9uc2U+KGAke0FQSV9FTkRQT0lOVFMuc2hhcmVQb2ludFRva2VufT9lbWFpbD0ke2VtYWlsfWApXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpXHJcbiAgfVxyXG5cclxuICBnZXRJbnN0YW5jZUZyb21SZXNwb25zZSh0b2tlbjogSVdzTXNUb2tlbk1vZGVsUmVzcG9uc2UpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbi5hY2Nlc3NUb2tlbixcclxuICAgICAgZXhwaXJlc09uOiB0b2tlbi5leHBpcmVzT24sXHJcbiAgICAgIHJlc291cmNlOiB0b2tlbi5yZXNvdXJjZSxcclxuICAgICAgdG9rZW5UeXBlOiB0b2tlbi50b2tlblR5cGUsXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,199 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { WsEvents } from './event.model';
4
- import * as _ from 'lodash';
5
- import * as _moment from 'moment';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./utility.service";
8
- const moment = _moment;
9
- export class EventService {
10
- constructor(utilitySvc, environment) {
11
- this.utilitySvc = utilitySvc;
12
- this.todaysEvents = [];
13
- this.eventsSubject = new Subject();
14
- this.events$ = this.eventsSubject.asObservable();
15
- this.eventsChatbotSubject = new Subject();
16
- this.chatbotEvents$ = this.eventsChatbotSubject.asObservable();
17
- this.eventsGetStartSubject = new Subject();
18
- this.getStartEvents$ = this.eventsGetStartSubject.asObservable();
19
- this.eventsPRSubject = new Subject();
20
- this.getPREvents$ = this.eventsPRSubject.asObservable();
21
- this.environment = environment;
22
- }
23
- dispatchEvent(event) {
24
- event.pageContext = this.getContext(event.pageContext);
25
- this.eventsSubject.next(event);
26
- }
27
- dispatchChatbotEvent(event) {
28
- this.eventsChatbotSubject.next(event);
29
- }
30
- dispatchGetStartedEvent(event) {
31
- this.eventsGetStartSubject.next(event);
32
- }
33
- dispatchPlatformRatingEvent(event) {
34
- this.eventsPRSubject.next(event);
35
- }
36
- raiseInteractTelemetry(edata, object, pageContext) {
37
- this.dispatchEvent({
38
- eventType: WsEvents.WsEventType.Telemetry,
39
- eventLogLevel: WsEvents.WsEventLogLevel.Info,
40
- data: {
41
- edata,
42
- object,
43
- pageContext: this.getContext(pageContext),
44
- eventSubType: WsEvents.EnumTelemetrySubType.Interact,
45
- },
46
- from: '',
47
- to: 'Telemetry',
48
- });
49
- }
50
- raiseFeedbackTelemetry(edata, object, from) {
51
- this.dispatchEvent({
52
- eventType: WsEvents.WsEventType.Telemetry,
53
- eventLogLevel: WsEvents.WsEventLogLevel.Info,
54
- data: {
55
- edata,
56
- object,
57
- eventSubType: WsEvents.EnumTelemetrySubType.Feedback,
58
- },
59
- from: from || '',
60
- to: 'Telemetry',
61
- });
62
- }
63
- raiseCustomImpression(object, pageContext) {
64
- this.dispatchEvent({
65
- eventType: WsEvents.WsEventType.Telemetry,
66
- eventLogLevel: WsEvents.WsEventLogLevel.Info,
67
- data: {
68
- object,
69
- pageContext: this.getContext(pageContext),
70
- eventSubType: WsEvents.EnumTelemetrySubType.Impression,
71
- },
72
- from: '',
73
- to: 'Telemetry',
74
- });
75
- }
76
- getContext(pageContext) {
77
- const routeDataContext = this.utilitySvc.routeData;
78
- const finalContext = {
79
- pageId: routeDataContext.pageId,
80
- module: routeDataContext.module,
81
- };
82
- if (pageContext) {
83
- if (pageContext.pageIdExt) {
84
- finalContext.pageId = `${routeDataContext.pageId}_${pageContext.pageIdExt}`;
85
- }
86
- else if (pageContext.pageId) {
87
- finalContext.pageId = pageContext.pageId;
88
- }
89
- if (pageContext.module) {
90
- finalContext.module = pageContext.module;
91
- }
92
- }
93
- return finalContext;
94
- }
95
- handleTabTelemetry(subType, data, object) {
96
- this.raiseInteractTelemetry({
97
- subType,
98
- type: WsEvents.EnumInteractTypes.CLICK,
99
- id: `${_.camelCase(data.label)}-tab`,
100
- }, Object.assign({}, object), {
101
- pageIdExt: `${_.camelCase(data.label)}-tab`,
102
- });
103
- this.raiseCustomImpression(Object.assign({ context: {
104
- position: data.index,
105
- } }, object), {
106
- pageIdExt: `${_.camelCase(data.label)}-tab`,
107
- });
108
- }
109
- getPublicUrl(url) {
110
- const mainUrl = url.split('/content').pop() || '';
111
- return `${this.environment.contentHost}/${this.environment.contentBucket}/content${mainUrl}`;
112
- }
113
- allEventDateFormat(datetime) {
114
- const date = new Date(datetime).getDate();
115
- const year = new Date(datetime).getFullYear();
116
- const month = new Date(datetime).getMonth();
117
- const hours = new Date(datetime).getHours();
118
- const minutes = new Date(datetime).getMinutes();
119
- const seconds = new Date(datetime).getSeconds();
120
- const formatedDate = new Date(year, month, date, hours, minutes, seconds, 0);
121
- const format = 'YYYY-MM-DD';
122
- const readableDateMonth = moment(formatedDate).format(format);
123
- const finalDateTimeValue = `${readableDateMonth}`;
124
- return finalDateTimeValue;
125
- }
126
- compareDate(startDate) {
127
- const now = new Date();
128
- const day = ('0' + (new Date().getDate())).slice(-2);
129
- const year = new Date().getFullYear();
130
- const month = ('0' + (now.getMonth() + 1)).slice(-2);
131
- const todaysdate = `${year}-${month}-${day}`;
132
- if (startDate === todaysdate) {
133
- return true;
134
- }
135
- return false;
136
- }
137
- customDateFormat(date, time) {
138
- const stime = time.split('+')[0];
139
- const hour = stime.substr(0, 2);
140
- const min = stime.substr(2, 3);
141
- return `${date} ${hour}${min}`;
142
- }
143
- setEventListData(eventObj) {
144
- if (eventObj !== undefined) {
145
- this.todaysEvents = [];
146
- const data = eventObj;
147
- Object.keys(data).forEach((index) => {
148
- const obj = data[index];
149
- const floor = Math.floor;
150
- const hours = floor(obj.duration / 60);
151
- const minutes = obj.duration % 60;
152
- const duration = (hours === 0) ? ((minutes === 0) ? '---' : `${minutes} minutes`) : (minutes === 0) ? (hours === 1) ?
153
- `${hours} hour` : `${hours} hours` : (hours === 1) ? `${hours} hour ${minutes} minutes` :
154
- `${hours} hours ${minutes} minutes`;
155
- const creatordata = obj.creatorDetails !== undefined ? obj.creatorDetails : [];
156
- const str = creatordata && creatordata.length > 0 ? creatordata.replace(/\\/g, '') : [];
157
- const creatorDetails = str && str.length > 0 ? JSON.parse(str) : creatordata;
158
- const stime = obj.startTime.split('+')[0];
159
- const hour = stime.substr(0, 2);
160
- const min = stime.substr(2, 3);
161
- const starttime = `${hour}${min}`;
162
- const etime = obj.endTime.split('+')[0];
163
- const ehour = etime.substr(0, 2);
164
- const emin = etime.substr(2, 3);
165
- const endtime = `${ehour}${emin}`;
166
- const eventDataObj = {
167
- event: obj,
168
- eventName: obj.name,
169
- eventStartTime: starttime,
170
- eventEndTime: endtime,
171
- eventStartDate: obj.startDate,
172
- eventCreatedOn: this.allEventDateFormat(obj.createdOn),
173
- eventDuration: duration,
174
- eventjoined: creatorDetails.length,
175
- eventThumbnail: obj.appIcon && (obj.appIcon !== null || obj.appIcon !== undefined) ?
176
- this.getPublicUrl(obj.appIcon) :
177
- '/assets/icons/Events_default.png',
178
- pastevent: false,
179
- };
180
- const isToday = this.compareDate(obj.startDate);
181
- if (isToday) {
182
- this.todaysEvents.push(eventDataObj);
183
- }
184
- });
185
- }
186
- }
187
- }
188
- EventService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EventService, deps: [{ token: i1.UtilityService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
189
- EventService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EventService, providedIn: 'root' });
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EventService, decorators: [{
191
- type: Injectable,
192
- args: [{
193
- providedIn: 'root',
194
- }]
195
- }], ctorParameters: function () { return [{ type: i1.UtilityService }, { type: undefined, decorators: [{
196
- type: Inject,
197
- args: ['environment']
198
- }] }]; } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi91dGlscy9zcmMvbGliL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBR3hDLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFBOzs7QUFDakMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFBO0FBSXRCLE1BQU0sT0FBTyxZQUFZO0lBaUJ2QixZQUNVLFVBQTBCLEVBQ1gsV0FBZ0I7UUFEL0IsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFqQnBDLGlCQUFZLEdBQVEsRUFBRSxDQUFBO1FBRWQsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQTtRQUN2RCxZQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUUxQyx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQTtRQUM5RCxtQkFBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUV4RCwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQTtRQUMvRCxvQkFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUUxRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUEyQixDQUFBO1FBQ3pELGlCQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQVF2RCxJQUFJLENBQUMsV0FBVyxHQUFH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LFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFBO2dCQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUMvQyxJQUFJLE9BQU8sRUFBRTtvQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtpQkFDckM7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQzs7MEdBcFBZLFlBQVksZ0RBbUJiLGFBQWE7OEdBbkJaLFlBQVksY0FGWCxNQUFNOzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFvQkksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IFdzRXZlbnRzIH0gZnJvbSAnLi9ldmVudC5tb2RlbCdcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuL3V0aWxpdHkuc2VydmljZSdcclxuLyogdHNsaW50OmRpc2FibGUqL1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0ICogYXMgX21vbWVudCBmcm9tICdtb21lbnQnXHJcbmNvbnN0IG1vbWVudCA9IF9tb21lbnRcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEV2ZW50U2VydmljZSB7XHJcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXVxyXG4gIFxyXG4gIHByaXZhdGUgZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PFdzRXZlbnRzLklXc0V2ZW50czxhbnk+PigpXHJcbiAgcHVibGljIGV2ZW50cyQgPSB0aGlzLmV2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuXHJcbiAgcHJpdmF0ZSBldmVudHNDaGF0Ym90U3ViamVjdCA9IG5ldyBTdWJqZWN0PFdzRXZlbnRzLklXc0V2ZW50czxhbnk+PigpXHJcbiAgcHVibGljIGNoYXRib3RFdmVudHMkID0gdGhpcy5ldmVudHNDaGF0Ym90U3ViamVjdC5hc09ic2VydmFibGUoKVxyXG5cclxuICBwcml2YXRlIGV2ZW50c0dldFN0YXJ0U3ViamVjdCA9IG5ldyBTdWJqZWN0PFdzRXZlbnRzLklXc0V2ZW50czxhbnk+PigpXHJcbiAgcHVibGljIGdldFN0YXJ0RXZlbnRzJCA9IHRoaXMuZXZlbnRzR2V0U3RhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXHJcblxyXG4gIHByaXZhdGUgZXZlbnRzUFJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8V3NFdmVudHMuSVdzRXZlbnRzPGFueT4+KClcclxuICBwdWJsaWMgZ2V0UFJFdmVudHMkID0gdGhpcy5ldmVudHNQUlN1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuICBlbnZpcm9ubWVudDogYW55XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXRpbGl0eVN2YzogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnksXHJcbiAgKSB7XHJcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcclxuICAgIC8vIHRoaXMuZm9jdXNDaGFuZ2VFdmVudExpc3RlbmVyKClcclxuICB9XHJcblxyXG4gIGRpc3BhdGNoRXZlbnQ8VD4oZXZlbnQ6IFdzRXZlbnRzLklXc0V2ZW50czxUPikge1xyXG4gICAgZXZlbnQucGFnZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoZXZlbnQucGFnZUNvbnRleHQpXHJcbiAgICB0aGlzLmV2ZW50c1N1YmplY3QubmV4dChldmVudClcclxuICB9XHJcblxyXG4gIGRpc3BhdGNoQ2hhdGJvdEV2ZW50PFQ+KGV2ZW50OiBXc0V2ZW50cy5JV3NFdmVudHM8VD4pIHtcclxuICAgIHRoaXMuZXZlbnRzQ2hhdGJvdFN1YmplY3QubmV4dChldmVudClcclxuICB9XHJcblxyXG4gIGRpc3BhdGNoR2V0U3RhcnRlZEV2ZW50PFQ+KGV2ZW50OiBXc0V2ZW50cy5JV3NFdmVudHM8VD4pIHtcclxuICAgIHRoaXMuZXZlbnRzR2V0U3RhcnRTdWJqZWN0Lm5leHQoZXZlbnQpXHJcbiAgfVxyXG5cclxuICBkaXNwYXRjaFBsYXRmb3JtUmF0aW5nRXZlbnQ8VD4oZXZlbnQ6IFdzRXZlbnRzLklXc0V2ZW50czxUPikge1xyXG4gICAgdGhpcy5ldmVudHNQUlN1YmplY3QubmV4dChldmVudClcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8gaGVscGVyIGZ1bmN0aW9uc1xyXG4gIHJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoZWRhdGE6IFdzRXZlbnRzLklUZWxlbWV0cnlFZGF0YSwgb2JqZWN0OiBhbnksIHBhZ2VDb250ZXh0PzogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0KSB7XHJcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oe1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YSxcclxuICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgcGFnZUNvbnRleHQ6IHRoaXMuZ2V0Q29udGV4dChwYWdlQ29udGV4dCksXHJcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcclxuICAgICAgfSxcclxuICAgICAgZnJvbTogJycsXHJcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByYWlzZUZlZWRiYWNrVGVsZW1ldHJ5KGVkYXRhOiBXc0V2ZW50cy5JVGVsZW1ldHJ5RWRhdGEsIG9iamVjdDogYW55LCBmcm9tPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oe1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YSxcclxuICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5GZWVkYmFjayxcclxuICAgICAgfSxcclxuICAgICAgZnJvbTogZnJvbSB8fCAnJyxcclxuICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIFJhaXNlIGN1c3RvbSBpbXByZXNzaW9uIGV2ZW50cyBlZzpvbiB0YWIgY2hhbmdlXHJcbiAgcmFpc2VDdXN0b21JbXByZXNzaW9uKG9iamVjdDogYW55LCBwYWdlQ29udGV4dD86IFdzRXZlbnRzLklUZWxlbWV0cnlQYWdlQ29udGV4dCkge1xyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW1wcmVzc2lvbj4oe1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgcGFnZUNvbnRleHQ6IHRoaXMuZ2V0Q29udGV4dChwYWdlQ29udGV4dCksXHJcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbXByZXNzaW9uLFxyXG4gICAgICB9LFxyXG4gICAgICBmcm9tOiAnJyxcclxuICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgZm9jdXNDaGFuZ2VFdmVudExpc3RlbmVyKCkge1xyXG4gIC8vICAgZnJvbUV2ZW50KHdpbmRvdywgJ2ZvY3VzJykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAvLyAgICAgdGhpcy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KCdmb2N1cycsICdnYWluZWQnLCB7fSlcclxuICAvLyAgIH0pXHJcbiAgLy8gICBmcm9tRXZlbnQod2luZG93LCAnYmx1cicpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgLy8gICAgIHRoaXMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeSgnZm9jdXMnLCAnbG9zdCcsIHt9KVxyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG4gIC8vIE1ldGhvZCB0byBnZXQgdGhlIGNvbnRleHQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlbGVtZXRyeSBpbnRlcmFjdCBldmVudFxyXG4gIHByaXZhdGUgZ2V0Q29udGV4dChwYWdlQ29udGV4dDogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0IHwgdW5kZWZpbmVkKTogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0IHtcclxuICAgIGNvbnN0IHJvdXRlRGF0YUNvbnRleHQgPSB0aGlzLnV0aWxpdHlTdmMucm91dGVEYXRhXHJcbiAgICAvLyBpbml0aWFsaXplIHdpdGggdGhlIHJvdXRlIGRhdGEgY29uZmlndXJhdGlvbiAtIGN1cnJlbnQgcm91dGUncyBwYWdlSUQgJiBtb2R1bGVcclxuICAgIGNvbnN0IGZpbmFsQ29udGV4dDogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0ID0ge1xyXG4gICAgICBwYWdlSWQ6IHJvdXRlRGF0YUNvbnRleHQucGFnZUlkLFxyXG4gICAgICBtb2R1bGU6IHJvdXRlRGF0YUNvbnRleHQubW9kdWxlLFxyXG4gICAgfVxyXG4gICAgaWYgKHBhZ2VDb250ZXh0KSB7XHJcbiAgICAgIC8vIGlmIGNvbnRleHQgaGFzIHBhZ2VJZEV4dCwgYXBwZW5kIGl0IHRvIHRoZSByb3V0ZSdzIHBhZ2VJZFxyXG4gICAgICBpZiAocGFnZUNvbnRleHQucGFnZUlkRXh0KSB7XHJcbiAgICAgICAgZmluYWxDb250ZXh0LnBhZ2VJZCA9IGAke3JvdXRlRGF0YUNvbnRleHQucGFnZUlkfV8ke3BhZ2VDb250ZXh0LnBhZ2VJZEV4dH1gXHJcbiAgICAgIH0gZWxzZSBpZiAocGFnZUNvbnRleHQucGFnZUlkKSB7XHJcbiAgICAgICAgLy8gZWxzZSBjb250ZXh0IGhhcyBwYWdlSWQsIG92ZXJyaWRlIGl0IHRvIHRoZSBmaW5hbCBwYWdlSURcclxuICAgICAgICBmaW5hbENvbnRleHQucGFnZUlkID0gcGFnZUNvbnRleHQucGFnZUlkXHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgY29udGV4dCBoYXMgbW9kdWxlLCBvdmVycmlkZSBpdCB0byB0aGUgZmluYWwgbW9kdWxlXHJcbiAgICAgIGlmIChwYWdlQ29udGV4dC5tb2R1bGUpIHtcclxuICAgICAgICBmaW5hbENvbnRleHQubW9kdWxlID0gcGFnZUNvbnRleHQubW9kdWxlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmluYWxDb250ZXh0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlVGFiVGVsZW1ldHJ5KHN1YlR5cGU6IHN0cmluZywgZGF0YTogV3NFdmVudHMuSVRlbGVtZXRyeVRhYkRhdGEsIG9iamVjdD86YW55KSB7XHJcbiAgICAvLyByYWlzZSBhIHRhYiBjbGljayBpbnRlcmFjdCBldmVudFxyXG4gICAgdGhpcy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxyXG4gICAgICB7XHJcbiAgICAgICAgc3ViVHlwZSxcclxuICAgICAgICB0eXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RUeXBlcy5DTElDSyxcclxuICAgICAgICBpZDogYCR7Xy5jYW1lbENhc2UoZGF0YS5sYWJlbCl9LXRhYmAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICAvLyBjb250ZXh0OiB7XHJcbiAgICAgICAgLy8gICBwb3NpdGlvbjogZGF0YS5pbmRleCxcclxuICAgICAgICAvLyB9LFxyXG4gICAgICAgIC4uLm9iamVjdFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgIHBhZ2VJZEV4dDogYCR7Xy5jYW1lbENhc2UoZGF0YS5sYWJlbCl9LXRhYmAsXHJcbiAgICB9KVxyXG5cclxuICAgIC8vIHJhaXNlIGEgdGFiIGNsaWNrIGltcHJlc3Npb24gZXZlbnRcclxuICAgIHRoaXMucmFpc2VDdXN0b21JbXByZXNzaW9uKHtcclxuICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogZGF0YS5pbmRleCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi5vYmplY3RcclxuICAgICAgfSx7XHJcbiAgICAgIHBhZ2VJZEV4dDogYCR7Xy5jYW1lbENhc2UoZGF0YS5sYWJlbCl9LXRhYmAsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0UHVibGljVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG1haW5VcmwgPSB1cmwuc3BsaXQoJy9jb250ZW50JykucG9wKCkgfHwgJydcclxuICAgIHJldHVybiBgJHt0aGlzLmVudmlyb25tZW50LmNvbnRlbnRIb3N0fS8ke3RoaXMuZW52aXJvbm1lbnQuY29udGVudEJ1Y2tldH0vY29udGVudCR7bWFpblVybH1gXHJcbiAgfVxyXG5cclxuICBhbGxFdmVudERhdGVGb3JtYXQoZGF0ZXRpbWU6IGFueSkge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGV0aW1lKS5nZXREYXRlKClcclxuICAgIGNvbnN0IHllYXIgPSBuZXcgRGF0ZShkYXRldGltZSkuZ2V0RnVsbFllYXIoKVxyXG4gICAgY29uc3QgbW9udGggPSBuZXcgRGF0ZShkYXRldGltZSkuZ2V0TW9udGgoKVxyXG4gICAgY29uc3QgaG91cnMgPSBuZXcgRGF0ZShkYXRldGltZSkuZ2V0SG91cnMoKVxyXG4gICAgY29uc3QgbWludXRlcyA9IG5ldyBEYXRlKGRhdGV0aW1lKS5nZXRNaW51dGVzKClcclxuICAgIGNvbnN0IHNlY29uZHMgPSBuZXcgRGF0ZShkYXRldGltZSkuZ2V0U2Vjb25kcygpXHJcbiAgICBjb25zdCBmb3JtYXRlZERhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIDApXHJcbiAgICAvLyBsZXQgZm9ybWF0ID0gJ1lZWVktTU0tREQgaGg6bW0gYSdcclxuICAgIC8vIGlmICghdGltZUFsbG93KSB7XHJcbiAgICBjb25zdCBmb3JtYXQgPSAnWVlZWS1NTS1ERCdcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IHJlYWRhYmxlRGF0ZU1vbnRoID0gbW9tZW50KGZvcm1hdGVkRGF0ZSkuZm9ybWF0KGZvcm1hdClcclxuICAgIGNvbnN0IGZpbmFsRGF0ZVRpbWVWYWx1ZSA9IGAke3JlYWRhYmxlRGF0ZU1vbnRofWBcclxuICAgIHJldHVybiBmaW5hbERhdGVUaW1lVmFsdWVcclxuICB9XHJcblxyXG4gIGNvbXBhcmVEYXRlKHN0YXJ0RGF0ZTogYW55KSB7XHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXHJcblxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci10ZW1wbGF0ZVxyXG4gICAgY29uc3QgZGF5ID0gICgnMCcgKyAobmV3IERhdGUoKS5nZXREYXRlKCkpKS5zbGljZSgtMilcclxuICAgIGNvbnN0IHllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKClcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItdGVtcGxhdGVcclxuICAgIGNvbnN0IG1vbnRoID0gKCcwJyArIChub3cuZ2V0TW9udGgoKSArIDEpKS5zbGljZSgtMilcclxuICAgIGNvbnN0IHRvZGF5c2RhdGUgPSBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gXHJcbiAgICBpZiAoc3RhcnREYXRlID09PSB0b2RheXNkYXRlKSAge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBjdXN0b21EYXRlRm9ybWF0KGRhdGU6IGFueSwgdGltZTogYW55KSB7XHJcbiAgICBjb25zdCBzdGltZSA9IHRpbWUuc3BsaXQoJysnKVswXVxyXG4gICAgY29uc3QgaG91ciA9IHN0aW1lLnN1YnN0cigwLCAyKVxyXG4gICAgY29uc3QgbWluID0gc3RpbWUuc3Vic3RyKDIsIDMpXHJcbiAgICByZXR1cm4gYCR7ZGF0ZX0gJHtob3VyfSR7bWlufWBcclxuIH1cclxuXHJcblxyXG4gc2V0RXZlbnRMaXN0RGF0YShldmVudE9iajogYW55KSB7XHJcbiAgaWYgKGV2ZW50T2JqICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMudG9kYXlzRXZlbnRzID0gW11cclxuICAgIGNvbnN0IGRhdGEgPSBldmVudE9ialxyXG4gICAvLyBjb25zb2xlLmxvZygnc3RyaXAgY29tcCcsIGRhdGEpXHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IGRhdGFbaW5kZXhdXHJcbiAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vclxyXG4gICAgICBjb25zdCBob3VycyA9IGZsb29yKG9iai5kdXJhdGlvbiAvIDYwKVxyXG4gICAgICBjb25zdCBtaW51dGVzID0gb2JqLmR1cmF0aW9uICUgNjBcclxuICAgICAgY29uc3QgZHVyYXRpb24gPSAoaG91cnMgPT09IDApID8gKChtaW51dGVzID09PSAwKSA/ICctLS0nIDogYCR7bWludXRlc30gbWludXRlc2ApIDogKG1pbnV0ZXMgPT09IDApID8gKGhvdXJzID09PSAxKSA/XHJcbiAgICAgICAgYCR7aG91cnN9IGhvdXJgIDogYCR7aG91cnN9IGhvdXJzYCA6IChob3VycyA9PT0gMSkgPyBgJHtob3Vyc30gaG91ciAke21pbnV0ZXN9IG1pbnV0ZXNgIDpcclxuICAgICAgICBgJHtob3Vyc30gaG91cnMgJHttaW51dGVzfSBtaW51dGVzYFxyXG4gICAgICBjb25zdCBjcmVhdG9yZGF0YSA9IG9iai5jcmVhdG9yRGV0YWlscyAhPT0gdW5kZWZpbmVkID8gb2JqLmNyZWF0b3JEZXRhaWxzIDogW11cclxuICAgICAgY29uc3Qgc3RyID0gY3JlYXRvcmRhdGEgJiYgY3JlYXRvcmRhdGEubGVuZ3RoID4gMCA/IGNyZWF0b3JkYXRhLnJlcGxhY2UoL1xcXFwvZywgJycpIDogW11cclxuICAgICAgY29uc3QgY3JlYXRvckRldGFpbHMgPSBzdHIgJiYgc3RyLmxlbmd0aCA+IDAgPyBKU09OLnBhcnNlKHN0cikgOiBjcmVhdG9yZGF0YVxyXG5cclxuICAgICAgY29uc3Qgc3RpbWUgPSBvYmouc3RhcnRUaW1lLnNwbGl0KCcrJylbMF1cclxuICAgICAgY29uc3QgaG91ciA9IHN0aW1lLnN1YnN0cigwLCAyKVxyXG4gICAgICBjb25zdCBtaW4gPSBzdGltZS5zdWJzdHIoMiwgMylcclxuICAgICAgY29uc3Qgc3RhcnR0aW1lID0gYCR7aG91cn0ke21pbn1gXHJcblxyXG4gICAgICBjb25zdCBldGltZSA9IG9iai5lbmRUaW1lLnNwbGl0KCcrJylbMF1cclxuICAgICAgY29uc3QgZWhvdXIgPSBldGltZS5zdWJzdHIoMCwgMilcclxuICAgICAgY29uc3QgZW1pbiA9IGV0aW1lLnN1YnN0cigyLCAzKVxyXG4gICAgICBjb25zdCBlbmR0aW1lID0gYCR7ZWhvdXJ9JHtlbWlufWBcclxuXHJcbiAgICAgIGNvbnN0IGV2ZW50RGF0YU9iaiA9IHtcclxuICAgICAgICBldmVudDogb2JqLFxyXG4gICAgICAgIGV2ZW50TmFtZTogb2JqLm5hbWUsXHJcbiAgICAgICAgZXZlbnRTdGFydFRpbWU6IHN0YXJ0dGltZSxcclxuICAgICAgICBldmVudEVuZFRpbWU6IGVuZHRpbWUsXHJcbiAgICAgICAgZXZlbnRTdGFydERhdGU6IG9iai5zdGFydERhdGUsXHJcbiAgICAgICAgZXZlbnRDcmVhdGVkT246IHRoaXMuYWxsRXZlbnREYXRlRm9ybWF0KG9iai5jcmVhdGVkT24pLFxyXG4gICAgICAgIGV2ZW50RHVyYXRpb246IGR1cmF0aW9uLFxyXG4gICAgICAgIGV2ZW50am9pbmVkOiBjcmVhdG9yRGV0YWlscy5sZW5ndGgsXHJcbiAgICAgICAgZXZlbnRUaHVtYm5haWw6IG9iai5hcHBJY29uICYmIChvYmouYXBwSWNvbiAhPT0gbnVsbCB8fCBvYmouYXBwSWNvbiAhPT0gdW5kZWZpbmVkKSA/XHJcbiAgICAgICAgICB0aGlzLmdldFB1YmxpY1VybChvYmouYXBwSWNvbikgOlxyXG4gICAgICAgICAgJy9hc3NldHMvaWNvbnMvRXZlbnRzX2RlZmF1bHQucG5nJyxcclxuICAgICAgICBwYXN0ZXZlbnQ6IGZhbHNlLFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlzVG9kYXkgPSB0aGlzLmNvbXBhcmVEYXRlKG9iai5zdGFydERhdGUpXHJcbiAgICAgIGlmIChpc1RvZGF5KSB7XHJcbiAgICAgICAgdGhpcy50b2RheXNFdmVudHMucHVzaChldmVudERhdGFPYmopXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbn1cclxuIl19