@propmix/profet-common-header 3.5.0-beta.0 → 3.5.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 +0 -37
- package/esm2022/lib/api-endpoints.def.mjs +14 -0
- package/esm2022/lib/api-gateway.service.mjs +69 -0
- package/esm2022/lib/common-header.interface.mjs +2 -0
- package/{esm2020 → esm2022}/lib/common-header.module.mjs +33 -33
- package/esm2022/lib/common-header.service.mjs +177 -0
- package/{esm2020 → esm2022}/lib/company-switch-warning/company-switch-warning.component.mjs +6 -6
- package/esm2022/lib/config/app.config.mjs +21 -0
- package/esm2022/lib/header/header.component.mjs +420 -0
- package/esm2022/lib/pipes/active-route.pipe.mjs +24 -0
- package/{esm2020 → esm2022}/lib/pipes/milliseconds-to-minute.pipe.mjs +4 -4
- package/esm2022/lib/session-expiry-info/session-expiry-info.component.mjs +36 -0
- package/esm2022/lib/utils/Utilities.mjs +41 -0
- package/{fesm2020 → fesm2022}/propmix-profet-common-header.mjs +107 -116
- package/fesm2022/propmix-profet-common-header.mjs.map +1 -0
- package/lib/common-header.interface.d.ts +0 -9
- package/lib/header/header.component.d.ts +7 -6
- package/package.json +5 -11
- package/esm2020/lib/api-endpoints.def.mjs +0 -14
- package/esm2020/lib/api-gateway.service.mjs +0 -69
- package/esm2020/lib/common-header.interface.mjs +0 -11
- package/esm2020/lib/common-header.service.mjs +0 -177
- package/esm2020/lib/config/app.config.mjs +0 -21
- package/esm2020/lib/header/header.component.mjs +0 -419
- package/esm2020/lib/pipes/active-route.pipe.mjs +0 -24
- package/esm2020/lib/session-expiry-info/session-expiry-info.component.mjs +0 -36
- package/esm2020/lib/utils/Utilities.mjs +0 -41
- package/fesm2015/propmix-profet-common-header.mjs +0 -952
- package/fesm2015/propmix-profet-common-header.mjs.map +0 -1
- package/fesm2020/propmix-profet-common-header.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/utils/app.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/apps.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/image.dataurl.mjs +0 -0
- /package/{esm2020 → esm2022}/propmix-profet-common-header.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -20,7 +20,6 @@ export interface HeaderConfig {
|
|
|
20
20
|
enableLastUrlRedirection?: boolean;
|
|
21
21
|
disableAppMenu?: boolean;
|
|
22
22
|
appLogoNavigationUrl?: string;
|
|
23
|
-
hideViewProfile?: boolean;
|
|
24
23
|
}
|
|
25
24
|
export interface Company {
|
|
26
25
|
id: number;
|
|
@@ -38,11 +37,3 @@ export interface Company {
|
|
|
38
37
|
export interface SessionOutInfo {
|
|
39
38
|
sessionOutTimeInMins?: number;
|
|
40
39
|
}
|
|
41
|
-
export declare enum LogoutReason {
|
|
42
|
-
USER_INITIATED = "USER_INITIATED",
|
|
43
|
-
SESSION_TIMEOUT = "SESSION_TIMEOUT"
|
|
44
|
-
}
|
|
45
|
-
export declare enum LogoutStatus {
|
|
46
|
-
INITIATED = "INITIATED",
|
|
47
|
-
COMPLETED = "COMPLETED"
|
|
48
|
-
}
|
|
@@ -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
|
|
7
|
+
import { AppMenu, Company } 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 {
|
|
@@ -38,10 +38,9 @@ export declare class HeaderComponent implements OnInit, OnDestroy {
|
|
|
38
38
|
private componentInitTime;
|
|
39
39
|
private lastProcessedLogoutTimestamp;
|
|
40
40
|
INACTIVITY_LIMIT: number;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}>;
|
|
41
|
+
appLogoNavigationUrl?: string;
|
|
42
|
+
disableAppMenu?: boolean;
|
|
43
|
+
logoutEvent: EventEmitter<void>;
|
|
45
44
|
companyControl: FormControl<any>;
|
|
46
45
|
appConfig: any;
|
|
47
46
|
companyList: Company[];
|
|
@@ -72,6 +71,8 @@ export declare class HeaderComponent implements OnInit, OnDestroy {
|
|
|
72
71
|
updateLastAccessedAppInfo(): void;
|
|
73
72
|
switchCompany(info: any): void;
|
|
74
73
|
ngOnDestroy(): void;
|
|
74
|
+
get resolvedAppLogoNavigationUrl(): string | undefined;
|
|
75
|
+
get resolvedDisableAppMenu(): boolean | undefined;
|
|
75
76
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderComponent, never>;
|
|
76
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "lib-header", never, { "INACTIVITY_LIMIT": "INACTIVITY_LIMIT"; }, { "logoutEvent": "logoutEvent"; }, never, ["*"], false, never>;
|
|
77
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "lib-header", never, { "INACTIVITY_LIMIT": { "alias": "INACTIVITY_LIMIT"; "required": false; }; "appLogoNavigationUrl": { "alias": "appLogoNavigationUrl"; "required": false; }; "disableAppMenu": { "alias": "disableAppMenu"; "required": false; }; }, { "logoutEvent": "logoutEvent"; }, never, ["*"], false, never>;
|
|
77
78
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@propmix/profet-common-header",
|
|
3
|
-
"version": "3.5.0
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">=15.2.0",
|
|
6
6
|
"@angular/core": ">=15.2.0",
|
|
@@ -11,11 +11,7 @@
|
|
|
11
11
|
"tslib": "^2.3.0"
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
14
|
-
"module": "
|
|
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",
|
|
14
|
+
"module": "fesm2022/propmix-profet-common-header.mjs",
|
|
19
15
|
"typings": "index.d.ts",
|
|
20
16
|
"exports": {
|
|
21
17
|
"./package.json": {
|
|
@@ -23,11 +19,9 @@
|
|
|
23
19
|
},
|
|
24
20
|
".": {
|
|
25
21
|
"types": "./index.d.ts",
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"node": "./fesm2015/propmix-profet-common-header.mjs",
|
|
30
|
-
"default": "./fesm2020/propmix-profet-common-header.mjs"
|
|
22
|
+
"esm2022": "./esm2022/propmix-profet-common-header.mjs",
|
|
23
|
+
"esm": "./esm2022/propmix-profet-common-header.mjs",
|
|
24
|
+
"default": "./fesm2022/propmix-profet-common-header.mjs"
|
|
31
25
|
}
|
|
32
26
|
}
|
|
33
27
|
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export class EndPoints {
|
|
2
|
-
}
|
|
3
|
-
EndPoints.API_URLS = {
|
|
4
|
-
getAppsApi: '/api/company/getAllUserAccessApplications',
|
|
5
|
-
getCompanyApplications: '/api/company/getCompanyApplications',
|
|
6
|
-
getUserCompanies: '/api/profile/getUserCompanies',
|
|
7
|
-
updateUserCompany: '/api/company/updateUserCompany',
|
|
8
|
-
fetchCompanyProfile: '/fetchCompanyProfile',
|
|
9
|
-
getUserDetails: '/api/user/getUserInformation',
|
|
10
|
-
getCompanyList: '/api/user/getUserCompanies',
|
|
11
|
-
getAppMenu: '/api/user/getAppMenu',
|
|
12
|
-
updateLastAccessedApplication: '/api/user/updateLastAccessedApplication'
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWVuZHBvaW50cy5kZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvYXBpLWVuZHBvaW50cy5kZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFNBQVM7O0FBQ0osa0JBQVEsR0FBRztJQUNyQixVQUFVLEVBQUUsMkNBQTJDO0lBQ3ZELHNCQUFzQixFQUFFLHFDQUFxQztJQUM3RCxnQkFBZ0IsRUFBRSwrQkFBK0I7SUFDakQsaUJBQWlCLEVBQUUsZ0NBQWdDO0lBQ25ELG1CQUFtQixFQUFFLHNCQUFzQjtJQUMzQyxjQUFjLEVBQUUsOEJBQThCO0lBRTlDLGNBQWMsRUFBRSw0QkFBNEI7SUFDNUMsVUFBVSxFQUFFLHNCQUFzQjtJQUNsQyw2QkFBNkIsRUFBRSx5Q0FBeUM7Q0FDM0UsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBFbmRQb2ludHMge1xuICAgIHB1YmxpYyBzdGF0aWMgQVBJX1VSTFMgPSB7XG4gICAgICAgIGdldEFwcHNBcGk6ICcvYXBpL2NvbXBhbnkvZ2V0QWxsVXNlckFjY2Vzc0FwcGxpY2F0aW9ucycsXG4gICAgICAgIGdldENvbXBhbnlBcHBsaWNhdGlvbnM6ICcvYXBpL2NvbXBhbnkvZ2V0Q29tcGFueUFwcGxpY2F0aW9ucycsXG4gICAgICAgIGdldFVzZXJDb21wYW5pZXM6ICcvYXBpL3Byb2ZpbGUvZ2V0VXNlckNvbXBhbmllcycsICAvLyBUT0RPIC0tIE5lZWRzIHRvIHJlbW92ZVxuICAgICAgICB1cGRhdGVVc2VyQ29tcGFueTogJy9hcGkvY29tcGFueS91cGRhdGVVc2VyQ29tcGFueScsXG4gICAgICAgIGZldGNoQ29tcGFueVByb2ZpbGU6ICcvZmV0Y2hDb21wYW55UHJvZmlsZScsXG4gICAgICAgIGdldFVzZXJEZXRhaWxzOiAnL2FwaS91c2VyL2dldFVzZXJJbmZvcm1hdGlvbicsXG5cbiAgICAgICAgZ2V0Q29tcGFueUxpc3Q6ICcvYXBpL3VzZXIvZ2V0VXNlckNvbXBhbmllcycsXG4gICAgICAgIGdldEFwcE1lbnU6ICcvYXBpL3VzZXIvZ2V0QXBwTWVudScsXG4gICAgICAgIHVwZGF0ZUxhc3RBY2Nlc3NlZEFwcGxpY2F0aW9uOiAnL2FwaS91c2VyL3VwZGF0ZUxhc3RBY2Nlc3NlZEFwcGxpY2F0aW9uJ1xuICAgIH1cbn0iXX0=
|
|
@@ -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
|
-
}
|
|
61
|
-
ApiGatewayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiGatewayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
62
|
-
ApiGatewayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiGatewayService, providedIn: 'root' });
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiGatewayService, decorators: [{
|
|
64
|
-
type: Injectable,
|
|
65
|
-
args: [{
|
|
66
|
-
providedIn: 'root'
|
|
67
|
-
}]
|
|
68
|
-
}] });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWdhdGV3YXkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9hcGktZ2F0ZXdheS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUtsQyxNQUFNLE9BQU8saUJBQWlCO0lBSDlCO1FBSVUsVUFBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQW9EcEM7SUFsREMsS0FBSyxDQUFDLEdBQVcsRUFBRSxNQUFZO1FBQzdCLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNLEdBQUc7b0JBQ1AsY0FBYyxFQUFFLEtBQUs7aUJBQ3RCLENBQUM7YUFDSDtZQUFBLENBQUM7WUFDRixJQUFJLE9BQVcsQ0FBQztZQUNoQixJQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUM7Z0JBQ3ZCLE9BQU8sR0FBRztvQkFDUixJQUFJLEVBQUUsTUFBTTtpQkFDYixDQUFBO2FBQ0Y7WUFFRCw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLEtBQUs7aUJBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQztpQkFDM0IsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNiLHNDQUFzQztvQkFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNmLDZDQUE2QztnQkFDL0MsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFXLEVBQUUsUUFBYztRQUNoQyxPQUFPLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9CLElBQUksT0FBVyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLO2lCQUNQLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDO2lCQUN0QyxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDekMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUNyQjt5QkFBTTt3QkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ3JCO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBUyxFQUFFLEVBQUU7b0JBQ25CLDZDQUE2QztnQkFDL0MsQ0FBQzthQUNGLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7K0dBcERVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheVNlcnZpY2Uge1xuICBwcml2YXRlIF9odHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBcbiAgZG9HZXQodXJsOiBzdHJpbmcsIGNvbmZpZz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZyA9IHtcbiAgICAgICAgICBpc0xvYWRlckhpZGRlbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBsZXQgaGVhZGVyczphbnk7XG4gICAgICBpZihjb25maWcuaXNVbmF1dGhvcml6ZWQpe1xuICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgIHNraXA6IFwidHJ1ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICBcbiAgICAgIC8vIHRoaXMuX2xvYWRlclNlcnZpY2UucmVxdWVzdFN0YXJ0ZWQoY29uZmlnKTtcbiAgICAgIHRoaXMuX2h0dHBcbiAgICAgICAgLmdldCh1cmwse2hlYWRlcnM6IGhlYWRlcnN9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5fbG9hZGVyU2VydmljZS5yZXF1ZXN0RW5kZWQoKTtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YSk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgY29uZmlnLCBvYnNlcnZlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KVxuICB9XG4gIGRvUG9zdCh1cmw6IHN0cmluZywgcmVxX2JvZHk/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBsZXQgaGVhZGVyczphbnk7XG4gICAgICB0aGlzLl9odHRwXG4gICAgICAgIC5wb3N0KHVybCwgcmVxX2JvZHkse2hlYWRlcnM6IGhlYWRlcnN9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5oYXNPd25Qcm9wZXJ0eSgnc3RhdHVzJykpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChkYXRhKTtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YSk7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yOmFueSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgY29uZmlnLCBvYnNlcnZlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export var LogoutReason;
|
|
2
|
-
(function (LogoutReason) {
|
|
3
|
-
LogoutReason["USER_INITIATED"] = "USER_INITIATED";
|
|
4
|
-
LogoutReason["SESSION_TIMEOUT"] = "SESSION_TIMEOUT";
|
|
5
|
-
})(LogoutReason || (LogoutReason = {}));
|
|
6
|
-
export var LogoutStatus;
|
|
7
|
-
(function (LogoutStatus) {
|
|
8
|
-
LogoutStatus["INITIATED"] = "INITIATED";
|
|
9
|
-
LogoutStatus["COMPLETED"] = "COMPLETED";
|
|
10
|
-
})(LogoutStatus || (LogoutStatus = {}));
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvY29tbW9uLWhlYWRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOENBLE1BQU0sQ0FBTixJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDcEIsaURBQWlDLENBQUE7SUFDakMsbURBQW1DLENBQUE7QUFDdkMsQ0FBQyxFQUhXLFlBQVksS0FBWixZQUFZLFFBR3ZCO0FBRUQsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUNwQix1Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBdUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQUk9GRVRfQVBQUyB9IGZyb20gXCIuL3V0aWxzL2FwcHMuZW51bVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE1lbnUge1xuICAgIGFwcFR5cGU6IFBST0ZFVF9BUFBTO1xuICAgIG1lbnVOYW1lOiBzdHJpbmc7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgZ3JvdXBCeT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQXBwbGljYXRpb25Db25maWcgPSB7XG4gICAgW2tleSBpbiBQUk9GRVRfQVBQU106IHtcbiAgICAgICAgYXBwTmFtZTogc3RyaW5nO1xuICAgICAgICBhcHBMb2dvVXJpOiBzdHJpbmc7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlckNvbmZpZyB7XG4gICAgYXBpVXJsOiBzdHJpbmc7XG4gICAgcG9ydGFsRnJvbnRlbmRVcmw/OiBzdHJpbmc7XG4gICAgc2lnbk91dFVybDogc3RyaW5nO1xuICAgIGFwcFR5cGU6IFBST0ZFVF9BUFBTO1xuICAgIGVuYWJsZUxhc3RVcmxSZWRpcmVjdGlvbj86IGJvb2xlYW47XG4gICAgZGlzYWJsZUFwcE1lbnU/OiBib29sZWFuO1xuICAgIGFwcExvZ29OYXZpZ2F0aW9uVXJsPzogc3RyaW5nO1xuICAgIGhpZGVWaWV3UHJvZmlsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFueSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjb21wYW55S2V5OiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGxvZ28/OiBzdHJpbmc7XG4gICAgaXNBY3RpdmU6IGJvb2xlYW47XG4gICAgYmFzZVVybHM6IHtcbiAgICAgICAgcHJvZmV0X3BvcnRhbD86IHN0cmluZyxcbiAgICAgICAgYXBwcmFpc2FsX21hbmFnZW1lbnQ/OiBzdHJpbmcsXG4gICAgICAgIGFwcHJhaXNhbF9yZXZpZXc/OiBzdHJpbmcsXG4gICAgICAgIGFwcHJhaXNhbF92YWx1YXRpb24/OiBzdHJpbmdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbk91dEluZm8ge1xuICAgIHNlc3Npb25PdXRUaW1lSW5NaW5zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBMb2dvdXRSZWFzb24ge1xuICAgIFVTRVJfSU5JVElBVEVEID0gJ1VTRVJfSU5JVElBVEVEJyxcbiAgICBTRVNTSU9OX1RJTUVPVVQgPSAnU0VTU0lPTl9USU1FT1VUJ1xufVxuXG5leHBvcnQgZW51bSBMb2dvdXRTdGF0dXMge1xuICAgIElOSVRJQVRFRCA9ICdJTklUSUFURUQnLFxuICAgIENPTVBMRVRFRCA9ICdDT01QTEVURUQnXG59Il19
|
|
@@ -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
|
-
}
|
|
166
|
-
CommonHeaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CommonHeaderService, deps: [{ token: 'headerConfig' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
167
|
-
CommonHeaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CommonHeaderService, providedIn: 'root' });
|
|
168
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CommonHeaderService, decorators: [{
|
|
169
|
-
type: Injectable,
|
|
170
|
-
args: [{
|
|
171
|
-
providedIn: 'root'
|
|
172
|
-
}]
|
|
173
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
174
|
-
type: Inject,
|
|
175
|
-
args: ['headerConfig']
|
|
176
|
-
}] }]; } });
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uLWhlYWRlci9zcmMvbGliL2NvbW1vbi1oZWFkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFLOUMsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUIsWUFBNEMsTUFBb0I7UUFBcEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQWZoRCx3QkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztRQUN4Qyw0QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztRQUUxRCxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRTdCLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUMxQix1QkFBa0IsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRCxZQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNCLHFCQUFnQixHQUFHLElBQUksYUFBYSxDQUFtQixDQUFDLENBQUMsQ0FBQztRQUMzRCxvQkFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZ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O21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBaUJjLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgcmVkdWNlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBUFBfRE9NQUlOIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBFbmRQb2ludHMgfSBmcm9tICcuL2FwaS1lbmRwb2ludHMuZGVmJztcbmltcG9ydCB7IEFwaUdhdGV3YXlTZXJ2aWNlIH0gZnJvbSAnLi9hcGktZ2F0ZXdheS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcE1lbnUsIENvbXBhbnksIEhlYWRlckNvbmZpZywgU2Vzc2lvbk91dEluZm8gfSBmcm9tICcuL2NvbW1vbi1oZWFkZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlc3Npb25FeHBpcnlJbmZvQ29tcG9uZW50IH0gZnJvbSAnLi9zZXNzaW9uLWV4cGlyeS1pbmZvL3Nlc3Npb24tZXhwaXJ5LWluZm8uY29tcG9uZW50JztcbmltcG9ydCB7IFV0aWxpdGllcyB9IGZyb20gJy4vdXRpbHMvVXRpbGl0aWVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uSGVhZGVyU2VydmljZSB7XG4gIHB1YmxpYyByZWFkb25seSBTRVNTSU9OX0VYUElSRURfS0VZID0gJ3Nlc3Npb25fZXhwaXJlZCc7XG4gIHB1YmxpYyByZWFkb25seSBMQVNUX0FDVElWRV9TRVNTSU9OX0tFWSA9ICdsYXN0QWN0aXZlU2Vzc2lvblRpbWUnO1xuXG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nID0gJyc7XG4gIGhlYWRlckNvbmZpZzogSGVhZGVyQ29uZmlnO1xuICBpc1Nlc3Npb25FeHBpcnlEaWFsb2dPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgX2FwaUdhdGV3YXlTZXJ2aWNlID0gaW5qZWN0KEFwaUdhdGV3YXlTZXJ2aWNlKTtcbiAgcHVibGljIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcblxuICBwcml2YXRlIG1lbnVTdGF0ZVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxBcHBNZW51W10gfCBudWxsPigxKTtcbiAgcHVibGljIGFjdGl2ZU1lbnVMaXN0JCA9IHRoaXMubWVudVN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGNvbXBhbnlMaXN0U3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PENvbXBhbnlbXSB8IG51bGw+KDEpO1xuICBwdWJsaWMgY29tcGFueUxpc3QkID0gdGhpcy5jb21wYW55TGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdCgnaGVhZGVyQ29uZmlnJykgcHJpdmF0ZSBjb25maWc6IEhlYWRlckNvbmZpZykge1xuICAgIHRoaXMuaGVhZGVyQ29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5hcGlVcmw7XG4gIH1cblxuICBzZXRNZW51U3RhdGUoZGF0YTogQXBwTWVudVtdKTogdm9pZCB7XG4gICAgdGhpcy5tZW51U3RhdGVTdWJqZWN0Lm5leHQoZGF0YSk7XG4gIH1cbiAgc2V0Q29tcGFueUxpc3QoZGF0YTogQ29tcGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5jb21wYW55TGlzdFN1YmplY3QubmV4dChkYXRhKTtcbiAgfVxuXG4gIG9idGFpbkRhdGFCeVVybCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9hcGlHYXRld2F5U2VydmljZS5kb0dldCh1cmwpO1xuICB9XG5cbiAgb3BlblNlc3Npb25FeHBpcmVJbmZvKHNlc3Npb25pbmZvPzogU2Vzc2lvbk91dEluZm8pIHtcbiAgICBsZXQgaW5mbzogU2Vzc2lvbk91dEluZm8gPSB7fTtcbiAgICBpZiAoc2Vzc2lvbmluZm8pIHtcbiAgICAgIGluZm8gPSBzZXNzaW9uaW5mbztcbiAgICB9XG4gICAgdGhpcy5pc1Nlc3Npb25FeHBpcnlEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihTZXNzaW9uRXhwaXJ5SW5mb0NvbXBvbmVudCwgeyBkYXRhOiBzZXNzaW9uaW5mbyB9KTtcbiAgfVxuXG4gIGdldERvbWFpbkluZm8oKSB7XG4gICAgbGV0IGRvbSA9IGRvY3VtZW50LmxvY2F0aW9uLmhvc3Quc3BsaXQoJy4nKTtcbiAgICBsZXQgZG9tYWluSW5mbyA9IEFQUF9ET01BSU4uZmluZCh4ID0+IHguZG9tYWluID09PSBkb21bMF0pO1xuICAgIGlmIChkb21haW5JbmZvKSB7XG4gICAgICByZXR1cm4gZG9tYWluSW5mbztcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGRvbWFpbiBleGlzdHMgYmVmb3JlIHVzaW5nIGl0XG4gICAgZG9tYWluSW5mbyA9IGRvbVsxXSA/IEFQUF9ET01BSU4uZmluZCh4ID0+IHguZG9tYWluID09PSBkb21bMV0pIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBkb21haW5JbmZvIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFwcHMoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRBcHBzQXBpfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCk7XG4gIH1cbiAgZ2V0Q29tcGFueUFwcGxpY2F0aW9ucygpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmdldENvbXBhbnlBcHBsaWNhdGlvbnN9YDtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9HZXQodXJsKTtcbiAgfVxuXG4gIC8vIFRPRE8gLS0gbmVlZCB0byByZW1vdmVcbiAgZ2V0VXNlckNvbXBhbmllcygpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmdldFVzZXJDb21wYW5pZXN9YDtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9HZXQodXJsKTtcbiAgfVxuICB1cGRhdGVVc2VyQ29tcGFueShyZXFCb2R5OiBhbnkpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLnVwZGF0ZVVzZXJDb21wYW55fWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvUG9zdCh1cmwsIHJlcUJvZHkpO1xuICB9XG5cbiAgZmV0Y2hDb21wYW55UHJvZmlsZShyZXFCb2R5OiBhbnkpIHtcbiAgICBsZXQgY29uZmlnOiBhbnkgPSB7XG4gICAgICBpc1VuYXV0aG9yaXplZDogdHJ1ZVxuICAgIH1cbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmZldGNoQ29tcGFueVByb2ZpbGUgKyAnPycgKyBVdGlsaXRpZXMuY29udmVydE9iamVjdFRvUXVlcnlTdHJpbmcocmVxQm9keSl9YDtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9HZXQodXJsLCBjb25maWcpLnBpcGUoXG4gICAgICByZWR1Y2UoKGFjYywgcmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/LmRhdGEpIHtcbiAgICAgICAgICBhY2MgPSByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pXG4gICAgKTtcbiAgfVxuICBnZXRVc2VyRGV0YWlscygpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmdldFVzZXJEZXRhaWxzfWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCk7XG4gIH1cblxuICBnZXRDb21wYW55TGlzdCgpIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5iYXNlVXJsICsgRW5kUG9pbnRzLkFQSV9VUkxTLmdldENvbXBhbnlMaXN0fWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCkucGlwZShcbiAgICAgIHJlZHVjZSgoYWNjLCByZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uY29tcGFuaWVzKSB7XG4gICAgICAgICAgYWNjID0gcmVzPy5kYXRhPy5jb21wYW5pZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KVxuICAgICk7XG4gIH1cbiAgZ2V0TWVudUxpc3QoKSB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMuYmFzZVVybCArIEVuZFBvaW50cy5BUElfVVJMUy5nZXRBcHBNZW51fWA7XG4gICAgcmV0dXJuIHRoaXMuX2FwaUdhdGV3YXlTZXJ2aWNlLmRvR2V0KHVybCkucGlwZShcbiAgICAgIHJlZHVjZSgoYWNjLCByZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uQXBwTWVudSkge1xuICAgICAgICAgIGFjYyA9IHJlcz8uZGF0YT8uQXBwTWVudTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUxhc3RBY2Nlc3NlZEFwcGxpY2F0aW9uKHJlcUJvZHk6IGFueSkge1xuICAgIGxldCB1cmwgPSBgJHt0aGlzLmJhc2VVcmwgKyBFbmRQb2ludHMuQVBJX1VSTFMudXBkYXRlTGFzdEFjY2Vzc2VkQXBwbGljYXRpb259YDtcbiAgICByZXR1cm4gdGhpcy5fYXBpR2F0ZXdheVNlcnZpY2UuZG9Qb3N0KHVybCwgcmVxQm9keSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIHRvIGdldCB0aGUgcm9vdCBkb21haW4gKGUuZy4gLnByb2ZldC5haSkgdG8gc2hhcmUgY29va2llcyBhY3Jvc3Mgc3ViZG9tYWlucy9wb3J0cy5cbiAgICogSWYgb24gbG9jYWxob3N0IG9yIGFuIElQLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBob3N0bmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRSb290RG9tYWluKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG4gICAgY29uc3QgcGFydHMgPSBob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDIgJiYgIS9eXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30kLy50ZXN0KGhvc3RuYW1lKSkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSA0KyBwYXJ0cyAoZS5nLiBhcHAxLmxvY2FsLnByb2ZldC5haSksIHdlIHdhbnQgdG8gaW5jbHVkZSB0aGUgZW52aXJvbm1lbnQgKGxvY2FsLnByb2ZldC5haSlcbiAgICAgIC8vIHRvIGF2b2lkIHNoYXJpbmcgY29va2llcyB3aXRoIGFwcDEuZGV2LnByb2ZldC5haSBvciBhcHAxLnByb2ZldC5haS5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAzKSB7XG4gICAgICAgIHJldHVybiAnLicgKyBwYXJ0cy5zbGljZSgtMykuam9pbignLicpO1xuICAgICAgfVxuICAgICAgLy8gRm9yIHN0YW5kYXJkIDMgcGFydHMgKGFwcDEucHJvZmV0LmFpKSwgc2hhcmUgb24gLnByb2ZldC5haVxuICAgICAgcmV0dXJuICcuJyArIHBhcnRzLnNsaWNlKC0yKS5qb2luKCcuJyk7XG4gICAgfVxuICAgIHJldHVybiBob3N0bmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgY29va2llIG5hbWUgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IHJvb3QgZG9tYWluLlxuICAgKiBlLmcuICdsYXN0QWN0aXZlJyBvbiAucWEucHJvZmV0LmFpIC0+ICdsYXN0QWN0aXZlX3FhX3Byb2ZldF9haSdcbiAgICogQHBhcmFtIG5hbWUgQmFzZSBjb29raWUgbmFtZVxuICAgKi9cbiAgcHVibGljIGdldFN1ZmZpeGVkQ29va2llTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJvb3REb21haW4gPSB0aGlzLmdldFJvb3REb21haW4oKTtcbiAgICAvLyBSZXBsYWNlIGRvdHMgd2l0aCB1bmRlcnNjb3JlcyB0byBjcmVhdGUgYSBjbGVhbiBzdWZmaXhcbiAgICBjb25zdCBzdWZmaXggPSByb290RG9tYWluLnJlcGxhY2UoL1xcLi9nLCAnXycpO1xuICAgIHJldHVybiBgJHtuYW1lfSR7c3VmZml4fWA7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29va2llKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgZGF5czogbnVtYmVyKSB7XG4gICAgY29uc3QgdW5pcXVlTmFtZSA9IHRoaXMuZ2V0U3VmZml4ZWRDb29raWVOYW1lKG5hbWUpO1xuICAgIGxldCBleHBpcmVzID0gXCJcIjtcbiAgICBpZiAoZGF5cykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcbiAgICAgIGV4cGlyZXMgPSBcIjsgZXhwaXJlcz1cIiArIGRhdGUudG9VVENTdHJpbmcoKTtcbiAgICB9XG4gICAgLy8gSW1wb3J0YW50OiBzZXQgZG9tYWluIHRvIGFsbG93IHNoYXJpbmcgYWNyb3NzIHN1YmRvbWFpbnNcbiAgICBjb25zdCBkb21haW4gPSBcIjsgZG9tYWluPVwiICsgdGhpcy5nZXRSb290RG9tYWluKCk7XG4gICAgZG9jdW1lbnQuY29va2llID0gdW5pcXVlTmFtZSArIFwiPVwiICsgKHZhbHVlIHx8IFwiXCIpICsgZXhwaXJlcyArIGRvbWFpbiArIFwiOyBwYXRoPS9cIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb29raWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgdW5pcXVlTmFtZSA9IHRoaXMuZ2V0U3VmZml4ZWRDb29raWVOYW1lKG5hbWUpO1xuICAgIGNvbnN0IG5hbWVFUSA9IHVuaXF1ZU5hbWUgKyBcIj1cIjtcbiAgICBjb25zdCBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjID0gY2FbaV07XG4gICAgICB3aGlsZSAoYy5jaGFyQXQoMCkgPT0gJyAnKSBjID0gYy5zdWJzdHJpbmcoMSwgYy5sZW5ndGgpO1xuICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09IDApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLCBjLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUNvb2tpZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldENvb2tpZShuYW1lLCAnJywgLTEpO1xuICB9XG59XG4iXX0=
|