@yelon/bis 16.2.5 → 16.3.1
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/LICENSE +21 -21
- package/README.md +23 -23
- package/esm2022/bis.mjs +4 -4
- package/esm2022/index.mjs +1 -1
- package/esm2022/layout/bis.config.mjs +14 -14
- package/esm2022/layout/html-names.mjs +32 -32
- package/esm2022/layout/icon/style-icons.mjs +795 -795
- package/esm2022/layout/layout-basic/index.mjs +2 -2
- package/esm2022/layout/layout-basic/interface.mjs +1 -1
- package/esm2022/layout/layout-basic/layout-basic.component.mjs +372 -372
- package/esm2022/layout/layout-nav/index.mjs +3 -3
- package/esm2022/layout/layout-nav/layout-nav-application.component.mjs +364 -364
- package/esm2022/layout/layout-nav/layout-nav-group.component.mjs +122 -122
- package/esm2022/layout/layout-nav/layout-nav-tile.component.mjs +14 -14
- package/esm2022/layout/layout.mjs +4 -4
- package/esm2022/layout/public_api.mjs +12 -12
- package/esm2022/layout/widgets/index.mjs +6 -6
- package/esm2022/layout/widgets/yunzai-clear-storage.component.mjs +44 -44
- package/esm2022/layout/widgets/yunzai-fullscreen.component.mjs +44 -44
- package/esm2022/layout/widgets/yunzai-i18n.component.mjs +145 -145
- package/esm2022/layout/widgets/yunzai-notify.component.mjs +182 -182
- package/esm2022/layout/widgets/yunzai-theme-btn.component.mjs +199 -199
- package/esm2022/layout/widgets/yunzai-user.component.mjs +129 -129
- package/esm2022/layout/yunzai-act.guard.mjs +106 -106
- package/esm2022/layout/yunzai-auth.service.mjs +107 -107
- package/esm2022/layout/yunzai-default.interceptor.mjs +200 -201
- package/esm2022/layout/yunzai-i18n.service.mjs +101 -101
- package/esm2022/layout/yunzai-lang.mjs +113 -113
- package/esm2022/layout/yunzai-layout.module.mjs +76 -76
- package/esm2022/layout/yunzai-startup.service.mjs +151 -151
- package/esm2022/public_api.mjs +1 -1
- package/fesm2022/bis.mjs +6 -6
- package/fesm2022/layout.mjs +3197 -3198
- package/fesm2022/layout.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/index.less +1 -1
- package/layout/bis.config.d.ts +3 -3
- package/layout/html-names.d.ts +31 -31
- package/layout/icon/style-icons.d.ts +1 -1
- package/layout/index.d.ts +5 -5
- package/layout/layout-basic/index.d.ts +2 -2
- package/layout/layout-basic/interface.d.ts +8 -8
- package/layout/layout-basic/layout-basic.component.d.ts +28 -28
- package/layout/layout-nav/index.d.ts +3 -3
- package/layout/layout-nav/layout-nav-application.component.d.ts +31 -31
- package/layout/layout-nav/layout-nav-group.component.d.ts +16 -16
- package/layout/layout-nav/layout-nav-tile.component.d.ts +6 -6
- package/layout/public_api.d.ts +12 -12
- package/layout/style/index.less +154 -154
- package/layout/widgets/index.d.ts +6 -6
- package/layout/widgets/yunzai-clear-storage.component.d.ts +11 -11
- package/layout/widgets/yunzai-fullscreen.component.d.ts +8 -8
- package/layout/widgets/yunzai-i18n.component.d.ts +21 -21
- package/layout/widgets/yunzai-notify.component.d.ts +30 -30
- package/layout/widgets/yunzai-theme-btn.component.d.ts +32 -32
- package/layout/widgets/yunzai-user.component.d.ts +26 -26
- package/layout/yunzai-act.guard.d.ts +20 -20
- package/layout/yunzai-auth.service.d.ts +19 -19
- package/layout/yunzai-default.interceptor.d.ts +27 -27
- package/layout/yunzai-i18n.service.d.ts +26 -26
- package/layout/yunzai-lang.d.ts +11 -11
- package/layout/yunzai-layout.module.d.ts +22 -22
- package/layout/yunzai-startup.service.d.ts +34 -34
- package/package.json +39 -39
- package/public_api.d.ts +2 -2
- package/theme-compact.less +3 -3
- package/theme-dark.less +46 -46
- package/theme-default.less +46 -46
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { combineLatest, map, mergeMap, of } from 'rxjs';
|
|
3
|
-
import { YA_SERVICE_TOKEN } from '@yelon/auth';
|
|
4
|
-
import { _HttpClient } from '@yelon/theme';
|
|
5
|
-
import { log, useLocalStorageHeader, useLocalStorageProjectInfo, useLocalStorageTenant, useLocalStorageUser, WINDOW, YunzaiConfigService } from '@yelon/util';
|
|
6
|
-
import { mergeBisConfig } from './bis.config';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class YunzaiAuthService {
|
|
9
|
-
constructor(injector) {
|
|
10
|
-
this.injector = injector;
|
|
11
|
-
this.config = mergeBisConfig(this.configService);
|
|
12
|
-
}
|
|
13
|
-
get configService() {
|
|
14
|
-
return this.injector.get(YunzaiConfigService);
|
|
15
|
-
}
|
|
16
|
-
get tokenService() {
|
|
17
|
-
return this.injector.get(YA_SERVICE_TOKEN);
|
|
18
|
-
}
|
|
19
|
-
get httpClient() {
|
|
20
|
-
return this.injector.get(_HttpClient);
|
|
21
|
-
}
|
|
22
|
-
askToken() {
|
|
23
|
-
log('yz.auth.service: ', 'askToken');
|
|
24
|
-
if (this.config.loginForm) {
|
|
25
|
-
return this.fetchTokenByUP();
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
return this.fetchTokenByCas();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
fetchTokenByUP() {
|
|
32
|
-
log('yz.auth.service: ', 'fetchTokenByUP');
|
|
33
|
-
return this.httpClient.post(`/auth/oauth/token?_allow_anonymous=true`, this.config.loginForm).pipe(map((response) => {
|
|
34
|
-
return response;
|
|
35
|
-
}));
|
|
36
|
-
}
|
|
37
|
-
fetchTokenByCas() {
|
|
38
|
-
log('yz.auth.service: ', 'fetchTokenByCas');
|
|
39
|
-
const uri = encodeURIComponent(this.injector.get(WINDOW).location.href);
|
|
40
|
-
return this.httpClient
|
|
41
|
-
.get(`/cas-proxy/app/validate_full?callback=${uri}&_allow_anonymous=true×tamp=${new Date().getTime()}`)
|
|
42
|
-
.pipe(map((response) => {
|
|
43
|
-
switch (response.errcode) {
|
|
44
|
-
case 2000:
|
|
45
|
-
return response.data;
|
|
46
|
-
case 2001:
|
|
47
|
-
this.injector.get(WINDOW).location.href = response.msg;
|
|
48
|
-
throw Error("Cookie Error: Can't find Cas Cookie,So jump to login!");
|
|
49
|
-
default:
|
|
50
|
-
if (response.data) {
|
|
51
|
-
console.error(response.data);
|
|
52
|
-
throw Error(response.data);
|
|
53
|
-
}
|
|
54
|
-
else if (response.msg) {
|
|
55
|
-
console.error(response.msg);
|
|
56
|
-
throw Error(response.msg);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
console.error('cas unknown error');
|
|
60
|
-
throw Error('Unknown Error: Cas auth exception!');
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}));
|
|
64
|
-
}
|
|
65
|
-
login() {
|
|
66
|
-
log('yz.auth.service: ', 'login white login form->', this.config.loginForm);
|
|
67
|
-
return this.askToken().pipe(mergeMap(token => {
|
|
68
|
-
log('yz.auth.service: get token->', token);
|
|
69
|
-
this.configService.set('auth', {
|
|
70
|
-
token_send_key: 'Authorization',
|
|
71
|
-
token_send_template: `${token.token_type} \${access_token}`,
|
|
72
|
-
token_send_place: 'header'
|
|
73
|
-
});
|
|
74
|
-
log('yz.auth.service: ', 'set token');
|
|
75
|
-
this.tokenService.set(token);
|
|
76
|
-
return of(null);
|
|
77
|
-
}), mergeMap(() => this.cacheInit()));
|
|
78
|
-
}
|
|
79
|
-
cacheInit() {
|
|
80
|
-
log('yz.auth.service: ', 'cacheInit');
|
|
81
|
-
const [setTenant] = useLocalStorageTenant();
|
|
82
|
-
const [setUser] = useLocalStorageUser();
|
|
83
|
-
const [setHeader] = useLocalStorageHeader();
|
|
84
|
-
const [setProject] = useLocalStorageProjectInfo();
|
|
85
|
-
return combineLatest([
|
|
86
|
-
this.httpClient.get(`/auth/user`),
|
|
87
|
-
this.httpClient.get(`/auth/allheader/v2`),
|
|
88
|
-
this.httpClient.get(`/app-manager/project/info`)
|
|
89
|
-
]).pipe(map(([user, header, project]) => {
|
|
90
|
-
log('yz.auth.service: ', 'set user');
|
|
91
|
-
setUser(user.principal);
|
|
92
|
-
log('yz.auth.service: ', 'set tenant');
|
|
93
|
-
setTenant(user.tenantId);
|
|
94
|
-
log('yz.auth.service: ', 'set header');
|
|
95
|
-
setHeader(header.data);
|
|
96
|
-
log('yz.auth.service: ', 'set project');
|
|
97
|
-
setProject(project.data);
|
|
98
|
-
return void 0;
|
|
99
|
-
}));
|
|
100
|
-
}
|
|
101
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
102
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.
|
|
103
|
-
}
|
|
104
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
105
|
-
type: Injectable,
|
|
106
|
-
args: [{ providedIn: 'root' }]
|
|
107
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { combineLatest, map, mergeMap, of } from 'rxjs';
|
|
3
|
+
import { YA_SERVICE_TOKEN } from '@yelon/auth';
|
|
4
|
+
import { _HttpClient } from '@yelon/theme';
|
|
5
|
+
import { log, useLocalStorageHeader, useLocalStorageProjectInfo, useLocalStorageTenant, useLocalStorageUser, WINDOW, YunzaiConfigService } from '@yelon/util';
|
|
6
|
+
import { mergeBisConfig } from './bis.config';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class YunzaiAuthService {
|
|
9
|
+
constructor(injector) {
|
|
10
|
+
this.injector = injector;
|
|
11
|
+
this.config = mergeBisConfig(this.configService);
|
|
12
|
+
}
|
|
13
|
+
get configService() {
|
|
14
|
+
return this.injector.get(YunzaiConfigService);
|
|
15
|
+
}
|
|
16
|
+
get tokenService() {
|
|
17
|
+
return this.injector.get(YA_SERVICE_TOKEN);
|
|
18
|
+
}
|
|
19
|
+
get httpClient() {
|
|
20
|
+
return this.injector.get(_HttpClient);
|
|
21
|
+
}
|
|
22
|
+
askToken() {
|
|
23
|
+
log('yz.auth.service: ', 'askToken');
|
|
24
|
+
if (this.config.loginForm) {
|
|
25
|
+
return this.fetchTokenByUP();
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return this.fetchTokenByCas();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
fetchTokenByUP() {
|
|
32
|
+
log('yz.auth.service: ', 'fetchTokenByUP');
|
|
33
|
+
return this.httpClient.post(`/auth/oauth/token?_allow_anonymous=true`, this.config.loginForm).pipe(map((response) => {
|
|
34
|
+
return response;
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
fetchTokenByCas() {
|
|
38
|
+
log('yz.auth.service: ', 'fetchTokenByCas');
|
|
39
|
+
const uri = encodeURIComponent(this.injector.get(WINDOW).location.href);
|
|
40
|
+
return this.httpClient
|
|
41
|
+
.get(`/cas-proxy/app/validate_full?callback=${uri}&_allow_anonymous=true×tamp=${new Date().getTime()}`)
|
|
42
|
+
.pipe(map((response) => {
|
|
43
|
+
switch (response.errcode) {
|
|
44
|
+
case 2000:
|
|
45
|
+
return response.data;
|
|
46
|
+
case 2001:
|
|
47
|
+
this.injector.get(WINDOW).location.href = response.msg;
|
|
48
|
+
throw Error("Cookie Error: Can't find Cas Cookie,So jump to login!");
|
|
49
|
+
default:
|
|
50
|
+
if (response.data) {
|
|
51
|
+
console.error(response.data);
|
|
52
|
+
throw Error(response.data);
|
|
53
|
+
}
|
|
54
|
+
else if (response.msg) {
|
|
55
|
+
console.error(response.msg);
|
|
56
|
+
throw Error(response.msg);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.error('cas unknown error');
|
|
60
|
+
throw Error('Unknown Error: Cas auth exception!');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
login() {
|
|
66
|
+
log('yz.auth.service: ', 'login white login form->', this.config.loginForm);
|
|
67
|
+
return this.askToken().pipe(mergeMap(token => {
|
|
68
|
+
log('yz.auth.service: get token->', token);
|
|
69
|
+
this.configService.set('auth', {
|
|
70
|
+
token_send_key: 'Authorization',
|
|
71
|
+
token_send_template: `${token.token_type} \${access_token}`,
|
|
72
|
+
token_send_place: 'header'
|
|
73
|
+
});
|
|
74
|
+
log('yz.auth.service: ', 'set token');
|
|
75
|
+
this.tokenService.set(token);
|
|
76
|
+
return of(null);
|
|
77
|
+
}), mergeMap(() => this.cacheInit()));
|
|
78
|
+
}
|
|
79
|
+
cacheInit() {
|
|
80
|
+
log('yz.auth.service: ', 'cacheInit');
|
|
81
|
+
const [setTenant] = useLocalStorageTenant();
|
|
82
|
+
const [setUser] = useLocalStorageUser();
|
|
83
|
+
const [setHeader] = useLocalStorageHeader();
|
|
84
|
+
const [setProject] = useLocalStorageProjectInfo();
|
|
85
|
+
return combineLatest([
|
|
86
|
+
this.httpClient.get(`/auth/user`),
|
|
87
|
+
this.httpClient.get(`/auth/allheader/v2`),
|
|
88
|
+
this.httpClient.get(`/app-manager/project/info`)
|
|
89
|
+
]).pipe(map(([user, header, project]) => {
|
|
90
|
+
log('yz.auth.service: ', 'set user');
|
|
91
|
+
setUser(user.principal);
|
|
92
|
+
log('yz.auth.service: ', 'set tenant');
|
|
93
|
+
setTenant(user.tenantId);
|
|
94
|
+
log('yz.auth.service: ', 'set header');
|
|
95
|
+
setHeader(header.data);
|
|
96
|
+
log('yz.auth.service: ', 'set project');
|
|
97
|
+
setProject(project.data);
|
|
98
|
+
return void 0;
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: YunzaiAuthService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
102
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: YunzaiAuthService, providedIn: 'root' }); }
|
|
103
|
+
}
|
|
104
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: YunzaiAuthService, decorators: [{
|
|
105
|
+
type: Injectable,
|
|
106
|
+
args: [{ providedIn: 'root' }]
|
|
107
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
108
108
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQveXVuemFpLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEUsT0FBTyxFQUE4QixnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFDTCxHQUFHLEVBQ0gscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLE1BQU0sRUFFTixtQkFBbUIsRUFDcEIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFHOUMsTUFBTSxPQUFPLGlCQUFpQjtJQUc1QixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBWSxhQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBWSxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJ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R0FBRyxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs4R0EzR1UsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG1lcmdlTWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJVG9rZW5Nb2RlbCwgSVRva2VuU2VydmljZSwgWUFfU0VSVklDRV9UT0tFTiB9IGZyb20gJ0B5ZWxvbi9hdXRoJztcbmltcG9ydCB7IF9IdHRwQ2xpZW50IH0gZnJvbSAnQHllbG9uL3RoZW1lJztcbmltcG9ydCB7XG4gIGxvZyxcbiAgdXNlTG9jYWxTdG9yYWdlSGVhZGVyLFxuICB1c2VMb2NhbFN0b3JhZ2VQcm9qZWN0SW5mbyxcbiAgdXNlTG9jYWxTdG9yYWdlVGVuYW50LFxuICB1c2VMb2NhbFN0b3JhZ2VVc2VyLFxuICBXSU5ET1csXG4gIFl1bnphaUJ1c2luZXNzQ29uZmlnLFxuICBZdW56YWlDb25maWdTZXJ2aWNlXG59IGZyb20gJ0B5ZWxvbi91dGlsJztcblxuaW1wb3J0IHsgbWVyZ2VCaXNDb25maWcgfSBmcm9tICcuL2Jpcy5jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFl1bnphaUF1dGhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWc6IFl1bnphaUJ1c2luZXNzQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5jb25maWcgPSBtZXJnZUJpc0NvbmZpZyh0aGlzLmNvbmZpZ1NlcnZpY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZmlnU2VydmljZSgpOiBZdW56YWlDb25maWdTZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoWXVuemFpQ29uZmlnU2VydmljZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCB0b2tlblNlcnZpY2UoKTogSVRva2VuU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaHR0cENsaWVudCgpOiBfSHR0cENsaWVudCB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KF9IdHRwQ2xpZW50KTtcbiAgfVxuXG4gIGFza1Rva2VuKCk6IE9ic2VydmFibGU8SVRva2VuTW9kZWw+IHtcbiAgICBsb2coJ3l6LmF1dGguc2VydmljZTogJywgJ2Fza1Rva2VuJyk7XG4gICAgaWYgKHRoaXMuY29uZmlnLmxvZ2luRm9ybSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hUb2tlbkJ5VVAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hUb2tlbkJ5Q2FzKCk7XG4gICAgfVxuICB9XG5cbiAgZmV0Y2hUb2tlbkJ5VVAoKTogT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbD4ge1xuICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2hUb2tlbkJ5VVAnKTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoYC9hdXRoL29hdXRoL3Rva2VuP19hbGxvd19hbm9ueW1vdXM9dHJ1ZWAsIHRoaXMuY29uZmlnLmxvZ2luRm9ybSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmZXRjaFRva2VuQnlDYXMoKTogT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbD4ge1xuICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2hUb2tlbkJ5Q2FzJyk7XG4gICAgY29uc3QgdXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuaW5qZWN0b3IuZ2V0KFdJTkRPVykubG9jYXRpb24uaHJlZik7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgL2Nhcy1wcm94eS9hcHAvdmFsaWRhdGVfZnVsbD9jYWxsYmFjaz0ke3VyaX0mX2FsbG93X2Fub255bW91cz10cnVlJnRpbWVzdGFtcD0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5lcnJjb2RlKSB7XG4gICAgICAgICAgICBjYXNlIDIwMDA6XG4gICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgY2FzZSAyMDAxOlxuICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLmdldChXSU5ET1cpLmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS5tc2c7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFwiQ29va2llIEVycm9yOiBDYW4ndCBmaW5kIENhcyBDb29raWUsU28ganVtcCB0byBsb2dpbiFcIik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UubXNnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZS5tc2cpO1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKHJlc3BvbnNlLm1zZyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignY2FzIHVua25vd24gZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignVW5rbm93biBFcnJvcjogQ2FzIGF1dGggZXhjZXB0aW9uIScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGxvZ2luKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnbG9naW4gd2hpdGUgbG9naW4gZm9ybS0+JywgdGhpcy5jb25maWcubG9naW5Gb3JtKTtcbiAgICByZXR1cm4gdGhpcy5hc2tUb2tlbigpLnBpcGUoXG4gICAgICBtZXJnZU1hcCh0b2tlbiA9PiB7XG4gICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiBnZXQgdG9rZW4tPicsIHRva2VuKTtcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnNldCgnYXV0aCcsIHtcbiAgICAgICAgICB0b2tlbl9zZW5kX2tleTogJ0F1dGhvcml6YXRpb24nLFxuICAgICAgICAgIHRva2VuX3NlbmRfdGVtcGxhdGU6IGAke3Rva2VuLnRva2VuX3R5cGV9IFxcJHthY2Nlc3NfdG9rZW59YCxcbiAgICAgICAgICB0b2tlbl9zZW5kX3BsYWNlOiAnaGVhZGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdzZXQgdG9rZW4nKTtcbiAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNhY2hlSW5pdCgpKVxuICAgICk7XG4gIH1cblxuICBjYWNoZUluaXQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdjYWNoZUluaXQnKTtcbiAgICBjb25zdCBbc2V0VGVuYW50XSA9IHVzZUxvY2FsU3RvcmFnZVRlbmFudCgpO1xuICAgIGNvbnN0IFtzZXRVc2VyXSA9IHVzZUxvY2FsU3RvcmFnZVVzZXIoKTtcbiAgICBjb25zdCBbc2V0SGVhZGVyXSA9IHVzZUxvY2FsU3RvcmFnZUhlYWRlcigpO1xuICAgIGNvbnN0IFtzZXRQcm9qZWN0XSA9IHVzZUxvY2FsU3RvcmFnZVByb2plY3RJbmZvKCk7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2F1dGgvdXNlcmApLFxuICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2F1dGgvYWxsaGVhZGVyL3YyYCksXG4gICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0KGAvYXBwLW1hbmFnZXIvcHJvamVjdC9pbmZvYClcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdXNlciwgaGVhZGVyLCBwcm9qZWN0XSkgPT4ge1xuICAgICAgICBsb2coJ3l6LmF1dGguc2VydmljZTogJywgJ3NldCB1c2VyJyk7XG4gICAgICAgIHNldFVzZXIodXNlci5wcmluY2lwYWwpO1xuICAgICAgICBsb2coJ3l6LmF1dGguc2VydmljZTogJywgJ3NldCB0ZW5hbnQnKTtcbiAgICAgICAgc2V0VGVuYW50KHVzZXIudGVuYW50SWQpO1xuICAgICAgICBsb2coJ3l6LmF1dGguc2VydmljZTogJywgJ3NldCBoZWFkZXInKTtcbiAgICAgICAgc2V0SGVhZGVyKGhlYWRlci5kYXRhKTtcbiAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdzZXQgcHJvamVjdCcpO1xuICAgICAgICBzZXRQcm9qZWN0KHByb2plY3QuZGF0YSk7XG4gICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|