@yelon/bis 15.2.0 → 15.2.2

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 (73) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +23 -23
  3. package/esm2020/bis.mjs +4 -4
  4. package/esm2020/index.mjs +1 -1
  5. package/esm2020/layout/bis.config.mjs +10 -10
  6. package/esm2020/layout/html-names.mjs +32 -32
  7. package/esm2020/layout/icon/style-icons.mjs +795 -795
  8. package/esm2020/layout/layout-basic/index.mjs +2 -2
  9. package/esm2020/layout/layout-basic/interface.mjs +6 -6
  10. package/esm2020/layout/layout-basic/layout-basic.component.mjs +355 -355
  11. package/esm2020/layout/layout-nav/index.mjs +4 -4
  12. package/esm2020/layout/layout-nav/layout-nav-application.component.mjs +326 -326
  13. package/esm2020/layout/layout-nav/layout-nav-group.component.mjs +123 -123
  14. package/esm2020/layout/layout-nav/layout-nav-tile.component.mjs +14 -14
  15. package/esm2020/layout/layout-nav/types.mjs +1 -1
  16. package/esm2020/layout/layout.mjs +4 -4
  17. package/esm2020/layout/public_api.mjs +12 -12
  18. package/esm2020/layout/widgets/index.mjs +6 -6
  19. package/esm2020/layout/widgets/yunzai-clear-storage.component.mjs +44 -44
  20. package/esm2020/layout/widgets/yunzai-fullscreen.component.mjs +44 -44
  21. package/esm2020/layout/widgets/yunzai-i18n.component.mjs +145 -145
  22. package/esm2020/layout/widgets/yunzai-notify.component.mjs +182 -182
  23. package/esm2020/layout/widgets/yunzai-theme-btn.component.mjs +200 -200
  24. package/esm2020/layout/widgets/yunzai-user.component.mjs +129 -129
  25. package/esm2020/layout/yunzai-act.guard.mjs +106 -106
  26. package/esm2020/layout/yunzai-auth.service.mjs +169 -167
  27. package/esm2020/layout/yunzai-default.interceptor.mjs +208 -208
  28. package/esm2020/layout/yunzai-i18n.service.mjs +130 -130
  29. package/esm2020/layout/yunzai-lang.mjs +113 -113
  30. package/esm2020/layout/yunzai-layout.module.mjs +75 -75
  31. package/esm2020/layout/yunzai-startup.service.mjs +156 -156
  32. package/esm2020/public_api.mjs +1 -1
  33. package/fesm2015/bis.mjs +6 -6
  34. package/fesm2015/layout.mjs +3232 -3230
  35. package/fesm2015/layout.mjs.map +1 -1
  36. package/fesm2020/bis.mjs +6 -6
  37. package/fesm2020/layout.mjs +3240 -3238
  38. package/fesm2020/layout.mjs.map +1 -1
  39. package/index.d.ts +1 -1
  40. package/index.less +1 -1
  41. package/layout/bis.config.d.ts +3 -3
  42. package/layout/html-names.d.ts +31 -31
  43. package/layout/icon/style-icons.d.ts +1 -1
  44. package/layout/index.d.ts +5 -5
  45. package/layout/layout-basic/index.d.ts +2 -2
  46. package/layout/layout-basic/interface.d.ts +24 -24
  47. package/layout/layout-basic/layout-basic.component.d.ts +32 -32
  48. package/layout/layout-nav/index.d.ts +4 -4
  49. package/layout/layout-nav/layout-nav-application.component.d.ts +27 -27
  50. package/layout/layout-nav/layout-nav-group.component.d.ts +17 -17
  51. package/layout/layout-nav/layout-nav-tile.component.d.ts +6 -6
  52. package/layout/layout-nav/types.d.ts +15 -15
  53. package/layout/public_api.d.ts +12 -12
  54. package/layout/style/index.less +154 -154
  55. package/layout/widgets/index.d.ts +6 -6
  56. package/layout/widgets/yunzai-clear-storage.component.d.ts +11 -11
  57. package/layout/widgets/yunzai-fullscreen.component.d.ts +8 -8
  58. package/layout/widgets/yunzai-i18n.component.d.ts +21 -21
  59. package/layout/widgets/yunzai-notify.component.d.ts +30 -30
  60. package/layout/widgets/yunzai-theme-btn.component.d.ts +32 -32
  61. package/layout/widgets/yunzai-user.component.d.ts +28 -28
  62. package/layout/yunzai-act.guard.d.ts +22 -22
  63. package/layout/yunzai-auth.service.d.ts +21 -21
  64. package/layout/yunzai-default.interceptor.d.ts +27 -27
  65. package/layout/yunzai-i18n.service.d.ts +33 -33
  66. package/layout/yunzai-lang.d.ts +11 -11
  67. package/layout/yunzai-layout.module.d.ts +21 -21
  68. package/layout/yunzai-startup.service.d.ts +37 -37
  69. package/package.json +47 -47
  70. package/public_api.d.ts +2 -2
  71. package/theme-compact.less +3 -3
  72. package/theme-dark.less +46 -46
  73. package/theme-default.less +46 -46
@@ -1,167 +1,169 @@
1
- import { Injectable } from '@angular/core';
2
- import { forkJoin, map, mergeAll, mergeMap, of } from 'rxjs';
3
- import { YA_SERVICE_TOKEN } from '@yelon/auth';
4
- import { CacheService } from '@yelon/cache';
5
- import { _HttpClient } from '@yelon/theme';
6
- import { log, WINDOW, YunzaiConfigService } from '@yelon/util';
7
- import { mergeBisConfig } from './bis.config';
8
- import * as i0 from "@angular/core";
9
- class YunzaiAuthService {
10
- constructor(injector) {
11
- this.injector = injector;
12
- this.config = mergeBisConfig(this.configService);
13
- }
14
- get configService() {
15
- return this.injector.get(YunzaiConfigService);
16
- }
17
- get tokenService() {
18
- return this.injector.get(YA_SERVICE_TOKEN);
19
- }
20
- get httpClient() {
21
- return this.injector.get(_HttpClient);
22
- }
23
- get cacheService() {
24
- return this.injector.get(CacheService);
25
- }
26
- askToken() {
27
- log('yz.auth.service: ', 'askToken');
28
- if (this.tokenService.get()?.token) {
29
- const notCovertToken = this.tokenService.get();
30
- let convertedToken;
31
- if (notCovertToken && notCovertToken['access_token']) {
32
- convertedToken = {
33
- token: notCovertToken['access_token'],
34
- expired: notCovertToken['expires_in'],
35
- refreshToken: notCovertToken['refresh_token'],
36
- scope: notCovertToken['scope'],
37
- tokenType: notCovertToken['token_type']
38
- };
39
- return of(convertedToken);
40
- }
41
- else {
42
- return of(this.tokenService.get());
43
- }
44
- }
45
- else {
46
- if (this.config.loginForm) {
47
- return this.fetchTokenByUP();
48
- }
49
- else {
50
- return this.fetchTokenByCas();
51
- }
52
- }
53
- }
54
- fetchTokenByUP() {
55
- log('yz.auth.service: ', 'fetchTokenByUP');
56
- return this.httpClient.post(`/auth/oauth/token?_allow_anonymous=true`, this.config.loginForm).pipe(map((response) => {
57
- const { access_token, expires_in, refresh_token, scope, token_type } = response;
58
- return {
59
- token: access_token,
60
- expired: expires_in,
61
- refreshToken: refresh_token,
62
- tokenType: token_type,
63
- scope
64
- };
65
- }));
66
- }
67
- fetchTokenByCas() {
68
- log('yz.auth.service: ', 'fetchTokenByCas');
69
- const uri = encodeURIComponent(this.injector.get(WINDOW).location.href);
70
- return this.httpClient
71
- .get(`/cas-proxy/app/validate_full?callback=${uri}&_allow_anonymous=true&timestamp=${new Date().getTime()}`)
72
- .pipe(map((response) => {
73
- switch (response.errcode) {
74
- case 2000:
75
- const { access_token, expires_in, refresh_token, scope, token_type } = response.data;
76
- return {
77
- token: access_token,
78
- expired: expires_in,
79
- refreshToken: refresh_token,
80
- tokenType: token_type,
81
- scope
82
- };
83
- case 2001:
84
- this.injector.get(WINDOW).location.href = response.msg;
85
- throw Error("Cookie Error: Can't find Cas Cookie,So jump to login!");
86
- default:
87
- if (response.data) {
88
- console.error(response.data);
89
- throw Error(response.data);
90
- }
91
- else if (response.msg) {
92
- console.error(response.msg);
93
- throw Error(response.msg);
94
- }
95
- else {
96
- console.error('cas unknown error');
97
- throw Error('Unknown Error: Cas auth exception!');
98
- }
99
- }
100
- }));
101
- }
102
- login() {
103
- log('yz.auth.service: ', 'login white login form->', this.config.loginForm);
104
- return this.askToken().pipe(mergeMap(token => {
105
- log('yz.auth.service: get token->', token);
106
- this.configService.set('auth', {
107
- token_send_key: 'Authorization',
108
- token_send_template: `${token.tokenType} \${token}`,
109
- token_send_place: 'header'
110
- });
111
- log('yz.auth.service: ', 'set token');
112
- this.tokenService.set(token);
113
- return this.cacheInit();
114
- }), mergeAll());
115
- }
116
- cacheInit() {
117
- log('yz.auth.service: ', 'cacheInit');
118
- const user = this.cacheService.get('_yz_user', { mode: 'none' });
119
- const header = this.cacheService.get('_yz_header', { mode: 'none' });
120
- const project = this.cacheService.get('_yz_project_info', { mode: 'none' });
121
- return forkJoin(of(user), of(header), of(project)).pipe(mergeMap(([u, h, p]) => {
122
- let list = [];
123
- // user cache
124
- if (!u) {
125
- log('yz.auth.service: ', 'fetch user cache');
126
- list.push(this.httpClient.get(`/auth/user`).pipe(map((user) => {
127
- this.cacheService.set('_yz_user', user.principal);
128
- })));
129
- }
130
- else {
131
- log('yz.auth.service: ', 'user recache');
132
- list.push(of(() => { }));
133
- }
134
- // header cache
135
- if (!h) {
136
- log('yz.auth.service: ', 'fetch header cache');
137
- list.push(this.httpClient.get(`/auth/allheader/v2`).pipe(map((header) => {
138
- this.cacheService.set('_yz_header', header.data);
139
- })));
140
- }
141
- else {
142
- log('yz.auth.service: ', 'header recache');
143
- list.push(of(() => { }));
144
- }
145
- // project cache
146
- if (!p) {
147
- log('yz.auth.service: ', 'fetch project cache');
148
- list.push(this.httpClient.get(`/app-manager/project/info`).pipe(map((info) => {
149
- this.cacheService.set('_yz_project_info', info.data);
150
- })));
151
- }
152
- else {
153
- log('yz.auth.service: ', 'project recache');
154
- list.push(of(() => { }));
155
- }
156
- return forkJoin(list);
157
- }));
158
- }
159
- }
160
- YunzaiAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: YunzaiAuthService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
161
- YunzaiAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: YunzaiAuthService, providedIn: 'root' });
162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: YunzaiAuthService, decorators: [{
163
- type: Injectable,
164
- args: [{ providedIn: 'root' }]
165
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
166
- export { YunzaiAuthService as YzAuthService, YunzaiAuthService };
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQveXVuemFpLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpFLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUU5QyxNQUNNLGlCQUFpQjtJQUdyQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBWSxhQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBWSxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQVksWUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRO1FBQ04sR0FBRyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUU7WUFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvQyxJQUFJLGNBQTJCLENBQUM7WUFDaEMsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNwRCxjQUFjLEdBQUc7b0JBQ2YsS0FBSyxFQUFFLGNBQWMsQ0FBQyxjQUFjLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDO29CQUNyQyxZQUFZLEVBQUUsY0FBYyxDQUFDLGVBQWUsQ0FBQztvQkFDN0MsS0FBSyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUM7b0JBQzlCLFNBQVMsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDO2lCQUN4QyxDQUFDO2dCQUNGLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzNCO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFHLENBQUMsQ0FBQzthQUNyQztTQUNGO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO2dCQUN6QixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMvQjtTQUNGO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixHQUFHLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUNoRyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNwQixNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsQ0FBQztZQUNoRixPQUFPO2dCQUNMLEtBQUssRUFBRSxZQUFZO2dCQUNuQixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsWUFBWSxFQUFFLGFBQWE7Z0JBQzNCLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixLQUFLO2FBQ04sQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLEdBQUcsQ0FBQyx5Q0FBeUMsR0FBRyxvQ0FBb0MsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2FBQzNHLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNwQixRQUFRLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hCLEtBQUssSUFBSTtvQkFDUCxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQ3JGLE9BQU87d0JBQ0wsS0FBSyxFQUFFLFlBQVk7d0JBQ25CLE9BQU8sRUFBRSxVQUFVO3dCQUNuQixZQUFZLEVBQUUsYUFBYTt3QkFDM0IsU0FBUyxFQUFFLFVBQVU7d0JBQ3JCLEtBQUs7cUJBQ1MsQ0FBQztnQkFDbkIsS0FBSyxJQUFJO29CQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDdkQsTUFBTSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztnQkFDdkU7b0JBQ0UsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO3dCQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDN0IsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUM1Qjt5QkFBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLEVBQUU7d0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QixNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzNCO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQzt3QkFDbkMsTUFBTSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztxQkFDbkQ7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSztRQUNILEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FDekIsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2YsR0FBRyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDN0IsY0FBYyxFQUFFLGVBQWU7Z0JBQy9CLG1CQUFtQixFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsWUFBWTtnQkFDbkQsZ0JBQWdCLEVBQUUsUUFBUTthQUMzQixDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxFQUFFLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTO1FBQ1AsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUUsT0FBTyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3JCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNkLGFBQWE7WUFDYixJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUNOLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BELENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQU0sR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5QjtZQUNELGVBQWU7WUFDZixJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUNOLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUM1QyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFNLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUI7WUFDRCxnQkFBZ0I7WUFDaEIsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDTixHQUFHLENBQUMsbUJBQW1CLEVBQUUscUJBQXFCLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLElBQUksQ0FDbkQsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFNLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUI7WUFDRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7OEdBNUtHLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBREcsTUFBTTsyRkFDMUIsaUJBQWlCO2tCQUR0QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUFnTGxDLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgbWFwLCBtZXJnZUFsbCwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElUb2tlbk1vZGVsLCBJVG9rZW5TZXJ2aWNlLCBZQV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnQHllbG9uL2F1dGgnO1xuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL2NhY2hlJztcbmltcG9ydCB7IF9IdHRwQ2xpZW50IH0gZnJvbSAnQHllbG9uL3RoZW1lJztcbmltcG9ydCB7IGxvZywgV0lORE9XLCBZdW56YWlCdXNpbmVzc0NvbmZpZywgWXVuemFpQ29uZmlnU2VydmljZSB9IGZyb20gJ0B5ZWxvbi91dGlsJztcblxuaW1wb3J0IHsgbWVyZ2VCaXNDb25maWcgfSBmcm9tICcuL2Jpcy5jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuY2xhc3MgWXVuemFpQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZzogWXVuemFpQnVzaW5lc3NDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmNvbmZpZyA9IG1lcmdlQmlzQ29uZmlnKHRoaXMuY29uZmlnU2VydmljZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25maWdTZXJ2aWNlKCk6IFl1bnphaUNvbmZpZ1NlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChZdW56YWlDb25maWdTZXJ2aWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRva2VuU2VydmljZSgpOiBJVG9rZW5TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTik7XG4gIH1cblxuICBwcml2YXRlIGdldCBodHRwQ2xpZW50KCk6IF9IdHRwQ2xpZW50IHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoX0h0dHBDbGllbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY2FjaGVTZXJ2aWNlKCk6IENhY2hlU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KENhY2hlU2VydmljZSk7XG4gIH1cblxuICBhc2tUb2tlbigpOiBPYnNlcnZhYmxlPElUb2tlbk1vZGVsPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdhc2tUb2tlbicpO1xuICAgIGlmICh0aGlzLnRva2VuU2VydmljZS5nZXQoKT8udG9rZW4pIHtcbiAgICAgIGNvbnN0IG5vdENvdmVydFRva2VuID0gdGhpcy50b2tlblNlcnZpY2UuZ2V0KCk7XG4gICAgICBsZXQgY29udmVydGVkVG9rZW46IElUb2tlbk1vZGVsO1xuICAgICAgaWYgKG5vdENvdmVydFRva2VuICYmIG5vdENvdmVydFRva2VuWydhY2Nlc3NfdG9rZW4nXSkge1xuICAgICAgICBjb252ZXJ0ZWRUb2tlbiA9IHtcbiAgICAgICAgICB0b2tlbjogbm90Q292ZXJ0VG9rZW5bJ2FjY2Vzc190b2tlbiddLFxuICAgICAgICAgIGV4cGlyZWQ6IG5vdENvdmVydFRva2VuWydleHBpcmVzX2luJ10sXG4gICAgICAgICAgcmVmcmVzaFRva2VuOiBub3RDb3ZlcnRUb2tlblsncmVmcmVzaF90b2tlbiddLFxuICAgICAgICAgIHNjb3BlOiBub3RDb3ZlcnRUb2tlblsnc2NvcGUnXSxcbiAgICAgICAgICB0b2tlblR5cGU6IG5vdENvdmVydFRva2VuWyd0b2tlbl90eXBlJ11cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9mKGNvbnZlcnRlZFRva2VuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLnRva2VuU2VydmljZS5nZXQoKSEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb25maWcubG9naW5Gb3JtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoVG9rZW5CeVVQKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFRva2VuQnlDYXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmZXRjaFRva2VuQnlVUCgpOiBPYnNlcnZhYmxlPElUb2tlbk1vZGVsPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdmZXRjaFRva2VuQnlVUCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChgL2F1dGgvb2F1dGgvdG9rZW4/X2FsbG93X2Fub255bW91cz10cnVlYCwgdGhpcy5jb25maWcubG9naW5Gb3JtKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuLCBzY29wZSwgdG9rZW5fdHlwZSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICBleHBpcmVkOiBleHBpcmVzX2luLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaF90b2tlbixcbiAgICAgICAgICB0b2tlblR5cGU6IHRva2VuX3R5cGUsXG4gICAgICAgICAgc2NvcGVcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoVG9rZW5CeUNhcygpOiBPYnNlcnZhYmxlPElUb2tlbk1vZGVsPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdmZXRjaFRva2VuQnlDYXMnKTtcbiAgICBjb25zdCB1cmkgPSBlbmNvZGVVUklDb21wb25lbnQodGhpcy5pbmplY3Rvci5nZXQoV0lORE9XKS5sb2NhdGlvbi5ocmVmKTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAvY2FzLXByb3h5L2FwcC92YWxpZGF0ZV9mdWxsP2NhbGxiYWNrPSR7dXJpfSZfYWxsb3dfYW5vbnltb3VzPXRydWUmdGltZXN0YW1wPSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLmVycmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgMjAwMDpcbiAgICAgICAgICAgICAgY29uc3QgeyBhY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4sIHNjb3BlLCB0b2tlbl90eXBlIH0gPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJlZDogZXhwaXJlc19pbixcbiAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgICAgICAgdG9rZW5UeXBlOiB0b2tlbl90eXBlLFxuICAgICAgICAgICAgICAgIHNjb3BlXG4gICAgICAgICAgICAgIH0gYXMgSVRva2VuTW9kZWw7XG4gICAgICAgICAgICBjYXNlIDIwMDE6XG4gICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KFdJTkRPVykubG9jYXRpb24uaHJlZiA9IHJlc3BvbnNlLm1zZztcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDb29raWUgRXJyb3I6IENhbid0IGZpbmQgQ2FzIENvb2tpZSxTbyBqdW1wIHRvIGxvZ2luIVwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5tc2cpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlLm1zZyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IocmVzcG9uc2UubXNnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjYXMgdW5rbm93biBlcnJvcicpO1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdVbmtub3duIEVycm9yOiBDYXMgYXV0aCBleGNlcHRpb24hJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgbG9naW4oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdsb2dpbiB3aGl0ZSBsb2dpbiBmb3JtLT4nLCB0aGlzLmNvbmZpZy5sb2dpbkZvcm0pO1xuICAgIHJldHVybiB0aGlzLmFza1Rva2VuKCkucGlwZShcbiAgICAgIG1lcmdlTWFwKHRva2VuID0+IHtcbiAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6IGdldCB0b2tlbi0+JywgdG9rZW4pO1xuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2Uuc2V0KCdhdXRoJywge1xuICAgICAgICAgIHRva2VuX3NlbmRfa2V5OiAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgdG9rZW5fc2VuZF90ZW1wbGF0ZTogYCR7dG9rZW4udG9rZW5UeXBlfSBcXCR7dG9rZW59YCxcbiAgICAgICAgICB0b2tlbl9zZW5kX3BsYWNlOiAnaGVhZGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdzZXQgdG9rZW4nKTtcbiAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVJbml0KCk7XG4gICAgICB9KSxcbiAgICAgIG1lcmdlQWxsKClcbiAgICApO1xuICB9XG5cbiAgY2FjaGVJbml0KCk6IE9ic2VydmFibGU8dm9pZFtdPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdjYWNoZUluaXQnKTtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfdXNlcicsIHsgbW9kZTogJ25vbmUnIH0pO1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldCgnX3l6X2hlYWRlcicsIHsgbW9kZTogJ25vbmUnIH0pO1xuICAgIGNvbnN0IHByb2plY3QgPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoJ195el9wcm9qZWN0X2luZm8nLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICByZXR1cm4gZm9ya0pvaW4ob2YodXNlciksIG9mKGhlYWRlciksIG9mKHByb2plY3QpKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFt1LCBoLCBwXSkgPT4ge1xuICAgICAgICBsZXQgbGlzdCA9IFtdO1xuICAgICAgICAvLyB1c2VyIGNhY2hlXG4gICAgICAgIGlmICghdSkge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2ggdXNlciBjYWNoZScpO1xuICAgICAgICAgIGxpc3QucHVzaChcbiAgICAgICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoYC9hdXRoL3VzZXJgKS5waXBlKFxuICAgICAgICAgICAgICBtYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X3VzZXInLCB1c2VyLnByaW5jaXBhbCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coJ3l6LmF1dGguc2VydmljZTogJywgJ3VzZXIgcmVjYWNoZScpO1xuICAgICAgICAgIGxpc3QucHVzaChvZjxhbnk+KCgpID0+IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGVhZGVyIGNhY2hlXG4gICAgICAgIGlmICghaCkge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2ggaGVhZGVyIGNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2F1dGgvYWxsaGVhZGVyL3YyYCkucGlwZShcbiAgICAgICAgICAgICAgbWFwKChoZWFkZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X2hlYWRlcicsIGhlYWRlci5kYXRhKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnaGVhZGVyIHJlY2FjaGUnKTtcbiAgICAgICAgICBsaXN0LnB1c2gob2Y8YW55PigoKSA9PiB7fSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByb2plY3QgY2FjaGVcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdmZXRjaCBwcm9qZWN0IGNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2FwcC1tYW5hZ2VyL3Byb2plY3QvaW5mb2ApLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoaW5mbzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0KCdfeXpfcHJvamVjdF9pbmZvJywgaW5mby5kYXRhKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAncHJvamVjdCByZWNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKG9mPGFueT4oKCkgPT4ge30pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4obGlzdCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWXVuemFpQXV0aFNlcnZpY2UgYXMgWXpBdXRoU2VydmljZSwgWXVuemFpQXV0aFNlcnZpY2UgfTtcbiJdfQ==
1
+ import { Injectable } from '@angular/core';
2
+ import { forkJoin, map, mergeAll, mergeMap, of } from 'rxjs';
3
+ import { YA_SERVICE_TOKEN } from '@yelon/auth';
4
+ import { CacheService } from '@yelon/cache';
5
+ import { _HttpClient } from '@yelon/theme';
6
+ import { log, WINDOW, YunzaiConfigService } from '@yelon/util';
7
+ import { mergeBisConfig } from './bis.config';
8
+ import * as i0 from "@angular/core";
9
+ class YunzaiAuthService {
10
+ constructor(injector) {
11
+ this.injector = injector;
12
+ this.config = mergeBisConfig(this.configService);
13
+ }
14
+ get configService() {
15
+ return this.injector.get(YunzaiConfigService);
16
+ }
17
+ get tokenService() {
18
+ return this.injector.get(YA_SERVICE_TOKEN);
19
+ }
20
+ get httpClient() {
21
+ return this.injector.get(_HttpClient);
22
+ }
23
+ get cacheService() {
24
+ return this.injector.get(CacheService);
25
+ }
26
+ askToken() {
27
+ log('yz.auth.service: ', 'askToken');
28
+ if (this.tokenService.get()?.token) {
29
+ const notCovertToken = this.tokenService.get();
30
+ let convertedToken;
31
+ if (notCovertToken && notCovertToken['access_token']) {
32
+ convertedToken = {
33
+ token: notCovertToken['access_token'],
34
+ expired: notCovertToken['expires_in'],
35
+ refreshToken: notCovertToken['refresh_token'],
36
+ scope: notCovertToken['scope'],
37
+ tokenType: notCovertToken['token_type']
38
+ };
39
+ return of(convertedToken);
40
+ }
41
+ else {
42
+ return of(this.tokenService.get());
43
+ }
44
+ }
45
+ else {
46
+ if (this.config.loginForm) {
47
+ return this.fetchTokenByUP();
48
+ }
49
+ else {
50
+ return this.fetchTokenByCas();
51
+ }
52
+ }
53
+ }
54
+ fetchTokenByUP() {
55
+ log('yz.auth.service: ', 'fetchTokenByUP');
56
+ return this.httpClient.post(`/auth/oauth/token?_allow_anonymous=true`, this.config.loginForm).pipe(map((response) => {
57
+ const { access_token, expires_in, refresh_token, scope, token_type } = response;
58
+ return {
59
+ token: access_token,
60
+ expired: expires_in,
61
+ refreshToken: refresh_token,
62
+ tokenType: token_type,
63
+ scope
64
+ };
65
+ }));
66
+ }
67
+ fetchTokenByCas() {
68
+ log('yz.auth.service: ', 'fetchTokenByCas');
69
+ const uri = encodeURIComponent(this.injector.get(WINDOW).location.href);
70
+ return this.httpClient
71
+ .get(`/cas-proxy/app/validate_full?callback=${uri}&_allow_anonymous=true&timestamp=${new Date().getTime()}`)
72
+ .pipe(map((response) => {
73
+ switch (response.errcode) {
74
+ case 2000:
75
+ const { access_token, expires_in, refresh_token, scope, token_type } = response.data;
76
+ return {
77
+ token: access_token,
78
+ expired: expires_in,
79
+ refreshToken: refresh_token,
80
+ tokenType: token_type,
81
+ scope
82
+ };
83
+ case 2001:
84
+ this.injector.get(WINDOW).location.href = response.msg;
85
+ throw Error("Cookie Error: Can't find Cas Cookie,So jump to login!");
86
+ default:
87
+ if (response.data) {
88
+ console.error(response.data);
89
+ throw Error(response.data);
90
+ }
91
+ else if (response.msg) {
92
+ console.error(response.msg);
93
+ throw Error(response.msg);
94
+ }
95
+ else {
96
+ console.error('cas unknown error');
97
+ throw Error('Unknown Error: Cas auth exception!');
98
+ }
99
+ }
100
+ }));
101
+ }
102
+ login() {
103
+ log('yz.auth.service: ', 'login white login form->', this.config.loginForm);
104
+ return this.askToken().pipe(mergeMap(token => {
105
+ log('yz.auth.service: get token->', token);
106
+ this.configService.set('auth', {
107
+ token_send_key: 'Authorization',
108
+ token_send_template: `${token.tokenType} \${token}`,
109
+ token_send_place: 'header'
110
+ });
111
+ log('yz.auth.service: ', 'set token');
112
+ this.tokenService.set(token);
113
+ return this.cacheInit();
114
+ }), mergeAll());
115
+ }
116
+ cacheInit() {
117
+ log('yz.auth.service: ', 'cacheInit');
118
+ const tenant = this.cacheService.get('_yz_tenant', { mode: 'none' });
119
+ const user = this.cacheService.get('_yz_user', { mode: 'none' });
120
+ const header = this.cacheService.get('_yz_header', { mode: 'none' });
121
+ const project = this.cacheService.get('_yz_project_info', { mode: 'none' });
122
+ return forkJoin(of(user), of(header), of(project)).pipe(mergeMap(([u, h, p]) => {
123
+ let list = [];
124
+ // user cache
125
+ if (!u || !tenant) {
126
+ log('yz.auth.service: ', 'fetch user cache');
127
+ list.push(this.httpClient.get(`/auth/user`).pipe(map((user) => {
128
+ this.cacheService.set('_yz_tenant', user.tenantId);
129
+ this.cacheService.set('_yz_user', user.principal);
130
+ })));
131
+ }
132
+ else {
133
+ log('yz.auth.service: ', 'user recache');
134
+ list.push(of(() => { }));
135
+ }
136
+ // header cache
137
+ if (!h) {
138
+ log('yz.auth.service: ', 'fetch header cache');
139
+ list.push(this.httpClient.get(`/auth/allheader/v2`).pipe(map((header) => {
140
+ this.cacheService.set('_yz_header', header.data);
141
+ })));
142
+ }
143
+ else {
144
+ log('yz.auth.service: ', 'header recache');
145
+ list.push(of(() => { }));
146
+ }
147
+ // project cache
148
+ if (!p) {
149
+ log('yz.auth.service: ', 'fetch project cache');
150
+ list.push(this.httpClient.get(`/app-manager/project/info`).pipe(map((info) => {
151
+ this.cacheService.set('_yz_project_info', info.data);
152
+ })));
153
+ }
154
+ else {
155
+ log('yz.auth.service: ', 'project recache');
156
+ list.push(of(() => { }));
157
+ }
158
+ return forkJoin(list);
159
+ }));
160
+ }
161
+ }
162
+ YunzaiAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: YunzaiAuthService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
163
+ YunzaiAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: YunzaiAuthService, providedIn: 'root' });
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: YunzaiAuthService, decorators: [{
165
+ type: Injectable,
166
+ args: [{ providedIn: 'root' }]
167
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
168
+ export { YunzaiAuthService as YzAuthService, YunzaiAuthService };
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQveXVuemFpLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpFLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUU5QyxNQUNNLGlCQUFpQjtJQUdyQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBWSxhQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBWSxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElB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Q04sR0FBRyxDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBTSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlCO1lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OzhHQTlLRyxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQURHLE1BQU07MkZBQzFCLGlCQUFpQjtrQkFEdEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBa0xsQyxPQUFPLEVBQUUsaUJBQWlCLElBQUksYUFBYSxFQUFFLGlCQUFpQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG1hcCwgbWVyZ2VBbGwsIG1lcmdlTWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJVG9rZW5Nb2RlbCwgSVRva2VuU2VydmljZSwgWUFfU0VSVklDRV9UT0tFTiB9IGZyb20gJ0B5ZWxvbi9hdXRoJztcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJ0B5ZWxvbi9jYWNoZSc7XG5pbXBvcnQgeyBfSHR0cENsaWVudCB9IGZyb20gJ0B5ZWxvbi90aGVtZSc7XG5pbXBvcnQgeyBsb2csIFdJTkRPVywgWXVuemFpQnVzaW5lc3NDb25maWcsIFl1bnphaUNvbmZpZ1NlcnZpY2UgfSBmcm9tICdAeWVsb24vdXRpbCc7XG5cbmltcG9ydCB7IG1lcmdlQmlzQ29uZmlnIH0gZnJvbSAnLi9iaXMuY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmNsYXNzIFl1bnphaUF1dGhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWc6IFl1bnphaUJ1c2luZXNzQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5jb25maWcgPSBtZXJnZUJpc0NvbmZpZyh0aGlzLmNvbmZpZ1NlcnZpY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZmlnU2VydmljZSgpOiBZdW56YWlDb25maWdTZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoWXVuemFpQ29uZmlnU2VydmljZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCB0b2tlblNlcnZpY2UoKTogSVRva2VuU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaHR0cENsaWVudCgpOiBfSHR0cENsaWVudCB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KF9IdHRwQ2xpZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNhY2hlU2VydmljZSgpOiBDYWNoZVNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChDYWNoZVNlcnZpY2UpO1xuICB9XG5cbiAgYXNrVG9rZW4oKTogT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbD4ge1xuICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnYXNrVG9rZW4nKTtcbiAgICBpZiAodGhpcy50b2tlblNlcnZpY2UuZ2V0KCk/LnRva2VuKSB7XG4gICAgICBjb25zdCBub3RDb3ZlcnRUb2tlbiA9IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpO1xuICAgICAgbGV0IGNvbnZlcnRlZFRva2VuOiBJVG9rZW5Nb2RlbDtcbiAgICAgIGlmIChub3RDb3ZlcnRUb2tlbiAmJiBub3RDb3ZlcnRUb2tlblsnYWNjZXNzX3Rva2VuJ10pIHtcbiAgICAgICAgY29udmVydGVkVG9rZW4gPSB7XG4gICAgICAgICAgdG9rZW46IG5vdENvdmVydFRva2VuWydhY2Nlc3NfdG9rZW4nXSxcbiAgICAgICAgICBleHBpcmVkOiBub3RDb3ZlcnRUb2tlblsnZXhwaXJlc19pbiddLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogbm90Q292ZXJ0VG9rZW5bJ3JlZnJlc2hfdG9rZW4nXSxcbiAgICAgICAgICBzY29wZTogbm90Q292ZXJ0VG9rZW5bJ3Njb3BlJ10sXG4gICAgICAgICAgdG9rZW5UeXBlOiBub3RDb3ZlcnRUb2tlblsndG9rZW5fdHlwZSddXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvZihjb252ZXJ0ZWRUb2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2YodGhpcy50b2tlblNlcnZpY2UuZ2V0KCkhKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmxvZ2luRm9ybSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFRva2VuQnlVUCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hUb2tlbkJ5Q2FzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmV0Y2hUb2tlbkJ5VVAoKTogT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbD4ge1xuICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2hUb2tlbkJ5VVAnKTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoYC9hdXRoL29hdXRoL3Rva2VuP19hbGxvd19hbm9ueW1vdXM9dHJ1ZWAsIHRoaXMuY29uZmlnLmxvZ2luRm9ybSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IGFjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbiwgc2NvcGUsIHRva2VuX3R5cGUgfSA9IHJlc3BvbnNlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgZXhwaXJlZDogZXhwaXJlc19pbixcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgdG9rZW5UeXBlOiB0b2tlbl90eXBlLFxuICAgICAgICAgIHNjb3BlXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmZXRjaFRva2VuQnlDYXMoKTogT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbD4ge1xuICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2hUb2tlbkJ5Q2FzJyk7XG4gICAgY29uc3QgdXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuaW5qZWN0b3IuZ2V0KFdJTkRPVykubG9jYXRpb24uaHJlZik7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgL2Nhcy1wcm94eS9hcHAvdmFsaWRhdGVfZnVsbD9jYWxsYmFjaz0ke3VyaX0mX2FsbG93X2Fub255bW91cz10cnVlJnRpbWVzdGFtcD0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5lcnJjb2RlKSB7XG4gICAgICAgICAgICBjYXNlIDIwMDA6XG4gICAgICAgICAgICAgIGNvbnN0IHsgYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuLCBzY29wZSwgdG9rZW5fdHlwZSB9ID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgIGV4cGlyZWQ6IGV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgcmVmcmVzaFRva2VuOiByZWZyZXNoX3Rva2VuLFxuICAgICAgICAgICAgICAgIHRva2VuVHlwZTogdG9rZW5fdHlwZSxcbiAgICAgICAgICAgICAgICBzY29wZVxuICAgICAgICAgICAgICB9IGFzIElUb2tlbk1vZGVsO1xuICAgICAgICAgICAgY2FzZSAyMDAxOlxuICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLmdldChXSU5ET1cpLmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS5tc2c7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFwiQ29va2llIEVycm9yOiBDYW4ndCBmaW5kIENhcyBDb29raWUsU28ganVtcCB0byBsb2dpbiFcIik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UubXNnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZS5tc2cpO1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKHJlc3BvbnNlLm1zZyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignY2FzIHVua25vd24gZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignVW5rbm93biBFcnJvcjogQ2FzIGF1dGggZXhjZXB0aW9uIScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGxvZ2luKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnbG9naW4gd2hpdGUgbG9naW4gZm9ybS0+JywgdGhpcy5jb25maWcubG9naW5Gb3JtKTtcbiAgICByZXR1cm4gdGhpcy5hc2tUb2tlbigpLnBpcGUoXG4gICAgICBtZXJnZU1hcCh0b2tlbiA9PiB7XG4gICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiBnZXQgdG9rZW4tPicsIHRva2VuKTtcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnNldCgnYXV0aCcsIHtcbiAgICAgICAgICB0b2tlbl9zZW5kX2tleTogJ0F1dGhvcml6YXRpb24nLFxuICAgICAgICAgIHRva2VuX3NlbmRfdGVtcGxhdGU6IGAke3Rva2VuLnRva2VuVHlwZX0gXFwke3Rva2VufWAsXG4gICAgICAgICAgdG9rZW5fc2VuZF9wbGFjZTogJ2hlYWRlcidcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnc2V0IHRva2VuJyk7XG4gICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldCh0b2tlbik7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlSW5pdCgpO1xuICAgICAgfSksXG4gICAgICBtZXJnZUFsbCgpXG4gICAgKTtcbiAgfVxuXG4gIGNhY2hlSW5pdCgpOiBPYnNlcnZhYmxlPHZvaWRbXT4ge1xuICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnY2FjaGVJbml0Jyk7XG4gICAgY29uc3QgdGVuYW50ID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfdGVuYW50JywgeyBtb2RlOiAnbm9uZScgfSk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldCgnX3l6X3VzZXInLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoJ195el9oZWFkZXInLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBjb25zdCBwcm9qZWN0ID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfcHJvamVjdF9pbmZvJywgeyBtb2RlOiAnbm9uZScgfSk7XG4gICAgcmV0dXJuIGZvcmtKb2luKG9mKHVzZXIpLCBvZihoZWFkZXIpLCBvZihwcm9qZWN0KSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChbdSwgaCwgcF0pID0+IHtcbiAgICAgICAgbGV0IGxpc3QgPSBbXTtcbiAgICAgICAgLy8gdXNlciBjYWNoZVxuICAgICAgICBpZiAoIXUgfHwgIXRlbmFudCkge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2ggdXNlciBjYWNoZScpO1xuICAgICAgICAgIGxpc3QucHVzaChcbiAgICAgICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoYC9hdXRoL3VzZXJgKS5waXBlKFxuICAgICAgICAgICAgICBtYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X3RlbmFudCcsIHVzZXIudGVuYW50SWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X3VzZXInLCB1c2VyLnByaW5jaXBhbCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coJ3l6LmF1dGguc2VydmljZTogJywgJ3VzZXIgcmVjYWNoZScpO1xuICAgICAgICAgIGxpc3QucHVzaChvZjxhbnk+KCgpID0+IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGVhZGVyIGNhY2hlXG4gICAgICAgIGlmICghaCkge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2ggaGVhZGVyIGNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2F1dGgvYWxsaGVhZGVyL3YyYCkucGlwZShcbiAgICAgICAgICAgICAgbWFwKChoZWFkZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X2hlYWRlcicsIGhlYWRlci5kYXRhKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnaGVhZGVyIHJlY2FjaGUnKTtcbiAgICAgICAgICBsaXN0LnB1c2gob2Y8YW55PigoKSA9PiB7fSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByb2plY3QgY2FjaGVcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdmZXRjaCBwcm9qZWN0IGNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2FwcC1tYW5hZ2VyL3Byb2plY3QvaW5mb2ApLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoaW5mbzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0KCdfeXpfcHJvamVjdF9pbmZvJywgaW5mby5kYXRhKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAncHJvamVjdCByZWNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKG9mPGFueT4oKCkgPT4ge30pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4obGlzdCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWXVuemFpQXV0aFNlcnZpY2UgYXMgWXpBdXRoU2VydmljZSwgWXVuemFpQXV0aFNlcnZpY2UgfTtcbiJdfQ==