@propmix/profet-common-header 3.5.0 → 3.6.0
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/README.md +46 -1
- package/esm2020/lib/api-endpoints.def.mjs +14 -0
- package/esm2020/lib/api-gateway.service.mjs +69 -0
- package/esm2020/lib/common-header.interface.mjs +11 -0
- package/{esm2022 → esm2020}/lib/common-header.module.mjs +33 -33
- package/esm2020/lib/common-header.service.mjs +177 -0
- package/{esm2022 → esm2020}/lib/company-switch-warning/company-switch-warning.component.mjs +6 -6
- package/esm2020/lib/config/app.config.mjs +21 -0
- package/esm2020/lib/header/header.component.mjs +429 -0
- package/esm2020/lib/pipes/active-route.pipe.mjs +24 -0
- package/{esm2022 → esm2020}/lib/pipes/milliseconds-to-minute.pipe.mjs +4 -4
- package/esm2020/lib/session-expiry-info/session-expiry-info.component.mjs +36 -0
- package/esm2020/lib/utils/Utilities.mjs +41 -0
- package/fesm2015/propmix-profet-common-header.mjs +964 -0
- package/fesm2015/propmix-profet-common-header.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/propmix-profet-common-header.mjs +115 -96
- package/fesm2020/propmix-profet-common-header.mjs.map +1 -0
- package/lib/common-header.interface.d.ts +8 -0
- package/lib/header/header.component.d.ts +6 -3
- package/package.json +11 -5
- package/esm2022/lib/api-endpoints.def.mjs +0 -14
- package/esm2022/lib/api-gateway.service.mjs +0 -69
- package/esm2022/lib/common-header.interface.mjs +0 -2
- package/esm2022/lib/common-header.service.mjs +0 -177
- package/esm2022/lib/config/app.config.mjs +0 -21
- package/esm2022/lib/header/header.component.mjs +0 -420
- package/esm2022/lib/pipes/active-route.pipe.mjs +0 -24
- package/esm2022/lib/session-expiry-info/session-expiry-info.component.mjs +0 -36
- package/esm2022/lib/utils/Utilities.mjs +0 -41
- package/fesm2022/propmix-profet-common-header.mjs.map +0 -1
- /package/{esm2022 → esm2020}/lib/utils/app.constants.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/utils/apps.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/utils/image.dataurl.mjs +0 -0
- /package/{esm2022 → esm2020}/propmix-profet-common-header.mjs +0 -0
- /package/{esm2022 → esm2020}/public-api.mjs +0 -0
|
@@ -37,3 +37,11 @@ export interface Company {
|
|
|
37
37
|
export interface SessionOutInfo {
|
|
38
38
|
sessionOutTimeInMins?: number;
|
|
39
39
|
}
|
|
40
|
+
export declare enum LogoutReason {
|
|
41
|
+
USER_INITIATED = "USER_INITIATED",
|
|
42
|
+
SESSION_TIMEOUT = "SESSION_TIMEOUT"
|
|
43
|
+
}
|
|
44
|
+
export declare enum LogoutStatus {
|
|
45
|
+
INITIATED = "INITIATED",
|
|
46
|
+
COMPLETED = "COMPLETED"
|
|
47
|
+
}
|
|
@@ -4,7 +4,7 @@ import { MatMenuTrigger } from '@angular/material/menu';
|
|
|
4
4
|
import { MatSidenav } from '@angular/material/sidenav';
|
|
5
5
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
6
6
|
import { Router } from '@angular/router';
|
|
7
|
-
import { AppMenu, Company } from '../common-header.interface';
|
|
7
|
+
import { AppMenu, Company, LogoutReason, LogoutStatus } from '../common-header.interface';
|
|
8
8
|
import { CommonHeaderService } from '../common-header.service';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export declare class HeaderComponent implements OnInit, OnDestroy {
|
|
@@ -40,7 +40,10 @@ export declare class HeaderComponent implements OnInit, OnDestroy {
|
|
|
40
40
|
INACTIVITY_LIMIT: number;
|
|
41
41
|
appLogoNavigationUrl?: string;
|
|
42
42
|
disableAppMenu?: boolean;
|
|
43
|
-
logoutEvent: EventEmitter<
|
|
43
|
+
logoutEvent: EventEmitter<{
|
|
44
|
+
reason: LogoutReason;
|
|
45
|
+
status: LogoutStatus;
|
|
46
|
+
}>;
|
|
44
47
|
companyControl: FormControl<any>;
|
|
45
48
|
appConfig: any;
|
|
46
49
|
companyList: Company[];
|
|
@@ -74,5 +77,5 @@ export declare class HeaderComponent implements OnInit, OnDestroy {
|
|
|
74
77
|
get resolvedAppLogoNavigationUrl(): string | undefined;
|
|
75
78
|
get resolvedDisableAppMenu(): boolean | undefined;
|
|
76
79
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderComponent, never>;
|
|
77
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "lib-header", never, { "INACTIVITY_LIMIT":
|
|
80
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "lib-header", never, { "INACTIVITY_LIMIT": "INACTIVITY_LIMIT"; "appLogoNavigationUrl": "appLogoNavigationUrl"; "disableAppMenu": "disableAppMenu"; }, { "logoutEvent": "logoutEvent"; }, never, ["*"], false, never>;
|
|
78
81
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@propmix/profet-common-header",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">=15.2.0",
|
|
6
6
|
"@angular/core": ">=15.2.0",
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
"tslib": "^2.3.0"
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
14
|
-
"module": "
|
|
14
|
+
"module": "fesm2015/propmix-profet-common-header.mjs",
|
|
15
|
+
"es2020": "fesm2020/propmix-profet-common-header.mjs",
|
|
16
|
+
"esm2020": "esm2020/propmix-profet-common-header.mjs",
|
|
17
|
+
"fesm2020": "fesm2020/propmix-profet-common-header.mjs",
|
|
18
|
+
"fesm2015": "fesm2015/propmix-profet-common-header.mjs",
|
|
15
19
|
"typings": "index.d.ts",
|
|
16
20
|
"exports": {
|
|
17
21
|
"./package.json": {
|
|
@@ -19,9 +23,11 @@
|
|
|
19
23
|
},
|
|
20
24
|
".": {
|
|
21
25
|
"types": "./index.d.ts",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
26
|
+
"esm2020": "./esm2020/propmix-profet-common-header.mjs",
|
|
27
|
+
"es2020": "./fesm2020/propmix-profet-common-header.mjs",
|
|
28
|
+
"es2015": "./fesm2015/propmix-profet-common-header.mjs",
|
|
29
|
+
"node": "./fesm2015/propmix-profet-common-header.mjs",
|
|
30
|
+
"default": "./fesm2020/propmix-profet-common-header.mjs"
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
33
|
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export class EndPoints {
|
|
2
|
-
static { this.API_URLS = {
|
|
3
|
-
getAppsApi: '/api/company/getAllUserAccessApplications',
|
|
4
|
-
getCompanyApplications: '/api/company/getCompanyApplications',
|
|
5
|
-
getUserCompanies: '/api/profile/getUserCompanies', // TODO -- Needs to remove
|
|
6
|
-
updateUserCompany: '/api/company/updateUserCompany',
|
|
7
|
-
fetchCompanyProfile: '/fetchCompanyProfile',
|
|
8
|
-
getUserDetails: '/api/user/getUserInformation',
|
|
9
|
-
getCompanyList: '/api/user/getUserCompanies',
|
|
10
|
-
getAppMenu: '/api/user/getAppMenu',
|
|
11
|
-
updateLastAccessedApplication: '/api/user/updateLastAccessedApplication'
|
|
12
|
-
}; }
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWVuZHBvaW50cy5kZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvYXBpLWVuZHBvaW50cy5kZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFNBQVM7YUFDSixhQUFRLEdBQUc7UUFDckIsVUFBVSxFQUFFLDJDQUEyQztRQUN2RCxzQkFBc0IsRUFBRSxxQ0FBcUM7UUFDN0QsZ0JBQWdCLEVBQUUsK0JBQStCLEVBQUcsMEJBQTBCO1FBQzlFLGlCQUFpQixFQUFFLGdDQUFnQztRQUNuRCxtQkFBbUIsRUFBRSxzQkFBc0I7UUFDM0MsY0FBYyxFQUFFLDhCQUE4QjtRQUU5QyxjQUFjLEVBQUUsNEJBQTRCO1FBQzVDLFVBQVUsRUFBRSxzQkFBc0I7UUFDbEMsNkJBQTZCLEVBQUUseUNBQXlDO0tBQzNFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgRW5kUG9pbnRzIHtcbiAgICBwdWJsaWMgc3RhdGljIEFQSV9VUkxTID0ge1xuICAgICAgICBnZXRBcHBzQXBpOiAnL2FwaS9jb21wYW55L2dldEFsbFVzZXJBY2Nlc3NBcHBsaWNhdGlvbnMnLFxuICAgICAgICBnZXRDb21wYW55QXBwbGljYXRpb25zOiAnL2FwaS9jb21wYW55L2dldENvbXBhbnlBcHBsaWNhdGlvbnMnLFxuICAgICAgICBnZXRVc2VyQ29tcGFuaWVzOiAnL2FwaS9wcm9maWxlL2dldFVzZXJDb21wYW5pZXMnLCAgLy8gVE9ETyAtLSBOZWVkcyB0byByZW1vdmVcbiAgICAgICAgdXBkYXRlVXNlckNvbXBhbnk6ICcvYXBpL2NvbXBhbnkvdXBkYXRlVXNlckNvbXBhbnknLFxuICAgICAgICBmZXRjaENvbXBhbnlQcm9maWxlOiAnL2ZldGNoQ29tcGFueVByb2ZpbGUnLFxuICAgICAgICBnZXRVc2VyRGV0YWlsczogJy9hcGkvdXNlci9nZXRVc2VySW5mb3JtYXRpb24nLFxuXG4gICAgICAgIGdldENvbXBhbnlMaXN0OiAnL2FwaS91c2VyL2dldFVzZXJDb21wYW5pZXMnLFxuICAgICAgICBnZXRBcHBNZW51OiAnL2FwaS91c2VyL2dldEFwcE1lbnUnLFxuICAgICAgICB1cGRhdGVMYXN0QWNjZXNzZWRBcHBsaWNhdGlvbjogJy9hcGkvdXNlci91cGRhdGVMYXN0QWNjZXNzZWRBcHBsaWNhdGlvbidcbiAgICB9XG59Il19
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { Injectable, inject } from '@angular/core';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class ApiGatewayService {
|
|
6
|
-
constructor() {
|
|
7
|
-
this._http = inject(HttpClient);
|
|
8
|
-
}
|
|
9
|
-
doGet(url, config) {
|
|
10
|
-
return new Observable(observer => {
|
|
11
|
-
if (!config) {
|
|
12
|
-
config = {
|
|
13
|
-
isLoaderHidden: false
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
;
|
|
17
|
-
let headers;
|
|
18
|
-
if (config.isUnauthorized) {
|
|
19
|
-
headers = {
|
|
20
|
-
skip: "true"
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
// this._loaderService.requestStarted(config);
|
|
24
|
-
this._http
|
|
25
|
-
.get(url, { headers: headers })
|
|
26
|
-
.subscribe({
|
|
27
|
-
next: (data) => {
|
|
28
|
-
// this._loaderService.requestEnded();
|
|
29
|
-
observer.next(data);
|
|
30
|
-
observer.complete();
|
|
31
|
-
},
|
|
32
|
-
error: (error) => {
|
|
33
|
-
// this.handleError(error, config, observer);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
doPost(url, req_body) {
|
|
39
|
-
return new Observable(observer => {
|
|
40
|
-
let headers;
|
|
41
|
-
this._http
|
|
42
|
-
.post(url, req_body, { headers: headers })
|
|
43
|
-
.subscribe({
|
|
44
|
-
next: (data) => {
|
|
45
|
-
if (data && data.hasOwnProperty('status')) {
|
|
46
|
-
observer.next(data);
|
|
47
|
-
observer.complete();
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
observer.next(data);
|
|
51
|
-
observer.complete();
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
error: (error) => {
|
|
55
|
-
// this.handleError(error, config, observer);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiGatewayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
61
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiGatewayService, providedIn: 'root' }); }
|
|
62
|
-
}
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiGatewayService, decorators: [{
|
|
64
|
-
type: Injectable,
|
|
65
|
-
args: [{
|
|
66
|
-
providedIn: 'root'
|
|
67
|
-
}]
|
|
68
|
-
}] });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWdhdGV3YXkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9hcGktZ2F0ZXdheS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUtsQyxNQUFNLE9BQU8saUJBQWlCO0lBSDlCO1FBSVUsVUFBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQW9EcEM7SUFsREMsS0FBSyxDQUFDLEdBQVcsRUFBRSxNQUFZO1FBQzdCLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE1BQU0sR0FBRztvQkFDUCxjQUFjLEVBQUUsS0FBSztpQkFDdEIsQ0FBQztZQUNKLENBQUM7WUFBQSxDQUFDO1lBQ0YsSUFBSSxPQUFXLENBQUM7WUFDaEIsSUFBRyxNQUFNLENBQUMsY0FBYyxFQUFDLENBQUM7Z0JBQ3hCLE9BQU8sR0FBRztvQkFDUixJQUFJLEVBQUUsTUFBTTtpQkFDYixDQUFBO1lBQ0gsQ0FBQztZQUVELDhDQUE4QztZQUM5QyxJQUFJLENBQUMsS0FBSztpQkFDUCxHQUFHLENBQUMsR0FBRyxFQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDO2lCQUMzQixTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ2Isc0NBQXNDO29CQUN0QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2YsNkNBQTZDO2dCQUMvQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQVcsRUFBRSxRQUFjO1FBQ2hDLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxPQUFXLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUs7aUJBQ1AsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUMsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUM7aUJBQ3RDLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQzFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdEIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQVMsRUFBRSxFQUFFO29CQUNuQiw2Q0FBNkM7Z0JBQy9DLENBQUM7YUFDRixDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBcERVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgXG4gIGRvR2V0KHVybDogc3RyaW5nLCBjb25maWc/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgaXNMb2FkZXJIaWRkZW46IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgbGV0IGhlYWRlcnM6YW55O1xuICAgICAgaWYoY29uZmlnLmlzVW5hdXRob3JpemVkKXtcbiAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICBza2lwOiBcInRydWVcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgXG4gICAgICAvLyB0aGlzLl9sb2FkZXJTZXJ2aWNlLnJlcXVlc3RTdGFydGVkKGNvbmZpZyk7XG4gICAgICB0aGlzLl9odHRwXG4gICAgICAgIC5nZXQodXJsLHtoZWFkZXJzOiBoZWFkZXJzfSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2xvYWRlclNlcnZpY2UucmVxdWVzdEVuZGVkKCk7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIGNvbmZpZywgb2JzZXJ2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgfVxuICBkb1Bvc3QodXJsOiBzdHJpbmcsIHJlcV9ib2R5PzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgbGV0IGhlYWRlcnM6YW55O1xuICAgICAgdGhpcy5faHR0cFxuICAgICAgICAucG9zdCh1cmwsIHJlcV9ib2R5LHtoZWFkZXJzOiBoZWFkZXJzfSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuaGFzT3duUHJvcGVydHkoJ3N0YXR1cycpKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YSk7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnJvcjphbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIGNvbmZpZywgb2JzZXJ2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvY29tbW9uLWhlYWRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBST0ZFVF9BUFBTIH0gZnJvbSBcIi4vdXRpbHMvYXBwcy5lbnVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwTWVudSB7XG4gICAgYXBwVHlwZTogUFJPRkVUX0FQUFM7XG4gICAgbWVudU5hbWU6IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBncm91cEJ5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcbiAgICBba2V5IGluIFBST0ZFVF9BUFBTXToge1xuICAgICAgICBhcHBOYW1lOiBzdHJpbmc7XG4gICAgICAgIGFwcExvZ29Vcmk6IHN0cmluZztcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyQ29uZmlnIHtcbiAgICBhcGlVcmw6IHN0cmluZztcbiAgICBwb3J0YWxGcm9udGVuZFVybD86IHN0cmluZztcbiAgICBzaWduT3V0VXJsOiBzdHJpbmc7XG4gICAgYXBwVHlwZTogUFJPRkVUX0FQUFM7XG4gICAgZW5hYmxlTGFzdFVybFJlZGlyZWN0aW9uPzogYm9vbGVhbjtcbiAgICBkaXNhYmxlQXBwTWVudT86IGJvb2xlYW47XG4gICAgYXBwTG9nb05hdmlnYXRpb25Vcmw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFueSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjb21wYW55S2V5OiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGxvZ28/OiBzdHJpbmc7XG4gICAgaXNBY3RpdmU6IGJvb2xlYW47XG4gICAgYmFzZVVybHM6IHtcbiAgICAgICAgcHJvZmV0X3BvcnRhbD86IHN0cmluZyxcbiAgICAgICAgYXBwcmFpc2FsX21hbmFnZW1lbnQ/OiBzdHJpbmcsXG4gICAgICAgIGFwcHJhaXNhbF9yZXZpZXc/OiBzdHJpbmcsXG4gICAgICAgIGFwcHJhaXNhbF92YWx1YXRpb24/OiBzdHJpbmdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbk91dEluZm8ge1xuICAgIHNlc3Npb25PdXRUaW1lSW5NaW5zPzogbnVtYmVyO1xufSJdfQ==
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { Inject, inject, Injectable } from '@angular/core';
|
|
2
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
-
import { reduce, ReplaySubject } from 'rxjs';
|
|
4
|
-
import { APP_DOMAIN } from '../public-api';
|
|
5
|
-
import { EndPoints } from './api-endpoints.def';
|
|
6
|
-
import { ApiGatewayService } from './api-gateway.service';
|
|
7
|
-
import { SessionExpiryInfoComponent } from './session-expiry-info/session-expiry-info.component';
|
|
8
|
-
import { Utilities } from './utils/Utilities';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
export class CommonHeaderService {
|
|
11
|
-
constructor(config) {
|
|
12
|
-
this.config = config;
|
|
13
|
-
this.SESSION_EXPIRED_KEY = 'session_expired';
|
|
14
|
-
this.LAST_ACTIVE_SESSION_KEY = 'lastActiveSessionTime';
|
|
15
|
-
this.baseUrl = '';
|
|
16
|
-
this.isSessionExpiryDialogOpen = false;
|
|
17
|
-
this._apiGatewayService = inject(ApiGatewayService);
|
|
18
|
-
this._dialog = inject(MatDialog);
|
|
19
|
-
this.menuStateSubject = new ReplaySubject(1);
|
|
20
|
-
this.activeMenuList$ = this.menuStateSubject.asObservable();
|
|
21
|
-
this.companyListSubject = new ReplaySubject(1);
|
|
22
|
-
this.companyList$ = this.companyListSubject.asObservable();
|
|
23
|
-
this.headerConfig = config;
|
|
24
|
-
this.baseUrl = config.apiUrl;
|
|
25
|
-
}
|
|
26
|
-
setMenuState(data) {
|
|
27
|
-
this.menuStateSubject.next(data);
|
|
28
|
-
}
|
|
29
|
-
setCompanyList(data) {
|
|
30
|
-
this.companyListSubject.next(data);
|
|
31
|
-
}
|
|
32
|
-
obtainDataByUrl(url) {
|
|
33
|
-
return this._apiGatewayService.doGet(url);
|
|
34
|
-
}
|
|
35
|
-
openSessionExpireInfo(sessioninfo) {
|
|
36
|
-
let info = {};
|
|
37
|
-
if (sessioninfo) {
|
|
38
|
-
info = sessioninfo;
|
|
39
|
-
}
|
|
40
|
-
this.isSessionExpiryDialogOpen = true;
|
|
41
|
-
this._dialog.open(SessionExpiryInfoComponent, { data: sessioninfo });
|
|
42
|
-
}
|
|
43
|
-
getDomainInfo() {
|
|
44
|
-
let dom = document.location.host.split('.');
|
|
45
|
-
let domainInfo = APP_DOMAIN.find(x => x.domain === dom[0]);
|
|
46
|
-
if (domainInfo) {
|
|
47
|
-
return domainInfo;
|
|
48
|
-
}
|
|
49
|
-
// Check if the second part of the domain exists before using it
|
|
50
|
-
domainInfo = dom[1] ? APP_DOMAIN.find(x => x.domain === dom[1]) : undefined;
|
|
51
|
-
return domainInfo || undefined;
|
|
52
|
-
}
|
|
53
|
-
getApps() {
|
|
54
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.getAppsApi}`;
|
|
55
|
-
return this._apiGatewayService.doGet(url);
|
|
56
|
-
}
|
|
57
|
-
getCompanyApplications() {
|
|
58
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.getCompanyApplications}`;
|
|
59
|
-
return this._apiGatewayService.doGet(url);
|
|
60
|
-
}
|
|
61
|
-
// TODO -- need to remove
|
|
62
|
-
getUserCompanies() {
|
|
63
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.getUserCompanies}`;
|
|
64
|
-
return this._apiGatewayService.doGet(url);
|
|
65
|
-
}
|
|
66
|
-
updateUserCompany(reqBody) {
|
|
67
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.updateUserCompany}`;
|
|
68
|
-
return this._apiGatewayService.doPost(url, reqBody);
|
|
69
|
-
}
|
|
70
|
-
fetchCompanyProfile(reqBody) {
|
|
71
|
-
let config = {
|
|
72
|
-
isUnauthorized: true
|
|
73
|
-
};
|
|
74
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.fetchCompanyProfile + '?' + Utilities.convertObjectToQueryString(reqBody)}`;
|
|
75
|
-
return this._apiGatewayService.doGet(url, config).pipe(reduce((acc, res) => {
|
|
76
|
-
if (res?.data) {
|
|
77
|
-
acc = res.data;
|
|
78
|
-
}
|
|
79
|
-
return acc;
|
|
80
|
-
}, {}));
|
|
81
|
-
}
|
|
82
|
-
getUserDetails() {
|
|
83
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.getUserDetails}`;
|
|
84
|
-
return this._apiGatewayService.doGet(url);
|
|
85
|
-
}
|
|
86
|
-
getCompanyList() {
|
|
87
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.getCompanyList}`;
|
|
88
|
-
return this._apiGatewayService.doGet(url).pipe(reduce((acc, res) => {
|
|
89
|
-
if (res?.data?.companies) {
|
|
90
|
-
acc = res?.data?.companies;
|
|
91
|
-
}
|
|
92
|
-
return acc;
|
|
93
|
-
}, {}));
|
|
94
|
-
}
|
|
95
|
-
getMenuList() {
|
|
96
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.getAppMenu}`;
|
|
97
|
-
return this._apiGatewayService.doGet(url).pipe(reduce((acc, res) => {
|
|
98
|
-
if (res?.data?.AppMenu) {
|
|
99
|
-
acc = res?.data?.AppMenu;
|
|
100
|
-
}
|
|
101
|
-
return acc;
|
|
102
|
-
}, {}));
|
|
103
|
-
}
|
|
104
|
-
updateLastAccessedApplication(reqBody) {
|
|
105
|
-
let url = `${this.baseUrl + EndPoints.API_URLS.updateLastAccessedApplication}`;
|
|
106
|
-
return this._apiGatewayService.doPost(url, reqBody);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Helper to get the root domain (e.g. .profet.ai) to share cookies across subdomains/ports.
|
|
110
|
-
* If on localhost or an IP, it falls back to the hostname.
|
|
111
|
-
*/
|
|
112
|
-
getRootDomain() {
|
|
113
|
-
const hostname = window.location.hostname;
|
|
114
|
-
const parts = hostname.split('.');
|
|
115
|
-
if (parts.length > 2 && !/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(hostname)) {
|
|
116
|
-
// If we have 4+ parts (e.g. app1.local.profet.ai), we want to include the environment (local.profet.ai)
|
|
117
|
-
// to avoid sharing cookies with app1.dev.profet.ai or app1.profet.ai.
|
|
118
|
-
if (parts.length > 3) {
|
|
119
|
-
return '.' + parts.slice(-3).join('.');
|
|
120
|
-
}
|
|
121
|
-
// For standard 3 parts (app1.profet.ai), share on .profet.ai
|
|
122
|
-
return '.' + parts.slice(-2).join('.');
|
|
123
|
-
}
|
|
124
|
-
return hostname;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Generates a unique cookie name based on the environment root domain.
|
|
128
|
-
* e.g. 'lastActive' on .qa.profet.ai -> 'lastActive_qa_profet_ai'
|
|
129
|
-
* @param name Base cookie name
|
|
130
|
-
*/
|
|
131
|
-
getSuffixedCookieName(name) {
|
|
132
|
-
const rootDomain = this.getRootDomain();
|
|
133
|
-
// Replace dots with underscores to create a clean suffix
|
|
134
|
-
const suffix = rootDomain.replace(/\./g, '_');
|
|
135
|
-
return `${name}${suffix}`;
|
|
136
|
-
}
|
|
137
|
-
setCookie(name, value, days) {
|
|
138
|
-
const uniqueName = this.getSuffixedCookieName(name);
|
|
139
|
-
let expires = "";
|
|
140
|
-
if (days) {
|
|
141
|
-
const date = new Date();
|
|
142
|
-
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
|
143
|
-
expires = "; expires=" + date.toUTCString();
|
|
144
|
-
}
|
|
145
|
-
// Important: set domain to allow sharing across subdomains
|
|
146
|
-
const domain = "; domain=" + this.getRootDomain();
|
|
147
|
-
document.cookie = uniqueName + "=" + (value || "") + expires + domain + "; path=/";
|
|
148
|
-
}
|
|
149
|
-
getCookie(name) {
|
|
150
|
-
const uniqueName = this.getSuffixedCookieName(name);
|
|
151
|
-
const nameEQ = uniqueName + "=";
|
|
152
|
-
const ca = document.cookie.split(';');
|
|
153
|
-
for (let i = 0; i < ca.length; i++) {
|
|
154
|
-
let c = ca[i];
|
|
155
|
-
while (c.charAt(0) == ' ')
|
|
156
|
-
c = c.substring(1, c.length);
|
|
157
|
-
if (c.indexOf(nameEQ) == 0)
|
|
158
|
-
return c.substring(nameEQ.length, c.length);
|
|
159
|
-
}
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
|
-
deleteCookie(name) {
|
|
163
|
-
this.setCookie(name, '', -1);
|
|
164
|
-
}
|
|
165
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommonHeaderService, deps: [{ token: 'headerConfig' }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
166
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommonHeaderService, providedIn: 'root' }); }
|
|
167
|
-
}
|
|
168
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommonHeaderService, decorators: [{
|
|
169
|
-
type: Injectable,
|
|
170
|
-
args: [{
|
|
171
|
-
providedIn: 'root'
|
|
172
|
-
}]
|
|
173
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
174
|
-
type: Inject,
|
|
175
|
-
args: ['headerConfig']
|
|
176
|
-
}] }] });
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uLWhlYWRlci9zcmMvbGliL2NvbW1vbi1oZWFkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFLOUMsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUIsWUFBNEMsTUFBb0I7UUFBcEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQWZoRCx3QkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztRQUN4Qyw0QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztRQUUxRCxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRTdCLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUMxQix1QkFBa0IsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRCxZQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNCLHFCQUFnQixHQUFHLElBQUksYUFBYSxDQUFtQixDQUFDLENBQUMsQ0FBQztRQUMzRCxvQkFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZ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QUM7SUFDL0IsQ0FBQzsrR0FsTFUsbUJBQW1CLGtCQWdCVixjQUFjO21IQWhCdkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWlCYyxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IHJlZHVjZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVBQX0RPTUFJTiB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgRW5kUG9pbnRzIH0gZnJvbSAnLi9hcGktZW5kcG9pbnRzLmRlZic7XG5pbXBvcnQgeyBBcGlHYXRld2F5U2VydmljZSB9IGZyb20gJy4vYXBpLWdhdGV3YXkuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBNZW51LCBDb21wYW55LCBIZWFkZXJDb25maWcsIFNlc3Npb25PdXRJbmZvIH0gZnJvbSAnLi9jb21tb24taGVhZGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZXNzaW9uRXhwaXJ5SW5mb0NvbXBvbmVudCB9IGZyb20gJy4vc2Vzc2lvbi1leHBpcnktaW5mby9zZXNzaW9uLWV4cGlyeS1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlsaXRpZXMgfSBmcm9tICcuL3V0aWxzL1V0aWxpdGllcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vbkhlYWRlclNlcnZpY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgU0VTU0lPTl9FWFBJUkVEX0tFWSA9ICdzZXNzaW9uX2V4cGlyZWQnO1xuICBwdWJsaWMgcmVhZG9ubHkgTEFTVF9BQ1RJVkVfU0VTU0lPTl9LRVkgPSAnbGFzdEFjdGl2ZVNlc3Npb25UaW1lJztcblxuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZyA9ICcnO1xuICBoZWFkZXJDb25maWc6IEhlYWRlckNvbmZpZztcbiAgaXNTZXNzaW9uRXhwaXJ5RGlhbG9nT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIF9hcGlHYXRld2F5U2VydmljZSA9IGluamVjdChBcGlHYXRld2F5U2VydmljZSk7XG4gIHB1YmxpYyBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG5cbiAgcHJpdmF0ZSBtZW51U3RhdGVTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8QXBwTWVudVtdIHwgbnVsbD4oMSk7XG4gIHB1YmxpYyBhY3RpdmVNZW51TGlzdCQgPSB0aGlzLm1lbnVTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBjb21wYW55TGlzdFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxDb21wYW55W10gfCBudWxsPigxKTtcbiAgcHVibGljIGNvbXBhbnlMaXN0JCA9IHRoaXMuY29tcGFueUxpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2hlYWRlckNvbmZpZycpIHByaXZhdGUgY29uZmlnOiBIZWFkZXJDb25maWcpIHtcbiAgICB0aGlzLmhlYWRlckNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYXBpVXJsO1xuICB9XG5cbiAgc2V0TWVudVN0YXRlKGRhdGE6IEFwcE1lbnVbXSk6IHZvaWQge1xuICAgIHRoaXMubWVudVN0YXRlU3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG4gIHNldENvbXBhbnlMaXN0KGRhdGE6IENvbXBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuY29tcGFueUxpc3RTdWJqZWN0Lm5leHQoZGF0YSk7XG4gIH1cblxuICBvYnRhaW5EYXRhQnlVcmwodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9HZXQodXJsKTtcbiAgfVxuXG4gIG9wZW5TZXNzaW9uRXhwaXJlSW5mbyhzZXNzaW9uaW5mbz86IFNlc3Npb25PdXRJbmZvKSB7XG4gICAgbGV0IGluZm86IFNlc3Npb25PdXRJbmZvID0ge307XG4gICAgaWYgKHNlc3Npb25pbmZvKSB7XG4gICAgICBpbmZvID0gc2Vzc2lvbmluZm87XG4gICAgfVxuICAgIHRoaXMuaXNTZXNzaW9uRXhwaXJ5RGlhbG9nT3BlbiA9IHRydWU7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oU2Vzc2lvbkV4cGlyeUluZm9Db21wb25lbnQsIHsgZGF0YTogc2Vzc2lvbmluZm8gfSk7XG4gIH1cblxuICBnZXREb21haW5JbmZvKCkge1xuICAgIGxldCBkb20gPSBkb2N1bWVudC5sb2NhdGlvbi5ob3N0LnNwbGl0KCcuJyk7XG4gICAgbGV0IGRvbWFpbkluZm8gPSBBUFBfRE9NQUlOLmZpbmQoeCA9PiB4LmRvbWFpbiA9PT0gZG9tWzBdKTtcbiAgICBpZiAoZG9tYWluSW5mbykge1xuICAgICAgcmV0dXJuIGRvbWFpbkluZm87XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBkb21haW4gZXhpc3RzIGJlZm9yZSB1c2luZyBpdFxuICAgIGRvbWFpbkluZm8gPSBkb21bMV0gPyBBUFBfRE9NQUlOLmZpbmQoeCA9PiB4LmRvbWFpbiA9PT0gZG9tWzFdKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZG9tYWluSW5mbyB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBcHBzKCkge1xuICAgIGxldCB1cmwgPSBgJHt0aGlzLmJhc2VVcmwgKyBFbmRQb2ludHMuQVBJX1VSTFMuZ2V0QXBwc0FwaX1gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpO1xuICB9XG4gIGdldENvbXBhbnlBcHBsaWNhdGlvbnMoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRDb21wYW55QXBwbGljYXRpb25zfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCk7XG4gIH1cblxuICAvLyBUT0RPIC0tIG5lZWQgdG8gcmVtb3ZlXG4gIGdldFVzZXJDb21wYW5pZXMoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRVc2VyQ29tcGFuaWVzfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCk7XG4gIH1cbiAgdXBkYXRlVXNlckNvbXBhbnkocmVxQm9keTogYW55KSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy51cGRhdGVVc2VyQ29tcGFueX1gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb1Bvc3QodXJsLCByZXFCb2R5KTtcbiAgfVxuXG4gIGZldGNoQ29tcGFueVByb2ZpbGUocmVxQm9keTogYW55KSB7XG4gICAgbGV0IGNvbmZpZzogYW55ID0ge1xuICAgICAgaXNVbmF1dGhvcml6ZWQ6IHRydWVcbiAgICB9XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5mZXRjaENvbXBhbnlQcm9maWxlICsgJz8nICsgVXRpbGl0aWVzLmNvbnZlcnRPYmplY3RUb1F1ZXJ5U3RyaW5nKHJlcUJvZHkpfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCwgY29uZmlnKS5waXBlKFxuICAgICAgcmVkdWNlKChhY2MsIHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzPy5kYXRhKSB7XG4gICAgICAgICAgYWNjID0gcmVzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KVxuICAgICk7XG4gIH1cbiAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRVc2VyRGV0YWlsc31gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpO1xuICB9XG5cbiAgZ2V0Q29tcGFueUxpc3QoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRDb21wYW55TGlzdH1gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpLnBpcGUoXG4gICAgICByZWR1Y2UoKGFjYywgcmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/LmRhdGE/LmNvbXBhbmllcykge1xuICAgICAgICAgIGFjYyA9IHJlcz8uZGF0YT8uY29tcGFuaWVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSlcbiAgICApO1xuICB9XG4gIGdldE1lbnVMaXN0KCkge1xuICAgIGxldCB1cmwgPSBgJHt0aGlzLmJhc2VVcmwgKyBFbmRQb2ludHMuQVBJX1VSTFMuZ2V0QXBwTWVudX1gO1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpLnBpcGUoXG4gICAgICByZWR1Y2UoKGFjYywgcmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/LmRhdGE/LkFwcE1lbnUpIHtcbiAgICAgICAgICBhY2MgPSByZXM/LmRhdGE/LkFwcE1lbnU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVMYXN0QWNjZXNzZWRBcHBsaWNhdGlvbihyZXFCb2R5OiBhbnkpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLnVwZGF0ZUxhc3RBY2Nlc3NlZEFwcGxpY2F0aW9ufWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvUG9zdCh1cmwsIHJlcUJvZHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byBnZXQgdGhlIHJvb3QgZG9tYWluIChlLmcuIC5wcm9mZXQuYWkpIHRvIHNoYXJlIGNvb2tpZXMgYWNyb3NzIHN1YmRvbWFpbnMvcG9ydHMuXG4gICAqIElmIG9uIGxvY2FsaG9zdCBvciBhbiBJUCwgaXQgZmFsbHMgYmFjayB0byB0aGUgaG9zdG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0Um9vdERvbWFpbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuICAgIGNvbnN0IHBhcnRzID0gaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyICYmICEvXlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9JC8udGVzdChob3N0bmFtZSkpIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgNCsgcGFydHMgKGUuZy4gYXBwMS5sb2NhbC5wcm9mZXQuYWkpLCB3ZSB3YW50IHRvIGluY2x1ZGUgdGhlIGVudmlyb25tZW50IChsb2NhbC5wcm9mZXQuYWkpXG4gICAgICAvLyB0byBhdm9pZCBzaGFyaW5nIGNvb2tpZXMgd2l0aCBhcHAxLmRldi5wcm9mZXQuYWkgb3IgYXBwMS5wcm9mZXQuYWkuXG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMykge1xuICAgICAgICByZXR1cm4gJy4nICsgcGFydHMuc2xpY2UoLTMpLmpvaW4oJy4nKTtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBzdGFuZGFyZCAzIHBhcnRzIChhcHAxLnByb2ZldC5haSksIHNoYXJlIG9uIC5wcm9mZXQuYWlcbiAgICAgIHJldHVybiAnLicgKyBwYXJ0cy5zbGljZSgtMikuam9pbignLicpO1xuICAgIH1cbiAgICByZXR1cm4gaG9zdG5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgdW5pcXVlIGNvb2tpZSBuYW1lIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudCByb290IGRvbWFpbi5cbiAgICogZS5nLiAnbGFzdEFjdGl2ZScgb24gLnFhLnByb2ZldC5haSAtPiAnbGFzdEFjdGl2ZV9xYV9wcm9mZXRfYWknXG4gICAqIEBwYXJhbSBuYW1lIEJhc2UgY29va2llIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRTdWZmaXhlZENvb2tpZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByb290RG9tYWluID0gdGhpcy5nZXRSb290RG9tYWluKCk7XG4gICAgLy8gUmVwbGFjZSBkb3RzIHdpdGggdW5kZXJzY29yZXMgdG8gY3JlYXRlIGEgY2xlYW4gc3VmZml4XG4gICAgY29uc3Qgc3VmZml4ID0gcm9vdERvbWFpbi5yZXBsYWNlKC9cXC4vZywgJ18nKTtcbiAgICByZXR1cm4gYCR7bmFtZX0ke3N1ZmZpeH1gO1xuICB9XG5cbiAgcHVibGljIHNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlcikge1xuICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSB0aGlzLmdldFN1ZmZpeGVkQ29va2llTmFtZShuYW1lKTtcbiAgICBsZXQgZXhwaXJlcyA9IFwiXCI7XG4gICAgaWYgKGRheXMpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICBleHBpcmVzID0gXCI7IGV4cGlyZXM9XCIgKyBkYXRlLnRvVVRDU3RyaW5nKCk7XG4gICAgfVxuICAgIC8vIEltcG9ydGFudDogc2V0IGRvbWFpbiB0byBhbGxvdyBzaGFyaW5nIGFjcm9zcyBzdWJkb21haW5zXG4gICAgY29uc3QgZG9tYWluID0gXCI7IGRvbWFpbj1cIiArIHRoaXMuZ2V0Um9vdERvbWFpbigpO1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IHVuaXF1ZU5hbWUgKyBcIj1cIiArICh2YWx1ZSB8fCBcIlwiKSArIGV4cGlyZXMgKyBkb21haW4gKyBcIjsgcGF0aD0vXCI7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29va2llKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSB0aGlzLmdldFN1ZmZpeGVkQ29va2llTmFtZShuYW1lKTtcbiAgICBjb25zdCBuYW1lRVEgPSB1bmlxdWVOYW1lICsgXCI9XCI7XG4gICAgY29uc3QgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgYyA9IGNhW2ldO1xuICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09ICcgJykgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTtcbiAgICAgIGlmIChjLmluZGV4T2YobmFtZUVRKSA9PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVDb29raWUobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRDb29raWUobmFtZSwgJycsIC0xKTtcbiAgfVxufVxuIl19
|