@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.
Files changed (35) hide show
  1. package/README.md +0 -37
  2. package/esm2022/lib/api-endpoints.def.mjs +14 -0
  3. package/esm2022/lib/api-gateway.service.mjs +69 -0
  4. package/esm2022/lib/common-header.interface.mjs +2 -0
  5. package/{esm2020 → esm2022}/lib/common-header.module.mjs +33 -33
  6. package/esm2022/lib/common-header.service.mjs +177 -0
  7. package/{esm2020 → esm2022}/lib/company-switch-warning/company-switch-warning.component.mjs +6 -6
  8. package/esm2022/lib/config/app.config.mjs +21 -0
  9. package/esm2022/lib/header/header.component.mjs +420 -0
  10. package/esm2022/lib/pipes/active-route.pipe.mjs +24 -0
  11. package/{esm2020 → esm2022}/lib/pipes/milliseconds-to-minute.pipe.mjs +4 -4
  12. package/esm2022/lib/session-expiry-info/session-expiry-info.component.mjs +36 -0
  13. package/esm2022/lib/utils/Utilities.mjs +41 -0
  14. package/{fesm2020 → fesm2022}/propmix-profet-common-header.mjs +107 -116
  15. package/fesm2022/propmix-profet-common-header.mjs.map +1 -0
  16. package/lib/common-header.interface.d.ts +0 -9
  17. package/lib/header/header.component.d.ts +7 -6
  18. package/package.json +5 -11
  19. package/esm2020/lib/api-endpoints.def.mjs +0 -14
  20. package/esm2020/lib/api-gateway.service.mjs +0 -69
  21. package/esm2020/lib/common-header.interface.mjs +0 -11
  22. package/esm2020/lib/common-header.service.mjs +0 -177
  23. package/esm2020/lib/config/app.config.mjs +0 -21
  24. package/esm2020/lib/header/header.component.mjs +0 -419
  25. package/esm2020/lib/pipes/active-route.pipe.mjs +0 -24
  26. package/esm2020/lib/session-expiry-info/session-expiry-info.component.mjs +0 -36
  27. package/esm2020/lib/utils/Utilities.mjs +0 -41
  28. package/fesm2015/propmix-profet-common-header.mjs +0 -952
  29. package/fesm2015/propmix-profet-common-header.mjs.map +0 -1
  30. package/fesm2020/propmix-profet-common-header.mjs.map +0 -1
  31. /package/{esm2020 → esm2022}/lib/utils/app.constants.mjs +0 -0
  32. /package/{esm2020 → esm2022}/lib/utils/apps.enum.mjs +0 -0
  33. /package/{esm2020 → esm2022}/lib/utils/image.dataurl.mjs +0 -0
  34. /package/{esm2020 → esm2022}/propmix-profet-common-header.mjs +0 -0
  35. /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, LogoutReason, LogoutStatus } from '../common-header.interface';
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
- logoutEvent: EventEmitter<{
42
- reason: LogoutReason;
43
- status: LogoutStatus;
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-beta.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": "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",
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
- "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"
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=