@yelon/bis 18.3.0 → 19.0.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.
Files changed (45) hide show
  1. package/fesm2022/bis.mjs +96 -82
  2. package/fesm2022/bis.mjs.map +1 -1
  3. package/fesm2022/layout.mjs +99 -110
  4. package/fesm2022/layout.mjs.map +1 -1
  5. package/fesm2022/yunzai-widgets.mjs +104 -114
  6. package/fesm2022/yunzai-widgets.mjs.map +1 -1
  7. package/layout/layout-basic.component.d.ts +1 -2
  8. package/layout/style/layout-website-01.less +1 -0
  9. package/package.json +12 -20
  10. package/src/helper.d.ts +3 -8
  11. package/src/refresh-token.d.ts +1 -2
  12. package/src/startup.service.d.ts +2 -2
  13. package/src/website/layout-website-01.component.d.ts +4 -5
  14. package/src/website/layout-website-02.component.d.ts +6 -7
  15. package/src/yunzai-analysis-addon.guard.d.ts +1 -2
  16. package/esm2022/bis.mjs +0 -5
  17. package/esm2022/config/bis.config.mjs +0 -15
  18. package/esm2022/config/config.mjs +0 -5
  19. package/esm2022/config/public_api.mjs +0 -2
  20. package/esm2022/layout/layout-basic.component.mjs +0 -518
  21. package/esm2022/layout/layout-nav-application.component.mjs +0 -372
  22. package/esm2022/layout/layout-nav-group.component.mjs +0 -166
  23. package/esm2022/layout/layout-nav-tile.component.mjs +0 -15
  24. package/esm2022/layout/layout.mjs +0 -5
  25. package/esm2022/layout/layout.module.mjs +0 -54
  26. package/esm2022/layout/public_api.mjs +0 -6
  27. package/esm2022/public_api.mjs +0 -11
  28. package/esm2022/src/bis.module.mjs +0 -17
  29. package/esm2022/src/helper.mjs +0 -45
  30. package/esm2022/src/provide.mjs +0 -8
  31. package/esm2022/src/refresh-token.mjs +0 -79
  32. package/esm2022/src/startup.service.mjs +0 -205
  33. package/esm2022/src/website/layout-website-01.component.mjs +0 -173
  34. package/esm2022/src/website/layout-website-02.component.mjs +0 -204
  35. package/esm2022/src/yunzai-act.guard.mjs +0 -88
  36. package/esm2022/src/yunzai-analysis-addon.guard.mjs +0 -99
  37. package/esm2022/src/yunzai-default.interceptor.mjs +0 -63
  38. package/esm2022/yunzai-widgets/public_api.mjs +0 -7
  39. package/esm2022/yunzai-widgets/yunzai-clear-storage.component.mjs +0 -47
  40. package/esm2022/yunzai-widgets/yunzai-fullscreen.component.mjs +0 -47
  41. package/esm2022/yunzai-widgets/yunzai-i18n.component.mjs +0 -139
  42. package/esm2022/yunzai-widgets/yunzai-notify.component.mjs +0 -180
  43. package/esm2022/yunzai-widgets/yunzai-user.component.mjs +0 -120
  44. package/esm2022/yunzai-widgets/yunzai-widget.module.mjs +0 -62
  45. package/esm2022/yunzai-widgets/yunzai-widgets.mjs +0 -5
@@ -1,54 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { NgModule } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
- import { I18nPipe } from '@yelon/theme';
5
- import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
6
- import { NzFormModule } from 'ng-zorro-antd/form';
7
- import { NzGridModule } from 'ng-zorro-antd/grid';
8
- import { NzIconModule } from 'ng-zorro-antd/icon';
9
- import { NzInputModule } from 'ng-zorro-antd/input';
10
- import { NzTabsModule } from 'ng-zorro-antd/tabs';
11
- import { YunzaiLayoutBasicComponent } from './layout-basic.component';
12
- import { YunzaiLayoutNavGroupComponent } from './layout-nav-group.component';
13
- import { YunzaiLayoutNavTileComponent } from './layout-nav-tile.component';
14
- import * as i0 from "@angular/core";
15
- const COMPONENTS = [YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent];
16
- export class YunzaiLayoutModule {
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: YunzaiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
18
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: YunzaiLayoutModule, imports: [I18nPipe,
19
- FormsModule,
20
- NzFormModule,
21
- NzInputModule,
22
- CommonModule,
23
- NzGridModule,
24
- NzIconModule,
25
- NzDropDownModule,
26
- NzTabsModule, YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent], exports: [YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent] }); }
27
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: YunzaiLayoutModule, imports: [FormsModule,
28
- NzFormModule,
29
- NzInputModule,
30
- CommonModule,
31
- NzGridModule,
32
- NzIconModule,
33
- NzDropDownModule,
34
- NzTabsModule, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent] }); }
35
- }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: YunzaiLayoutModule, decorators: [{
37
- type: NgModule,
38
- args: [{
39
- imports: [
40
- I18nPipe,
41
- FormsModule,
42
- NzFormModule,
43
- NzInputModule,
44
- CommonModule,
45
- NzGridModule,
46
- NzIconModule,
47
- NzDropDownModule,
48
- NzTabsModule,
49
- ...COMPONENTS
50
- ],
51
- exports: COMPONENTS
52
- }]
53
- }] });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQvbGF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUUzRSxNQUFNLFVBQVUsR0FBRyxDQUFDLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixDQUFDLENBQUM7QUFpQjdHLE1BQU0sT0FBTyxrQkFBa0I7K0dBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCLFlBYjNCLFFBQVE7WUFDUixXQUFXO1lBQ1gsWUFBWTtZQUNaLGFBQWE7WUFDYixZQUFZO1lBQ1osWUFBWTtZQUNaLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsWUFBWSxFQVpJLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixhQUF2Riw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEI7Z0hBaUI5RixrQkFBa0IsWUFaM0IsV0FBVztZQUNYLFlBQVk7WUFDWixhQUFhO1lBQ2IsWUFBWTtZQUNaLFlBQVk7WUFDWixZQUFZO1lBQ1osZ0JBQWdCO1lBQ2hCLFlBQVksRUFaa0MsNkJBQTZCLEVBQUUsMEJBQTBCOzs0RkFpQjlGLGtCQUFrQjtrQkFmOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsUUFBUTt3QkFDUixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osR0FBRyxVQUFVO3FCQUNkO29CQUNELE9BQU8sRUFBRSxVQUFVO2lCQUNwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEkxOG5QaXBlIH0gZnJvbSAnQHllbG9uL3RoZW1lJztcbmltcG9ydCB7IE56RHJvcERvd25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2Ryb3Bkb3duJztcbmltcG9ydCB7IE56Rm9ybU1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvZm9ybSc7XG5pbXBvcnQgeyBOekdyaWRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2dyaWQnO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IE56SW5wdXRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2lucHV0JztcbmltcG9ydCB7IE56VGFic01vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvdGFicyc7XG5cbmltcG9ydCB7IFl1bnphaUxheW91dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IFl1bnphaUxheW91dE5hdkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtbmF2LWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBZdW56YWlMYXlvdXROYXZUaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtbmF2LXRpbGUuY29tcG9uZW50JztcblxuY29uc3QgQ09NUE9ORU5UUyA9IFtZdW56YWlMYXlvdXROYXZUaWxlQ29tcG9uZW50LCBZdW56YWlMYXlvdXROYXZHcm91cENvbXBvbmVudCwgWXVuemFpTGF5b3V0QmFzaWNDb21wb25lbnRdO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgSTE4blBpcGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTnpGb3JtTW9kdWxlLFxuICAgIE56SW5wdXRNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE56R3JpZE1vZHVsZSxcbiAgICBOekljb25Nb2R1bGUsXG4gICAgTnpEcm9wRG93bk1vZHVsZSxcbiAgICBOelRhYnNNb2R1bGUsXG4gICAgLi4uQ09NUE9ORU5UU1xuICBdLFxuICBleHBvcnRzOiBDT01QT05FTlRTXG59KVxuZXhwb3J0IGNsYXNzIFl1bnphaUxheW91dE1vZHVsZSB7fVxuIl19
@@ -1,6 +0,0 @@
1
- export * from './layout.module';
2
- export * from './layout-basic.component';
3
- export * from './layout-nav-application.component';
4
- export * from './layout-nav-group.component';
5
- export * from './layout-nav-tile.component';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xheW91dC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9sYXlvdXQtYmFzaWMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGF5b3V0LW5hdi1hcHBsaWNhdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9sYXlvdXQtbmF2LWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xheW91dC1uYXYtdGlsZS5jb21wb25lbnQnO1xuIl19
@@ -1,11 +0,0 @@
1
- export * from './src/provide';
2
- export * from './src/bis.module';
3
- export * from './src/helper';
4
- export * from './src/yunzai-default.interceptor';
5
- export * from './src/refresh-token';
6
- export * from './src/startup.service';
7
- export * from './src/yunzai-analysis-addon.guard';
8
- export * from './src/yunzai-act.guard';
9
- export * from './src/website/layout-website-01.component';
10
- export * from './src/website/layout-website-02.component';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3JjL3Byb3ZpZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYmlzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMveXVuemFpLWRlZmF1bHQuaW50ZXJjZXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvcmVmcmVzaC10b2tlbic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9zdGFydHVwLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMveXVuemFpLWFuYWx5c2lzLWFkZG9uLmd1YXJkJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3l1bnphaS1hY3QuZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvd2Vic2l0ZS9sYXlvdXQtd2Vic2l0ZS0wMS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvd2Vic2l0ZS9sYXlvdXQtd2Vic2l0ZS0wMi5jb21wb25lbnQnO1xuIl19
@@ -1,17 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { YunzaiLayoutModule } from '@yelon/bis/layout';
3
- import { YunzaiWidgetsModule } from '@yelon/bis/yunzai-widgets';
4
- import * as i0 from "@angular/core";
5
- export class BisModule {
6
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: BisModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: BisModule, imports: [YunzaiLayoutModule, YunzaiWidgetsModule], exports: [YunzaiLayoutModule, YunzaiWidgetsModule] }); }
8
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: BisModule, imports: [YunzaiLayoutModule, YunzaiWidgetsModule, YunzaiLayoutModule, YunzaiWidgetsModule] }); }
9
- }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: BisModule, decorators: [{
11
- type: NgModule,
12
- args: [{
13
- imports: [YunzaiLayoutModule, YunzaiWidgetsModule],
14
- exports: [YunzaiLayoutModule, YunzaiWidgetsModule]
15
- }]
16
- }] });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9zcmMvYmlzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUtoRSxNQUFNLE9BQU8sU0FBUzsrR0FBVCxTQUFTO2dIQUFULFNBQVMsWUFIVixrQkFBa0IsRUFBRSxtQkFBbUIsYUFDdkMsa0JBQWtCLEVBQUUsbUJBQW1CO2dIQUV0QyxTQUFTLFlBSFYsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQ3ZDLGtCQUFrQixFQUFFLG1CQUFtQjs7NEZBRXRDLFNBQVM7a0JBSnJCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUM7b0JBQ2xELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDO2lCQUNuRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFl1bnphaUxheW91dE1vZHVsZSB9IGZyb20gJ0B5ZWxvbi9iaXMvbGF5b3V0JztcbmltcG9ydCB7IFl1bnphaVdpZGdldHNNb2R1bGUgfSBmcm9tICdAeWVsb24vYmlzL3l1bnphaS13aWRnZXRzJztcbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtZdW56YWlMYXlvdXRNb2R1bGUsIFl1bnphaVdpZGdldHNNb2R1bGVdLFxuICBleHBvcnRzOiBbWXVuemFpTGF5b3V0TW9kdWxlLCBZdW56YWlXaWRnZXRzTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBCaXNNb2R1bGUge31cbiJdfQ==
@@ -1,45 +0,0 @@
1
- import { inject } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { YA_SERVICE_TOKEN } from '@yelon/auth';
4
- import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
5
- import { NzNotificationService } from 'ng-zorro-antd/notification';
6
- export const CODEMESSAGE = {
7
- 200: '服务器成功返回请求的数据。',
8
- 201: '新建或修改数据成功。',
9
- 202: '一个请求已经进入后台排队(异步任务)。',
10
- 204: '删除数据成功。',
11
- 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
12
- 401: '用户没有权限(令牌、用户名、密码错误)。',
13
- 403: '用户得到授权,但是访问是被禁止的。',
14
- 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
15
- 406: '请求的格式不可得。',
16
- 410: '请求的资源被永久删除,且不会再得到的。',
17
- 422: '当创建一个对象时,发生一个验证错误。',
18
- 500: '服务器发生错误,请检查服务器。',
19
- 502: '网关错误。',
20
- 503: '服务不可用,服务器暂时过载或维护。',
21
- 504: '网关超时。'
22
- };
23
- export function getAdditionalHeaders(headers) {
24
- const res = {};
25
- const lang = inject(YUNZAI_I18N_TOKEN).currentLang;
26
- if (!headers?.has('Accept-Language') && lang) {
27
- res['Accept-Language'] = lang;
28
- }
29
- return res;
30
- }
31
- export function checkStatus(injector, ev) {
32
- if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
33
- return;
34
- }
35
- const errortext = CODEMESSAGE[ev.status] || ev.statusText;
36
- injector.get(NzNotificationService).error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
37
- }
38
- export function goTo(injector, url) {
39
- setTimeout(() => injector.get(Router).navigateByUrl(url));
40
- }
41
- export function toLogin(injector) {
42
- injector.get(NzNotificationService).error(`未登录或登录已过期,请重新登录。`, ``);
43
- goTo(injector, injector.get(YA_SERVICE_TOKEN).login_url);
44
- }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL3NyYy9oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQThCO0lBQ3BELEdBQUcsRUFBRSxlQUFlO0lBQ3BCLEdBQUcsRUFBRSxZQUFZO0lBQ2pCLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUIsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsNkJBQTZCO0lBQ2xDLEdBQUcsRUFBRSxzQkFBc0I7SUFDM0IsR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixHQUFHLEVBQUUsNEJBQTRCO0lBQ2pDLEdBQUcsRUFBRSxXQUFXO0lBQ2hCLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUIsR0FBRyxFQUFFLG9CQUFvQjtJQUN6QixHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLEdBQUcsRUFBRSxPQUFPO0lBQ1osR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixHQUFHLEVBQUUsT0FBTztDQUNiLENBQUM7QUFFRixNQUFNLFVBQVUsb0JBQW9CLENBQUMsT0FBcUI7SUFDeEQsTUFBTSxHQUFHLEdBQStCLEVBQUUsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDbkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBa0IsRUFBRSxFQUFvQjtJQUNsRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQy9ELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQzFELFFBQVEsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RixDQUFDO0FBT0QsTUFBTSxVQUFVLElBQUksQ0FBQyxRQUFrQixFQUFFLEdBQVc7SUFDbEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsUUFBa0I7SUFDeEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFVLENBQUMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZUJhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBZQV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnQHllbG9uL2F1dGgnO1xuaW1wb3J0IHsgWVVOWkFJX0kxOE5fVE9LRU4gfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56Tm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbm90aWZpY2F0aW9uJztcblxuZXhwb3J0IGNvbnN0IENPREVNRVNTQUdFOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge1xuICAyMDA6ICfmnI3liqHlmajmiJDlip/ov5Tlm57or7fmsYLnmoTmlbDmja7jgIInLFxuICAyMDE6ICfmlrDlu7rmiJbkv67mlLnmlbDmja7miJDlip/jgIInLFxuICAyMDI6ICfkuIDkuKror7fmsYLlt7Lnu4/ov5vlhaXlkI7lj7DmjpLpmJ/vvIjlvILmraXku7vliqHvvInjgIInLFxuICAyMDQ6ICfliKDpmaTmlbDmja7miJDlip/jgIInLFxuICA0MDA6ICflj5Hlh7rnmoTor7fmsYLmnInplJnor6/vvIzmnI3liqHlmajmsqHmnInov5vooYzmlrDlu7rmiJbkv67mlLnmlbDmja7nmoTmk43kvZzjgIInLFxuICA0MDE6ICfnlKjmiLfmsqHmnInmnYPpmZDvvIjku6TniYzjgIHnlKjmiLflkI3jgIHlr4bnoIHplJnor6/vvInjgIInLFxuICA0MDM6ICfnlKjmiLflvpfliLDmjojmnYPvvIzkvYbmmK/orr/pl67mmK/ooqvnpoHmraLnmoTjgIInLFxuICA0MDQ6ICflj5Hlh7rnmoTor7fmsYLpkojlr7nnmoTmmK/kuI3lrZjlnKjnmoTorrDlvZXvvIzmnI3liqHlmajmsqHmnInov5vooYzmk43kvZzjgIInLFxuICA0MDY6ICfor7fmsYLnmoTmoLzlvI/kuI3lj6/lvpfjgIInLFxuICA0MTA6ICfor7fmsYLnmoTotYTmupDooqvmsLjkuYXliKDpmaTvvIzkuJTkuI3kvJrlho3lvpfliLDnmoTjgIInLFxuICA0MjI6ICflvZPliJvlu7rkuIDkuKrlr7nosaHml7bvvIzlj5HnlJ/kuIDkuKrpqozor4HplJnor6/jgIInLFxuICA1MDA6ICfmnI3liqHlmajlj5HnlJ/plJnor6/vvIzor7fmo4Dmn6XmnI3liqHlmajjgIInLFxuICA1MDI6ICfnvZHlhbPplJnor6/jgIInLFxuICA1MDM6ICfmnI3liqHkuI3lj6/nlKjvvIzmnI3liqHlmajmmoLml7bov4fovb3miJbnu7TmiqTjgIInLFxuICA1MDQ6ICfnvZHlhbPotoXml7bjgIInXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkaXRpb25hbEhlYWRlcnMoaGVhZGVycz86IEh0dHBIZWFkZXJzKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICBjb25zdCByZXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIGNvbnN0IGxhbmcgPSBpbmplY3QoWVVOWkFJX0kxOE5fVE9LRU4pLmN1cnJlbnRMYW5nO1xuICBpZiAoIWhlYWRlcnM/LmhhcygnQWNjZXB0LUxhbmd1YWdlJykgJiYgbGFuZykge1xuICAgIHJlc1snQWNjZXB0LUxhbmd1YWdlJ10gPSBsYW5nO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU3RhdHVzKGluamVjdG9yOiBJbmplY3RvciwgZXY6IEh0dHBSZXNwb25zZUJhc2UpOiB2b2lkIHtcbiAgaWYgKChldi5zdGF0dXMgPj0gMjAwICYmIGV2LnN0YXR1cyA8IDMwMCkgfHwgZXYuc3RhdHVzID09PSA0MDEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXJyb3J0ZXh0ID0gQ09ERU1FU1NBR0VbZXYuc3RhdHVzXSB8fCBldi5zdGF0dXNUZXh0O1xuICBpbmplY3Rvci5nZXQoTnpOb3RpZmljYXRpb25TZXJ2aWNlKS5lcnJvcihg6K+35rGC6ZSZ6K+vICR7ZXYuc3RhdHVzfTogJHtldi51cmx9YCwgZXJyb3J0ZXh0KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZVRocm93SHR0cEVycm9yIHtcbiAgYm9keTogTnpTYWZlQW55O1xuICBfdGhyb3c6IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnb1RvKGluamVjdG9yOiBJbmplY3RvciwgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgc2V0VGltZW91dCgoKSA9PiBpbmplY3Rvci5nZXQoUm91dGVyKS5uYXZpZ2F0ZUJ5VXJsKHVybCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Mb2dpbihpbmplY3RvcjogSW5qZWN0b3IpOiB2b2lkIHtcbiAgaW5qZWN0b3IuZ2V0KE56Tm90aWZpY2F0aW9uU2VydmljZSkuZXJyb3IoYOacqueZu+W9leaIlueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9leOAgmAsIGBgKTtcbiAgZ29UbyhpbmplY3RvciwgaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLmxvZ2luX3VybCEpO1xufVxuIl19
@@ -1,8 +0,0 @@
1
- import { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
2
- import { BisModule } from './bis.module';
3
- export function provideYunzaiBis() {
4
- const provides = [];
5
- provides.push(importProvidersFrom(BisModule));
6
- return makeEnvironmentProviders(provides);
7
- }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9zcmMvcHJvdmlkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixNQUFNLFFBQVEsR0FBMkIsRUFBRSxDQUFDO0lBQzVDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM5QyxPQUFPLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgaW1wb3J0UHJvdmlkZXJzRnJvbSwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJpc01vZHVsZSB9IGZyb20gJy4vYmlzLm1vZHVsZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlWXVuemFpQmlzKCk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgcHJvdmlkZXM6IEVudmlyb25tZW50UHJvdmlkZXJzW10gPSBbXTtcbiAgcHJvdmlkZXMucHVzaChpbXBvcnRQcm92aWRlcnNGcm9tKEJpc01vZHVsZSkpO1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKHByb3ZpZGVzKTtcbn1cbiJdfQ==
@@ -1,79 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { APP_INITIALIZER, Injector } from '@angular/core';
3
- import { BehaviorSubject, catchError, filter, switchMap, take, throwError } from 'rxjs';
4
- import { YA_SERVICE_TOKEN } from '@yelon/auth';
5
- import { log } from '@yelon/util';
6
- import { toLogin } from './helper';
7
- let refreshToking = false;
8
- let refreshToken$ = new BehaviorSubject(null);
9
- export const tryRefreshToken = (injector, ev, req, next) => {
10
- // 连刷新Token的请求都错了,那就是真错了
11
- if (['/auth/oauth/getOrCreateToken/webapp'].some(url => req.url.includes(url))) {
12
- toLogin(injector);
13
- return throwError(() => ev);
14
- }
15
- // 2、如果 `refreshToking` 为 `true` 表示已经在请求刷新 Token 中,后续所有请求转入等待状态,直至结果返回后再重新发起请求
16
- if (refreshToking) {
17
- return refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next(reAttachToken(injector, req))));
18
- }
19
- // 3、尝试调用刷新 Token
20
- refreshToking = true;
21
- refreshToken$.next(null);
22
- return refreshTokenRequest(injector).pipe(switchMap(res => {
23
- // 通知后续请求继续执行
24
- refreshToking = false;
25
- refreshToken$.next(res);
26
- // 重新保存新 token
27
- injector.get(YA_SERVICE_TOKEN).set(res);
28
- // 重新发起请求
29
- return next(reAttachToken(injector, req));
30
- }), catchError(err => {
31
- refreshToking = false;
32
- toLogin(injector);
33
- return throwError(() => err);
34
- }));
35
- };
36
- function reAttachToken(injector, req) {
37
- const token = injector.get(YA_SERVICE_TOKEN).get()?.access_token;
38
- return req.clone({
39
- setHeaders: {
40
- Authorization: `Bearer ${token}`
41
- }
42
- });
43
- }
44
- function refreshTokenRequest(injector) {
45
- const model = injector.get(YA_SERVICE_TOKEN).get();
46
- const form = new FormData();
47
- form.set('refresh_token', model?.refresh_token);
48
- form.set('grant_type', 'refresh_token');
49
- form.set('scope', 'webapp');
50
- return injector.get(HttpClient).post(`/auth/oauth/getOrCreateToken/webapp`, form);
51
- }
52
- function buildAuthRefresh(injector) {
53
- const tokenSrv = injector.get(YA_SERVICE_TOKEN);
54
- tokenSrv.refresh
55
- .pipe(filter(() => !refreshToking), switchMap(res => {
56
- log(res);
57
- refreshToking = true;
58
- return refreshTokenRequest(injector);
59
- }))
60
- .subscribe({
61
- next: res => {
62
- res.expired = +new Date() + 1000 * 60 * 5;
63
- refreshToking = false;
64
- tokenSrv.set(res);
65
- },
66
- error: () => toLogin(injector)
67
- });
68
- }
69
- export function provideYunzaiBindAuthRefresh() {
70
- return [
71
- {
72
- provide: APP_INITIALIZER,
73
- useFactory: (injector) => () => buildAuthRefresh(injector),
74
- deps: [Injector],
75
- multi: true
76
- }
77
- ];
78
- }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9zcmMvcmVmcmVzaC10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnRCxNQUFNLHNCQUFzQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRW5DLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztBQUMxQixJQUFJLGFBQWEsR0FBK0IsSUFBSSxlQUFlLENBQVksSUFBSSxDQUFDLENBQUM7QUFFckYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQzdCLFFBQWtCLEVBQ2xCLEVBQW9CLEVBQ3BCLEdBQTJCLEVBQzNCLElBQW1CLEVBQ0ksRUFBRTtJQUN6Qix3QkFBd0I7SUFDeEIsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9FLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsOEVBQThFO0lBQzlFLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsT0FBTyxhQUFh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QUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUMvQixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QjtJQUMxQyxPQUFPO1FBQ0w7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDcEUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIYW5kbGVyRm4sIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2VCYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBJbmplY3RvciwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgZmlsdGVyLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRha2UsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgWUFfU0VSVklDRV9UT0tFTiB9IGZyb20gJ0B5ZWxvbi9hdXRoJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJ0B5ZWxvbi91dGlsJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IHRvTG9naW4gfSBmcm9tICcuL2hlbHBlcic7XG5cbmxldCByZWZyZXNoVG9raW5nID0gZmFsc2U7XG5sZXQgcmVmcmVzaFRva2VuJDogQmVoYXZpb3JTdWJqZWN0PE56U2FmZUFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE56U2FmZUFueT4obnVsbCk7XG5cbmV4cG9ydCBjb25zdCB0cnlSZWZyZXNoVG9rZW4gPSAoXG4gIGluamVjdG9yOiBJbmplY3RvcixcbiAgZXY6IEh0dHBSZXNwb25zZUJhc2UsXG4gIHJlcTogSHR0cFJlcXVlc3Q8TnpTYWZlQW55PixcbiAgbmV4dDogSHR0cEhhbmRsZXJGblxuKTogT2JzZXJ2YWJsZTxOelNhZmVBbnk+ID0+IHtcbiAgLy8g6L+e5Yi35pawVG9rZW7nmoTor7fmsYLpg73plJnkuobvvIzpgqPlsLHmmK/nnJ/plJnkuoZcbiAgaWYgKFsnL2F1dGgvb2F1dGgvZ2V0T3JDcmVhdGVUb2tlbi93ZWJhcHAnXS5zb21lKHVybCA9PiByZXEudXJsLmluY2x1ZGVzKHVybCkpKSB7XG4gICAgdG9Mb2dpbihpbmplY3Rvcik7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXYpO1xuICB9XG4gIC8vIDLjgIHlpoLmnpwgYHJlZnJlc2hUb2tpbmdgIOS4uiBgdHJ1ZWAg6KGo56S65bey57uP5Zyo6K+35rGC5Yi35pawIFRva2VuIOS4re+8jOWQjue7reaJgOacieivt+axgui9rOWFpeetieW+heeKtuaAge+8jOebtOiHs+e7k+aenOi/lOWbnuWQjuWGjemHjeaWsOWPkei1t+ivt+axglxuICBpZiAocmVmcmVzaFRva2luZykge1xuICAgIHJldHVybiByZWZyZXNoVG9rZW4kLnBpcGUoXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiBuZXh0KHJlQXR0YWNoVG9rZW4oaW5qZWN0b3IsIHJlcSkpKVxuICAgICk7XG4gIH1cbiAgLy8gM+OAgeWwneivleiwg+eUqOWIt+aWsCBUb2tlblxuICByZWZyZXNoVG9raW5nID0gdHJ1ZTtcbiAgcmVmcmVzaFRva2VuJC5uZXh0KG51bGwpO1xuXG4gIHJldHVybiByZWZyZXNoVG9rZW5SZXF1ZXN0KGluamVjdG9yKS5waXBlKFxuICAgIHN3aXRjaE1hcChyZXMgPT4ge1xuICAgICAgLy8g6YCa55+l5ZCO57ut6K+35rGC57un57ut5omn6KGMXG4gICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICByZWZyZXNoVG9rZW4kLm5leHQocmVzKTtcbiAgICAgIC8vIOmHjeaWsOS/neWtmOaWsCB0b2tlblxuICAgICAgaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLnNldChyZXMpO1xuICAgICAgLy8g6YeN5paw5Y+R6LW36K+35rGCXG4gICAgICByZXR1cm4gbmV4dChyZUF0dGFjaFRva2VuKGluamVjdG9yLCByZXEpKTtcbiAgICB9KSxcbiAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICB0b0xvZ2luKGluamVjdG9yKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgfSlcbiAgKTtcbn07XG5cbmZ1bmN0aW9uIHJlQXR0YWNoVG9rZW4oaW5qZWN0b3I6IEluamVjdG9yLCByZXE6IEh0dHBSZXF1ZXN0PE56U2FmZUFueT4pOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+IHtcbiAgY29uc3QgdG9rZW4gPSBpbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTikuZ2V0KCk/LmFjY2Vzc190b2tlbjtcbiAgcmV0dXJuIHJlcS5jbG9uZSh7XG4gICAgc2V0SGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWBcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoVG9rZW5SZXF1ZXN0KGluamVjdG9yOiBJbmplY3Rvcik6IE9ic2VydmFibGU8TnpTYWZlQW55PiB7XG4gIGNvbnN0IG1vZGVsID0gaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLmdldCgpO1xuICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gIGZvcm0uc2V0KCdyZWZyZXNoX3Rva2VuJywgbW9kZWw/LnJlZnJlc2hfdG9rZW4hKTtcbiAgZm9ybS5zZXQoJ2dyYW50X3R5cGUnLCAncmVmcmVzaF90b2tlbicpO1xuICBmb3JtLnNldCgnc2NvcGUnLCAnd2ViYXBwJyk7XG4gIHJldHVybiBpbmplY3Rvci5nZXQoSHR0cENsaWVudCkucG9zdChgL2F1dGgvb2F1dGgvZ2V0T3JDcmVhdGVUb2tlbi93ZWJhcHBgLCBmb3JtKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBdXRoUmVmcmVzaChpbmplY3RvcjogSW5qZWN0b3IpOiB2b2lkIHtcbiAgY29uc3QgdG9rZW5TcnYgPSBpbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTik7XG4gIHRva2VuU3J2LnJlZnJlc2hcbiAgICAucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiAhcmVmcmVzaFRva2luZyksXG4gICAgICBzd2l0Y2hNYXAocmVzID0+IHtcbiAgICAgICAgbG9nKHJlcyk7XG4gICAgICAgIHJlZnJlc2hUb2tpbmcgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVmcmVzaFRva2VuUmVxdWVzdChpbmplY3Rvcik7XG4gICAgICB9KVxuICAgIClcbiAgICAuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgIHJlcy5leHBpcmVkID0gK25ldyBEYXRlKCkgKyAxMDAwICogNjAgKiA1O1xuICAgICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICAgIHRva2VuU3J2LnNldChyZXMpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB0b0xvZ2luKGluamVjdG9yKVxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVl1bnphaUJpbmRBdXRoUmVmcmVzaCgpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiAoKSA9PiBidWlsZEF1dGhSZWZyZXNoKGluamVjdG9yKSxcbiAgICAgIGRlcHM6IFtJbmplY3Rvcl0sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXTtcbn1cbiJdfQ==
@@ -1,205 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { APP_INITIALIZER, inject, Injectable } from '@angular/core';
3
- import { catchError, combineLatest, EMPTY, map, mergeMap, of } from 'rxjs';
4
- import { ACLService } from '@yelon/acl';
5
- import { YA_SERVICE_TOKEN } from '@yelon/auth';
6
- import { mergeBisConfig } from '@yelon/bis/config';
7
- import { MenuService, SettingsService, TitleService, YUNZAI_I18N_TOKEN } from '@yelon/theme';
8
- import { deepCopy, useLocalStorageCurrent, useLocalStorageDefaultRoute, useLocalStorageHeader, useLocalStorageProjectInfo, useLocalStorageTenant, useLocalStorageUser, WINDOW, YunzaiConfigService } from '@yelon/util';
9
- import * as i0 from "@angular/core";
10
- export function provideYunzaiStartup() {
11
- return [
12
- YunzaiStartupService,
13
- {
14
- provide: APP_INITIALIZER,
15
- useFactory: (startupService) => () => startupService.load(),
16
- deps: [YunzaiStartupService],
17
- multi: true
18
- }
19
- ];
20
- }
21
- export class YunzaiStartupService {
22
- constructor() {
23
- this.config = mergeBisConfig(inject(YunzaiConfigService));
24
- this.menuService = inject(MenuService);
25
- this.aclService = inject(ACLService);
26
- this.titleService = inject(TitleService);
27
- this.tokenService = inject(YA_SERVICE_TOKEN);
28
- this.httpClient = inject(HttpClient);
29
- this.settingService = inject(SettingsService);
30
- this.i18n = inject(YUNZAI_I18N_TOKEN);
31
- this.win = inject(WINDOW);
32
- this.configService = inject(YunzaiConfigService);
33
- }
34
- load(param) {
35
- let defaultLang = this.settingService.layout.lang || this.i18n.defaultLang || 'zh-CN';
36
- const [setTenant] = useLocalStorageTenant();
37
- const [setUser, getUser] = useLocalStorageUser();
38
- const [setHeader] = useLocalStorageHeader();
39
- const [setProject] = useLocalStorageProjectInfo();
40
- const [setDefaultRoute] = useLocalStorageDefaultRoute();
41
- const [setCurrent] = useLocalStorageCurrent();
42
- return this.token(param).pipe(mergeMap((token) => {
43
- if (token === false) {
44
- return this.i18n.loadLocaleData(defaultLang).pipe(map((langData) => {
45
- this.i18n.use(defaultLang, langData);
46
- this.settingService.setLayout('lang', defaultLang);
47
- }), mergeMap(() => EMPTY));
48
- }
49
- this.configService.set('auth', {
50
- token_send_key: 'Authorization',
51
- token_send_template: `${token.token_type} \${access_token}`,
52
- token_send_place: 'header'
53
- });
54
- this.tokenService.set(token);
55
- return of(void 0);
56
- }), mergeMap(() => {
57
- return combineLatest([
58
- this.httpClient.get(`/auth/user`),
59
- this.httpClient.get(`/auth/allheader/v2`),
60
- this.httpClient.get(`/app-manager/project/info`)
61
- ]).pipe(map(([user, header, project]) => {
62
- setUser(user.principal);
63
- setTenant(user.tenantId);
64
- setHeader(header.data);
65
- setProject(project.data);
66
- return void 0;
67
- }));
68
- }), mergeMap(() => {
69
- return this.i18n.loadLangData(defaultLang).pipe(map((langData) => {
70
- this.i18n.use(defaultLang, langData);
71
- return void 0;
72
- }));
73
- }), mergeMap(() => {
74
- const yunzaiUser = getUser();
75
- const yunzaiMenus = deepCopy(yunzaiUser.menu).filter(m => m.systemCode && m.systemCode === this.config.systemCode);
76
- const currentMenu = yunzaiMenus.pop();
77
- if (currentMenu) {
78
- this.settingService.setApp({ name: currentMenu.text, description: currentMenu.intro });
79
- this.settingService.setUser({
80
- name: yunzaiUser.realname,
81
- avatar: `${this.config.baseUrl}/filecenter/file/${yunzaiUser.avatarId}` || '',
82
- email: yunzaiUser.email
83
- });
84
- this.titleService.default = currentMenu && currentMenu.text ? currentMenu.text : 'default application name';
85
- this.titleService.setTitle(currentMenu && currentMenu.text ? currentMenu.text : 'no title');
86
- const abilities = [];
87
- generateAbility([currentMenu], abilities, '');
88
- this.aclService.attachRole(yunzaiUser?.roles
89
- .map((role) => {
90
- return role.roleValue;
91
- })
92
- .filter((a) => !!a) || []);
93
- this.aclService.attachAbility(abilities);
94
- this.menuService.add([currentMenu]);
95
- setCurrent({
96
- name: currentMenu.text,
97
- intro: currentMenu.intro || '',
98
- icon: currentMenu.appIconUrl || './assets/tmp/img/avatar.jpg'
99
- });
100
- const attributes = currentMenu.attribute;
101
- if (attributes) {
102
- const attr = JSON.parse(attributes);
103
- if (attr && attr.defaultRoute) {
104
- setDefaultRoute(attr.defaultRoute);
105
- }
106
- else {
107
- setDefaultRoute('/displayIndex');
108
- }
109
- }
110
- else {
111
- setDefaultRoute('/displayIndex');
112
- }
113
- }
114
- return of(void 0);
115
- }), catchError((error) => {
116
- console.error('Error occurred:', error);
117
- return of(void 0);
118
- }));
119
- }
120
- token(param) {
121
- const auto = this.configService.get('auth')?.auto;
122
- const force = param?.force || undefined;
123
- if (this.config.loginForm) {
124
- if (this.tokenService.get()?.access_token || force || auto) {
125
- return this.httpClient.post(`/auth/oauth/token?_allow_anonymous=true`, this.config.loginForm).pipe(map((response) => {
126
- return response;
127
- }));
128
- }
129
- return of(false);
130
- }
131
- else {
132
- const uri = encodeURIComponent(this.win.location.href);
133
- return this.httpClient
134
- .get(`/cas-proxy/app/validate_full?callback=${uri}&_allow_anonymous=true&timestamp=${new Date().getTime()}`)
135
- .pipe(map((response) => {
136
- switch (response.errcode) {
137
- case 2000:
138
- return response.data;
139
- case 2001:
140
- if (!force && !auto) {
141
- // 自动认证为false情况下会出现: 后台已经下线,但是用户进入网页存储了上次的cookie,Token,所以网页还是登录状态
142
- // 在这里如果2001时自动清理客户端过时的token以保证页面显示登录状态正常
143
- localStorage.clear();
144
- this.tokenService.clear();
145
- return false;
146
- }
147
- this.win.location.href = response.msg;
148
- throw Error("Cookie Error: Can't find Cas Cookie,So jump to login!");
149
- default:
150
- if (response.data) {
151
- console.error(response.data);
152
- throw Error(response.data);
153
- }
154
- else if (response.msg) {
155
- console.error(response.msg);
156
- throw Error(response.msg);
157
- }
158
- else {
159
- console.error('cas unknown error');
160
- throw Error('Unknown Error: Cas auth exception!');
161
- }
162
- }
163
- }));
164
- }
165
- }
166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: YunzaiStartupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
167
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: YunzaiStartupService }); }
168
- }
169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: YunzaiStartupService, decorators: [{
170
- type: Injectable
171
- }] });
172
- export function mapYzSideToYelonMenu(menus) {
173
- menus.forEach((menu) => {
174
- if (menu.children && menu.hideChildren) {
175
- menu.children.forEach((c) => (c.hide = true));
176
- }
177
- menu.badgeDot = menu.badge_dot || null;
178
- menu.badgeStatus = menu.badge_status || null;
179
- menu.shortcutRoot = menu.shortcut_root || null;
180
- menu.reuse = true;
181
- if (menu.children) {
182
- mapYzSideToYelonMenu(menu.children);
183
- }
184
- });
185
- }
186
- export function generateAbility(menus, abilities, prefix) {
187
- menus.forEach(menu => {
188
- if (menu.link) {
189
- prefix += menu.link;
190
- }
191
- else {
192
- prefix += '';
193
- }
194
- if (menu.menuAuths) {
195
- menu.menuAuths.forEach((a) => {
196
- abilities.push(`${prefix}:${a}`);
197
- abilities.push(a);
198
- });
199
- }
200
- if (menu.children) {
201
- generateAbility(menu.children, abilities, prefix);
202
- }
203
- });
204
- }
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnR1cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL3NyYy9zdGFydHVwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFFTCxXQUFXLEVBQ1gsZUFBZSxFQUNmLFlBQVksRUFDWixpQkFBaUIsRUFFbEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNMLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sbUJBQW1CLEVBR3BCLE1BQU0sYUFBYSxDQUFDOztBQU9yQixNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU87UUFDTCxvQkFBb0I7UUFDcEI7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxjQUFvQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQ2pGLElBQUksRUFBRSxDQUFDLG9CQUFvQixDQUFDO1lBQzVCLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUdELE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFbUIsV0FBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQ3JELGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsaUJBQVksR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4QyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pDLFNBQUksR0FBRyxNQUFNLENBQXdCLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsUUFBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0tBd0o5RDtJQXRKQyxJQUFJLENBQUMsS0FBaUI7UUFDcEIsSUFBSSxXQUFXLEdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQztRQUM5RixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFDakQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLHFCQUFxQixFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLDBCQUEwQixFQUFFLENBQUM7UUFDbEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLDJCQUEyQixFQUFFLENBQUM7UUFDeEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFFOUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDM0IsUUFBUSxDQUFDLENBQUMsS0FBZ0IsRUFBRSxFQUFFO1lBQzVCLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDL0MsR0FBRyxDQUFDLENBQUMsUUFBbUIsRUFBRSxFQUFFO29CQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUN0QixDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDN0IsY0FBYyxFQUFFLGVBQWU7Z0JBQy9CLG1CQUFtQixFQUFFLEdBQUcsS0FBSyxDQUFDLFVBQVUsbUJBQW1CO2dCQUMzRCxnQkFBZ0IsRUFBRSxRQUFRO2FBQzNCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLE9BQU8sYUFBYSxDQUFDO2dCQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO2dCQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQzthQUNqRCxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQVksRUFBRSxFQUFFO2dCQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QixTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixPQUFPLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxDQUFDLFFBQW1CLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFHLENBQUM7WUFDOUIsTUFBTSxXQUFXLEdBQWlCLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUNoRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FDN0QsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDdkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7b0JBQzFCLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUTtvQkFDekIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLG9CQUFvQixVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRTtvQkFDN0UsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO2dCQUM1RyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzVGLE1BQU0sU0FBUyxHQUFhLEVBQUUsQ0FBQztnQkFDL0IsZUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FDeEIsVUFBVSxFQUFFLEtBQUs7cUJBQ2QsR0FBRyxDQUFDLENBQUMsSUFBZSxFQUFFLEVBQUU7b0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDO3FCQUNELE1BQU0sQ0FBQyxDQUFDLENBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDdkMsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDNUMsVUFBVSxDQUFDO29CQUNULElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtvQkFDdEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDOUIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksNkJBQTZCO2lCQUM5RCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztnQkFDekMsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixNQUFNLElBQUksR0FBd0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDekQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUM5QixlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNuQyxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFnQixFQUFFLEVBQUU7WUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQWlCO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFlBQVksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMseUNBQXlDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQ2hHLEdBQUcsQ0FBQyxDQUFDLFFBQW1CLEVBQUUsRUFBRTtvQkFDMUIsT0FBTyxRQUFRLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQyxVQUFVO2lCQUNuQixHQUFHLENBQUMseUNBQXlDLEdBQUcsb0NBQW9DLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztpQkFDM0csSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQW1CLEVBQUUsRUFBRTtnQkFDMUIsUUFBUSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3pCLEtBQUssSUFBSTt3QkFDUCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQ3ZCLEtBQUssSUFBSTt3QkFDUCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7NEJBQ3BCLGlFQUFpRTs0QkFDakUseUNBQXlDOzRCQUN6QyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQzFCLE9BQU8sS0FBSyxDQUFDO3dCQUNmLENBQUM7d0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7d0JBQ3RDLE1BQU0sS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7b0JBQ3ZFO3dCQUNFLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDN0IsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM3QixDQUFDOzZCQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDNUIsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QixDQUFDOzZCQUFNLENBQUM7NEJBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDOzRCQUNuQyxNQUFNLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO3dCQUNwRCxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7K0dBaktVLG9CQUFvQjttSEFBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVOztBQXFLWCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBbUI7SUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFO1FBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBbUIsRUFBRSxTQUFtQixFQUFFLE1BQWM7SUFDdEYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFO2dCQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBpbmplY3QsIEluamVjdGFibGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgbWFwLCBtZXJnZU1hcCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQUNMU2VydmljZSB9IGZyb20gJ0B5ZWxvbi9hY2wnO1xuaW1wb3J0IHsgSVRva2VuTW9kZWwsIFlBX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICdAeWVsb24vYXV0aCc7XG5pbXBvcnQgeyBtZXJnZUJpc0NvbmZpZyB9IGZyb20gJ0B5ZWxvbi9iaXMvY29uZmlnJztcbmltcG9ydCB7XG4gIE1lbnUsXG4gIE1lbnVTZXJ2aWNlLFxuICBTZXR0aW5nc1NlcnZpY2UsXG4gIFRpdGxlU2VydmljZSxcbiAgWVVOWkFJX0kxOE5fVE9LRU4sXG4gIFl1bnphaUh0dHBJMThOU2VydmljZVxufSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHtcbiAgZGVlcENvcHksXG4gIHVzZUxvY2FsU3RvcmFnZUN1cnJlbnQsXG4gIHVzZUxvY2FsU3RvcmFnZURlZmF1bHRSb3V0ZSxcbiAgdXNlTG9jYWxTdG9yYWdlSGVhZGVyLFxuICB1c2VMb2NhbFN0b3JhZ2VQcm9qZWN0SW5mbyxcbiAgdXNlTG9jYWxTdG9yYWdlVGVuYW50LFxuICB1c2VMb2NhbFN0b3JhZ2VVc2VyLFxuICBXSU5ET1csXG4gIFl1bnphaUNvbmZpZ1NlcnZpY2UsXG4gIFl1bnphaU1lbnUsXG4gIFl1bnphaU1lbnVBdHRyaWJ1dGVcbn0gZnJvbSAnQHllbG9uL3V0aWwnO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2FkUGFyYW0ge1xuICBmb3JjZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlWXVuemFpU3RhcnR1cCgpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICBZdW56YWlTdGFydHVwU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoc3RhcnR1cFNlcnZpY2U6IFl1bnphaVN0YXJ0dXBTZXJ2aWNlKSA9PiAoKSA9PiBzdGFydHVwU2VydmljZS5sb2FkKCksXG4gICAgICBkZXBzOiBbWXVuemFpU3RhcnR1cFNlcnZpY2VdLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF07XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBZdW56YWlTdGFydHVwU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gbWVyZ2VCaXNDb25maWcoaW5qZWN0KFl1bnphaUNvbmZpZ1NlcnZpY2UpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZW51U2VydmljZSA9IGluamVjdChNZW51U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNsU2VydmljZSA9IGluamVjdChBQ0xTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZVNlcnZpY2UgPSBpbmplY3QoVGl0bGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0b2tlblNlcnZpY2UgPSBpbmplY3QoWUFfU0VSVklDRV9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nU2VydmljZSA9IGluamVjdChTZXR0aW5nc1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGkxOG4gPSBpbmplY3Q8WXVuemFpSHR0cEkxOE5TZXJ2aWNlPihZVU5aQUlfSTE4Tl9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2luID0gaW5qZWN0KFdJTkRPVyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZSA9IGluamVjdChZdW56YWlDb25maWdTZXJ2aWNlKTtcblxuICBsb2FkKHBhcmFtPzogTG9hZFBhcmFtKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbGV0IGRlZmF1bHRMYW5nOiBzdHJpbmcgPSB0aGlzLnNldHRpbmdTZXJ2aWNlLmxheW91dC5sYW5nIHx8IHRoaXMuaTE4bi5kZWZhdWx0TGFuZyB8fCAnemgtQ04nO1xuICAgIGNvbnN0IFtzZXRUZW5hbnRdID0gdXNlTG9jYWxTdG9yYWdlVGVuYW50KCk7XG4gICAgY29uc3QgW3NldFVzZXIsIGdldFVzZXJdID0gdXNlTG9jYWxTdG9yYWdlVXNlcigpO1xuICAgIGNvbnN0IFtzZXRIZWFkZXJdID0gdXNlTG9jYWxTdG9yYWdlSGVhZGVyKCk7XG4gICAgY29uc3QgW3NldFByb2plY3RdID0gdXNlTG9jYWxTdG9yYWdlUHJvamVjdEluZm8oKTtcbiAgICBjb25zdCBbc2V0RGVmYXVsdFJvdXRlXSA9IHVzZUxvY2FsU3RvcmFnZURlZmF1bHRSb3V0ZSgpO1xuICAgIGNvbnN0IFtzZXRDdXJyZW50XSA9IHVzZUxvY2FsU3RvcmFnZUN1cnJlbnQoKTtcblxuICAgIHJldHVybiB0aGlzLnRva2VuKHBhcmFtKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKHRva2VuOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgaWYgKHRva2VuID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmkxOG4ubG9hZExvY2FsZURhdGEoZGVmYXVsdExhbmcpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGxhbmdEYXRhOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pMThuLnVzZShkZWZhdWx0TGFuZywgbGFuZ0RhdGEpO1xuICAgICAgICAgICAgICB0aGlzLnNldHRpbmdTZXJ2aWNlLnNldExheW91dCgnbGFuZycsIGRlZmF1bHRMYW5nKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gRU1QVFkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2Uuc2V0KCdhdXRoJywge1xuICAgICAgICAgIHRva2VuX3NlbmRfa2V5OiAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgdG9rZW5fc2VuZF90ZW1wbGF0ZTogYCR7dG9rZW4udG9rZW5fdHlwZX0gXFwke2FjY2Vzc190b2tlbn1gLFxuICAgICAgICAgIHRva2VuX3NlbmRfcGxhY2U6ICdoZWFkZXInXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodG9rZW4pO1xuICAgICAgICByZXR1cm4gb2Yodm9pZCAwKTtcbiAgICAgIH0pLFxuICAgICAgbWVyZ2VNYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2F1dGgvdXNlcmApLFxuICAgICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoYC9hdXRoL2FsbGhlYWRlci92MmApLFxuICAgICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoYC9hcHAtbWFuYWdlci9wcm9qZWN0L2luZm9gKVxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW3VzZXIsIGhlYWRlciwgcHJvamVjdF06IE56U2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgc2V0VXNlcih1c2VyLnByaW5jaXBhbCk7XG4gICAgICAgICAgICBzZXRUZW5hbnQodXNlci50ZW5hbnRJZCk7XG4gICAgICAgICAgICBzZXRIZWFkZXIoaGVhZGVyLmRhdGEpO1xuICAgICAgICAgICAgc2V0UHJvamVjdChwcm9qZWN0LmRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmkxOG4ubG9hZExhbmdEYXRhKGRlZmF1bHRMYW5nKS5waXBlKFxuICAgICAgICAgIG1hcCgobGFuZ0RhdGE6IE56U2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pMThuLnVzZShkZWZhdWx0TGFuZywgbGFuZ0RhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHl1bnphaVVzZXIgPSBnZXRVc2VyKCkhO1xuICAgICAgICBjb25zdCB5dW56YWlNZW51czogWXVuemFpTWVudVtdID0gZGVlcENvcHkoeXVuemFpVXNlci5tZW51KS5maWx0ZXIoXG4gICAgICAgICAgbSA9PiBtLnN5c3RlbUNvZGUgJiYgbS5zeXN0ZW1Db2RlID09PSB0aGlzLmNvbmZpZy5zeXN0ZW1Db2RlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNZW51ID0geXVuemFpTWVudXMucG9wKCk7XG4gICAgICAgIGlmIChjdXJyZW50TWVudSkge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ1NlcnZpY2Uuc2V0QXBwKHsgbmFtZTogY3VycmVudE1lbnUudGV4dCwgZGVzY3JpcHRpb246IGN1cnJlbnRNZW51LmludHJvIH0pO1xuICAgICAgICAgIHRoaXMuc2V0dGluZ1NlcnZpY2Uuc2V0VXNlcih7XG4gICAgICAgICAgICBuYW1lOiB5dW56YWlVc2VyLnJlYWxuYW1lLFxuICAgICAgICAgICAgYXZhdGFyOiBgJHt0aGlzLmNvbmZpZy5iYXNlVXJsfS9maWxlY2VudGVyL2ZpbGUvJHt5dW56YWlVc2VyLmF2YXRhcklkfWAgfHwgJycsXG4gICAgICAgICAgICBlbWFpbDogeXVuemFpVXNlci5lbWFpbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLmRlZmF1bHQgPSBjdXJyZW50TWVudSAmJiBjdXJyZW50TWVudS50ZXh0ID8gY3VycmVudE1lbnUudGV4dCA6ICdkZWZhdWx0IGFwcGxpY2F0aW9uIG5hbWUnO1xuICAgICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKGN1cnJlbnRNZW51ICYmIGN1cnJlbnRNZW51LnRleHQgPyBjdXJyZW50TWVudS50ZXh0IDogJ25vIHRpdGxlJyk7XG4gICAgICAgICAgY29uc3QgYWJpbGl0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGdlbmVyYXRlQWJpbGl0eShbY3VycmVudE1lbnVdLCBhYmlsaXRpZXMsICcnKTtcbiAgICAgICAgICB0aGlzLmFjbFNlcnZpY2UuYXR0YWNoUm9sZShcbiAgICAgICAgICAgIHl1bnphaVVzZXI/LnJvbGVzXG4gICAgICAgICAgICAgIC5tYXAoKHJvbGU6IE56U2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByb2xlLnJvbGVWYWx1ZTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoYTogTnpTYWZlQW55KSA9PiAhIWEpIHx8IFtdXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmFjbFNlcnZpY2UuYXR0YWNoQWJpbGl0eShhYmlsaXRpZXMpO1xuICAgICAgICAgIHRoaXMubWVudVNlcnZpY2UuYWRkKFtjdXJyZW50TWVudSBhcyBNZW51XSk7XG4gICAgICAgICAgc2V0Q3VycmVudCh7XG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50TWVudS50ZXh0LFxuICAgICAgICAgICAgaW50cm86IGN1cnJlbnRNZW51LmludHJvIHx8ICcnLFxuICAgICAgICAgICAgaWNvbjogY3VycmVudE1lbnUuYXBwSWNvblVybCB8fCAnLi9hc3NldHMvdG1wL2ltZy9hdmF0YXIuanBnJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjdXJyZW50TWVudS5hdHRyaWJ1dGU7XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHI6IFl1bnphaU1lbnVBdHRyaWJ1dGUgPSBKU09OLnBhcnNlKGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgaWYgKGF0dHIgJiYgYXR0ci5kZWZhdWx0Um91dGUpIHtcbiAgICAgICAgICAgICAgc2V0RGVmYXVsdFJvdXRlKGF0dHIuZGVmYXVsdFJvdXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldERlZmF1bHRSb3V0ZSgnL2Rpc3BsYXlJbmRleCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXREZWZhdWx0Um91dGUoJy9kaXNwbGF5SW5kZXgnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKHZvaWQgMCk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJyZWQ6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gb2Yodm9pZCAwKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHRva2VuKHBhcmFtPzogTG9hZFBhcmFtKTogT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbCB8IGJvb2xlYW4+IHtcbiAgICBjb25zdCBhdXRvID0gdGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXV0aCcpPy5hdXRvO1xuICAgIGNvbnN0IGZvcmNlID0gcGFyYW0/LmZvcmNlIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5jb25maWcubG9naW5Gb3JtKSB7XG4gICAgICBpZiAodGhpcy50b2tlblNlcnZpY2UuZ2V0KCk/LmFjY2Vzc190b2tlbiB8fCBmb3JjZSB8fCBhdXRvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChgL2F1dGgvb2F1dGgvdG9rZW4/X2FsbG93X2Fub255bW91cz10cnVlYCwgdGhpcy5jb25maWcubG9naW5Gb3JtKS5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcG9uc2U6IE56U2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1cmkgPSBlbmNvZGVVUklDb21wb25lbnQodGhpcy53aW4ubG9jYXRpb24uaHJlZik7XG4gICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgIC5nZXQoYC9jYXMtcHJveHkvYXBwL3ZhbGlkYXRlX2Z1bGw/Y2FsbGJhY2s9JHt1cml9Jl9hbGxvd19hbm9ueW1vdXM9dHJ1ZSZ0aW1lc3RhbXA9JHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuZXJyY29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDIwMDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgIGNhc2UgMjAwMTpcbiAgICAgICAgICAgICAgICBpZiAoIWZvcmNlICYmICFhdXRvKSB7XG4gICAgICAgICAgICAgICAgICAvLyDoh6rliqjorqTor4HkuLpmYWxzZeaDheWGteS4i+S8muWHuueOsDog5ZCO5Y+w5bey57uP5LiL57q/LOS9huaYr+eUqOaIt+i/m+WFpee9kemhteWtmOWCqOS6huS4iuasoeeahGNvb2tpZSxUb2tlbu+8jOaJgOS7pee9kemhtei/mOaYr+eZu+W9leeKtuaAgVxuICAgICAgICAgICAgICAgICAgLy8g5Zyo6L+Z6YeM5aaC5p6cMjAwMeaXtuiHquWKqOa4heeQhuWuouaIt+err+i/h+aXtueahHRva2Vu5Lul5L+d6K+B6aG16Z2i5pi+56S655m75b2V54q25oCB5q2j5bi4XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMud2luLmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS5tc2c7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDb29raWUgRXJyb3I6IENhbid0IGZpbmQgQ2FzIENvb2tpZSxTbyBqdW1wIHRvIGxvZ2luIVwiKTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UubXNnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlLm1zZyk7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihyZXNwb25zZS5tc2cpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjYXMgdW5rbm93biBlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1Vua25vd24gRXJyb3I6IENhcyBhdXRoIGV4Y2VwdGlvbiEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFl6U2lkZVRvWWVsb25NZW51KG1lbnVzOiBZdW56YWlNZW51W10pOiB2b2lkIHtcbiAgbWVudXMuZm9yRWFjaCgobWVudTogTnpTYWZlQW55KSA9PiB7XG4gICAgaWYgKG1lbnUuY2hpbGRyZW4gJiYgbWVudS5oaWRlQ2hpbGRyZW4pIHtcbiAgICAgIG1lbnUuY2hpbGRyZW4uZm9yRWFjaCgoYzogTnpTYWZlQW55KSA9PiAoYy5oaWRlID0gdHJ1ZSkpO1xuICAgIH1cbiAgICBtZW51LmJhZGdlRG90ID0gbWVudS5iYWRnZV9kb3QgfHwgbnVsbDtcbiAgICBtZW51LmJhZGdlU3RhdHVzID0gbWVudS5iYWRnZV9zdGF0dXMgfHwgbnVsbDtcbiAgICBtZW51LnNob3J0Y3V0Um9vdCA9IG1lbnUuc2hvcnRjdXRfcm9vdCB8fCBudWxsO1xuICAgIG1lbnUucmV1c2UgPSB0cnVlO1xuICAgIGlmIChtZW51LmNoaWxkcmVuKSB7XG4gICAgICBtYXBZelNpZGVUb1llbG9uTWVudShtZW51LmNoaWxkcmVuKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBYmlsaXR5KG1lbnVzOiBZdW56YWlNZW51W10sIGFiaWxpdGllczogc3RyaW5nW10sIHByZWZpeDogc3RyaW5nKTogdm9pZCB7XG4gIG1lbnVzLmZvckVhY2gobWVudSA9PiB7XG4gICAgaWYgKG1lbnUubGluaykge1xuICAgICAgcHJlZml4ICs9IG1lbnUubGluaztcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ICs9ICcnO1xuICAgIH1cbiAgICBpZiAobWVudS5tZW51QXV0aHMpIHtcbiAgICAgIG1lbnUubWVudUF1dGhzLmZvckVhY2goKGE6IHN0cmluZykgPT4ge1xuICAgICAgICBhYmlsaXRpZXMucHVzaChgJHtwcmVmaXh9OiR7YX1gKTtcbiAgICAgICAgYWJpbGl0aWVzLnB1c2goYSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWVudS5jaGlsZHJlbikge1xuICAgICAgZ2VuZXJhdGVBYmlsaXR5KG1lbnUuY2hpbGRyZW4sIGFiaWxpdGllcywgcHJlZml4KTtcbiAgICB9XG4gIH0pO1xufVxuIl19