@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.
- package/esm2022/lib/components/image-crop/image-crop.component.mjs +172 -0
- package/esm2022/lib/components/image-crop/image-crop.module.mjs +55 -0
- package/esm2022/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.mjs +87 -0
- package/esm2022/lib/directives/class-change-on-scroll/class-change-on-scroll.module.mjs +20 -0
- package/{esm2015/lib/directives/default-thumbnail/default-thumbnail.directive.js → esm2022/lib/directives/default-thumbnail/default-thumbnail.directive.mjs} +4 -4
- package/esm2022/lib/directives/default-thumbnail/default-thumbnail.module.mjs +20 -0
- package/{esm2015/lib/directives/image-responsive/image-responsive.directive.js → esm2022/lib/directives/image-responsive/image-responsive.directive.mjs} +4 -4
- package/esm2022/lib/directives/image-responsive/image-responsive.module.mjs +20 -0
- 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
- package/esm2022/lib/directives/in-view-port/in-view-port.module.mjs +20 -0
- package/esm2022/lib/directives/navigation/navigation.directive.mjs +43 -0
- package/esm2022/lib/directives/navigation/navigation.module.mjs +20 -0
- package/{esm2015/lib/directives/permission/permission.directive.js → esm2022/lib/directives/permission/permission.directive.mjs} +4 -4
- package/esm2022/lib/directives/permission/permission.module.mjs +20 -0
- package/esm2022/lib/helpers/horizontal-scroller/horizontal-scroller.component.mjs +96 -0
- package/esm2022/lib/helpers/horizontal-scroller/horizontal-scroller.module.mjs +32 -0
- package/esm2022/lib/helpers/logout/logout.component.mjs +44 -0
- package/esm2022/lib/helpers/logout/logout.module.mjs +27 -0
- package/esm2022/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.mjs +18 -0
- 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
- package/esm2022/lib/pipes/pipe-count-transform/pipe-count-transform.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-date-concat/pipe-date-concat.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-filter/pipe-filter.module.mjs +20 -0
- package/{esm2015/lib/pipes/pipe-filter/pipe-filter.pipe.js → esm2022/lib/pipes/pipe-filter/pipe-filter.pipe.mjs} +4 -4
- package/esm2022/lib/pipes/pipe-filter-search/pipe-filter-search.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-limit-to/pipe-limit-to.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-list-filter/pipe-list-filter.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-name-transform/pipe-name-transform.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-order-by/pipe-order-by.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-partial-content/pipe-partial-content.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-relative-time/pipe-relative-time.module.mjs +20 -0
- 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
- package/esm2022/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.mjs +20 -0
- 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
- package/{esm2015/lib/resolvers/explore-detail.resolver.js → esm2022/lib/resolvers/explore-detail.resolver.mjs} +4 -4
- package/{esm2015/lib/resolvers/marketing-offering.resolve.js → esm2022/lib/resolvers/marketing-offering.resolve.mjs} +4 -4
- package/{esm2015/lib/resolvers/page.resolver.js → esm2022/lib/resolvers/page.resolver.mjs} +4 -4
- package/esm2022/lib/services/auth-keycloak.service.mjs +52 -0
- package/esm2022/lib/services/auth-microsoft.service.mjs +173 -0
- package/{esm2015/lib/services/configurations.service.js → esm2022/lib/services/configurations.service.mjs} +4 -4
- package/esm2022/lib/services/event.service.mjs +204 -0
- package/{esm2015/lib/services/logger.service.js → esm2022/lib/services/logger.service.mjs} +4 -4
- package/esm2022/lib/services/subapplication-respond.service.mjs +76 -0
- package/esm2022/lib/services/telemetry.service.mjs +502 -0
- package/esm2022/lib/services/user-preference.service.mjs +92 -0
- package/{esm2015/lib/services/utility.service.js → esm2022/lib/services/utility.service.mjs} +4 -4
- package/{esm2015/lib/services/value.service.js → esm2022/lib/services/value.service.mjs} +4 -4
- package/esm2022/lib/services/widget-content.service.mjs +182 -0
- package/{fesm2015/sunbird-cb-utils.js → fesm2022/sunbird-cb-utils.mjs} +573 -545
- package/fesm2022/sunbird-cb-utils.mjs.map +1 -0
- package/lib/components/image-crop/image-crop.component.d.ts +3 -3
- package/lib/components/image-crop/image-crop.component.d.ts.map +1 -1
- package/lib/components/image-crop/image-crop.module.d.ts +6 -6
- package/lib/components/image-crop/image-crop.module.d.ts.map +1 -1
- package/lib/constants/misc.constants.d.ts +2 -2
- package/lib/constants/misc.constants.d.ts.map +1 -1
- package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts +1 -1
- package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts +1 -1
- package/lib/directives/image-responsive/image-responsive.directive.d.ts +1 -1
- package/lib/directives/in-view-port/in-view-port.directive.d.ts +1 -1
- package/lib/directives/navigation/navigation.directive.d.ts +1 -1
- package/lib/directives/permission/permission.directive.d.ts +1 -1
- package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts +1 -1
- package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts +3 -3
- package/lib/helpers/logout/logout.component.d.ts +2 -2
- package/lib/helpers/logout/logout.component.d.ts.map +1 -1
- package/lib/helpers/logout/logout.module.d.ts +3 -3
- package/lib/helpers/logout/logout.module.d.ts.map +1 -1
- package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts +1 -1
- package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts +1 -1
- package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts +1 -1
- package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +1 -1
- package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts +1 -1
- package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts +1 -1
- package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts +1 -1
- package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts +1 -1
- package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts +1 -1
- package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts +1 -1
- package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts +5 -5
- package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts +1 -1
- package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts +1 -1
- package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts +1 -1
- package/lib/resolvers/explore-detail.resolver.d.ts +2 -2
- package/lib/resolvers/explore-detail.resolver.d.ts.map +1 -1
- package/lib/resolvers/marketing-offering.resolve.d.ts +2 -2
- package/lib/resolvers/marketing-offering.resolve.d.ts.map +1 -1
- package/lib/resolvers/page.resolver.d.ts +2 -2
- package/lib/resolvers/page.resolver.d.ts.map +1 -1
- package/lib/services/widget-resolver.model.d.ts +1 -1
- package/lib/services/widget-resolver.model.d.ts.map +1 -1
- package/package.json +26 -18
- package/sunbird-cb-utils-1.0.20-ang-13-16.tgz +0 -0
- package/bundles/sunbird-cb-utils.umd.js +0 -4785
- package/bundles/sunbird-cb-utils.umd.js.map +0 -1
- package/esm2015/lib/components/image-crop/image-crop.component.js +0 -166
- package/esm2015/lib/components/image-crop/image-crop.module.js +0 -58
- package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +0 -87
- package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +0 -22
- package/esm2015/lib/directives/default-thumbnail/default-thumbnail.module.js +0 -22
- package/esm2015/lib/directives/image-responsive/image-responsive.module.js +0 -22
- package/esm2015/lib/directives/in-view-port/in-view-port.module.js +0 -22
- package/esm2015/lib/directives/navigation/navigation.directive.js +0 -43
- package/esm2015/lib/directives/navigation/navigation.module.js +0 -22
- package/esm2015/lib/directives/permission/permission.module.js +0 -22
- package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +0 -100
- package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +0 -34
- package/esm2015/lib/helpers/logout/logout.component.js +0 -48
- package/esm2015/lib/helpers/logout/logout.module.js +0 -30
- package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +0 -18
- package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +0 -22
- package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +0 -22
- package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +0 -22
- package/esm2015/lib/pipes/pipe-filter/pipe-filter.module.js +0 -22
- package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +0 -22
- package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +0 -22
- package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +0 -22
- package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +0 -22
- package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +0 -22
- package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.module.js +0 -22
- package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +0 -22
- package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +0 -22
- package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +0 -22
- package/esm2015/lib/services/auth-keycloak.service.js +0 -57
- package/esm2015/lib/services/auth-microsoft.service.js +0 -184
- package/esm2015/lib/services/event.service.js +0 -199
- package/esm2015/lib/services/subapplication-respond.service.js +0 -70
- package/esm2015/lib/services/telemetry.service.js +0 -434
- package/esm2015/lib/services/user-preference.service.js +0 -82
- package/esm2015/lib/services/widget-content.service.js +0 -182
- package/fesm2015/sunbird-cb-utils.js.map +0 -1
- package/sunbird-cb-utils-1.0.19-ang-13-16.tgz +0 -0
- /package/{esm2015/lib/constants/features.enum.js → esm2022/lib/constants/features.enum.mjs} +0 -0
- /package/{esm2015/lib/constants/instances.enum.js → esm2022/lib/constants/instances.enum.mjs} +0 -0
- /package/{esm2015/lib/constants/misc.constants.js → esm2022/lib/constants/misc.constants.mjs} +0 -0
- /package/{esm2015/lib/helpers/functions/getStringifiedQueryParams.js → esm2022/lib/helpers/functions/getStringifiedQueryParams.mjs} +0 -0
- /package/{esm2015/lib/models/contentRating.model.js → esm2022/lib/models/contentRating.model.mjs} +0 -0
- /package/{esm2015/lib/resolvers/page.constant.js → esm2022/lib/resolvers/page.constant.mjs} +0 -0
- /package/{esm2015/lib/resolvers/page.model.js → esm2022/lib/resolvers/page.model.mjs} +0 -0
- /package/{esm2015/lib/resolvers/resolver.model.js → esm2022/lib/resolvers/resolver.model.mjs} +0 -0
- /package/{esm2015/lib/services/card-content.model.js → esm2022/lib/services/card-content.model.mjs} +0 -0
- /package/{esm2015/lib/services/configurations.model.js → esm2022/lib/services/configurations.model.mjs} +0 -0
- /package/{esm2015/lib/services/content-strip-multiple.model.js → esm2022/lib/services/content-strip-multiple.model.mjs} +0 -0
- /package/{esm2015/lib/services/event.model.js → esm2022/lib/services/event.model.mjs} +0 -0
- /package/{esm2015/lib/services/ms-office.model.js → esm2022/lib/services/ms-office.model.mjs} +0 -0
- /package/{esm2015/lib/services/user-preference.model.js → esm2022/lib/services/user-preference.model.mjs} +0 -0
- /package/{esm2015/lib/services/widget-content.model.js → esm2022/lib/services/widget-content.model.mjs} +0 -0
- /package/{esm2015/lib/services/widget-resolver.model.js → esm2022/lib/services/widget-resolver.model.mjs} +0 -0
- /package/{esm2015/lib/services/widget-search.model.js → esm2022/lib/services/widget-search.model.mjs} +0 -0
- /package/{esm2015/public-api.js → esm2022/public-api.mjs} +0 -0
- /package/{esm2015/sunbird-cb-utils.js → esm2022/sunbird-cb-utils.mjs} +0 -0
- /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
|