aril 1.2.36 → 1.2.38

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 (43) hide show
  1. package/boot/config/api/src/api.service.d.ts +2 -1
  2. package/esm2022/boot/config/api/src/api.service.mjs +24 -7
  3. package/esm2022/boot/host/src/bootstrap.mjs +13 -4
  4. package/esm2022/permission/aril-permission.mjs +5 -0
  5. package/esm2022/permission/index.mjs +4 -0
  6. package/esm2022/permission/src/constants.mjs +4 -0
  7. package/esm2022/permission/src/has-permission.directive.mjs +49 -0
  8. package/esm2022/permission/src/permission.service.mjs +57 -0
  9. package/esm2022/provider/src/index.mjs +2 -1
  10. package/esm2022/provider/src/prodiveHost.mjs +3 -2
  11. package/esm2022/provider/src/provideHostPermissions.mjs +43 -0
  12. package/esm2022/theme/layout/app/notifications/notifications-sidebar.component.mjs +146 -49
  13. package/esm2022/theme/layout/service/interfaces/interfaces.mjs +1 -1
  14. package/esm2022/theme/layout/service/notifications.service.mjs +8 -2
  15. package/fesm2022/{aril-app.component-W3wwVSp1.mjs → aril-app.component-BUjucZ0J.mjs} +2 -1
  16. package/fesm2022/{aril-app.component-W3wwVSp1.mjs.map → aril-app.component-BUjucZ0J.mjs.map} +1 -1
  17. package/fesm2022/aril-boot-config-api.mjs +23 -6
  18. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  19. package/fesm2022/aril-boot-host.mjs +12 -3
  20. package/fesm2022/aril-boot-host.mjs.map +1 -1
  21. package/fesm2022/aril-permission.mjs +114 -0
  22. package/fesm2022/aril-permission.mjs.map +1 -0
  23. package/fesm2022/aril-provider.mjs +44 -2
  24. package/fesm2022/aril-provider.mjs.map +1 -1
  25. package/fesm2022/aril-theme-layout.mjs +145 -39
  26. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  27. package/fesm2022/aril.mjs +13 -4
  28. package/fesm2022/aril.mjs.map +1 -1
  29. package/package.json +87 -81
  30. package/permission/index.d.ts +3 -0
  31. package/permission/src/constants.d.ts +1 -0
  32. package/permission/src/has-permission.directive.d.ts +16 -0
  33. package/permission/src/permission.service.d.ts +15 -0
  34. package/provider/src/index.d.ts +1 -0
  35. package/provider/src/provideHostPermissions.d.ts +6 -0
  36. package/theme/layout/app/notifications/notifications-sidebar.component.d.ts +2288 -2267
  37. package/theme/layout/app/notifications/notifications-sidebar.component.html +66 -68
  38. package/theme/layout/app/notifications/notifications-sidebar.component.scss +234 -120
  39. package/theme/layout/app/notifications/notifications-sidebar.component.ts +182 -56
  40. package/theme/layout/service/interfaces/interfaces.d.ts +5 -1
  41. package/theme/layout/service/interfaces/interfaces.ts +6 -1
  42. package/theme/layout/service/notifications.service.d.ts +1 -0
  43. package/theme/layout/service/notifications.service.ts +5 -0
@@ -1,9 +1,10 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import { KeycloakService } from 'keycloak-angular';
3
3
  import { Apps, MicroAppService } from 'aril/boot/config/apps';
4
+ import { PermissionService } from 'aril/permission';
4
5
  import { ApiConfigsFactory } from './interfaces';
5
6
  export declare const API_CONFIGS: ApiConfigsFactory;
6
- export declare const loadApiConfigs: (httpClient: HttpClient, keycloak: KeycloakService, appName: string, microAppService?: MicroAppService) => () => Promise<void>;
7
+ export declare const loadApiConfigs: (httpClient: HttpClient, keycloak: KeycloakService, appName: string, microAppService: MicroAppService, permissionService: PermissionService) => () => Promise<void>;
7
8
  /**
8
9
  * only works when isHostMode is true
9
10
  * micro-app access its own api.json file when opened in host
@@ -3,9 +3,10 @@ import { KeycloakEventType } from 'keycloak-angular';
3
3
  import { EMPTY, finalize, firstValueFrom, from, fromEvent, switchMap, takeUntil, tap } from 'rxjs';
4
4
  import { bridge } from 'aril/boot/bridge';
5
5
  import { Apps } from 'aril/boot/config/apps';
6
+ import { ELEMENT_AUTHZ_AUDIENCE } from 'aril/permission';
6
7
  import { ApiConfigsFactory } from './interfaces';
7
8
  export const API_CONFIGS = new ApiConfigsFactory();
8
- export const loadApiConfigs = (httpClient, keycloak, appName, microAppService) => () => new Promise((resolve) => httpClient
9
+ export const loadApiConfigs = (httpClient, keycloak, appName, microAppService, permissionService) => () => new Promise((resolve) => httpClient
9
10
  .get(isDevMode() ? './assets/local-configs/api.local.json' : './api.json')
10
11
  .pipe(switchMap((configs) => {
11
12
  bridge.hostMenuItems.set([]);
@@ -16,15 +17,31 @@ export const loadApiConfigs = (httpClient, keycloak, appName, microAppService) =
16
17
  loadUserProfileAtStartUp: true,
17
18
  initOptions: { onLoad: 'login-required', checkLoginIframe: false },
18
19
  bearerExcludedUrls: ['/assets']
19
- })).pipe(finalize(() => addEventListener('module-ready', (event) => {
20
- const app = event.detail;
21
- dispatchEvent(new CustomEvent(`${app}:init-keycloak`, { detail: keycloak }));
20
+ })).pipe(finalize(() => {
21
+ const permissionsReady = permissionService
22
+ .fetchFromKeycloak(keycloak, ELEMENT_AUTHZ_AUDIENCE)
23
+ .then((keys) => permissionService.hydrate(keys));
24
+ const readyApps = new Set();
25
+ addEventListener('module-ready', (event) => {
26
+ const app = event.detail;
27
+ readyApps.add(app);
28
+ dispatchEvent(new CustomEvent(`${app}:init-keycloak`, { detail: keycloak }));
29
+ permissionsReady.then(() => dispatchEvent(new CustomEvent(`${app}:init-permissions`, { detail: permissionService.keys() })));
30
+ keycloak.keycloakEvents$.pipe(takeUntil(fromEvent(window, 'beforeunload'))).subscribe((e) => {
31
+ if (e.type === KeycloakEventType.OnAuthRefreshSuccess) {
32
+ dispatchEvent(new CustomEvent(`${app}:update-keycloak`, { detail: keycloak }));
33
+ }
34
+ });
35
+ });
22
36
  keycloak.keycloakEvents$.pipe(takeUntil(fromEvent(window, 'beforeunload'))).subscribe((e) => {
23
37
  if (e.type === KeycloakEventType.OnAuthRefreshSuccess) {
24
- dispatchEvent(new CustomEvent(`${app}:update-keycloak`, { detail: keycloak }));
38
+ permissionService.fetchFromKeycloak(keycloak, ELEMENT_AUTHZ_AUDIENCE).then((keys) => {
39
+ permissionService.hydrate(keys);
40
+ readyApps.forEach((app) => dispatchEvent(new CustomEvent(`${app}:update-permissions`, { detail: permissionService.keys() })));
41
+ });
25
42
  }
26
43
  });
27
- })));
44
+ }));
28
45
  }), switchMap(() => microAppService?.init(httpClient, API_CONFIGS.api).pipe(tap((result) => {
29
46
  bridge.hostMenuItems.set(result.menuItems);
30
47
  bridge.pluginJson.set(result.plugins);
@@ -61,4 +78,4 @@ export const loadInitData = (httpClient) => () => new Promise((resolve, _reject)
61
78
  }
62
79
  });
63
80
  });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL2Jvb3QvY29uZmlnL2FwaS9zcmMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbkcsT0FBTyxFQUFlLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUMxQixDQUFDLFVBQXNCLEVBQUUsUUFBeUIsRUFBRSxPQUFlLEVBQUUsZUFBaUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQy9HLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDN0IsVUFBVTtLQUNSLEdBQUcsQ0FBb0IsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVDQUF1QyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7S0FDNUYsSUFBSSxDQUNKLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQ3JCLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUs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QUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsK0JBQStCLENBQUM7SUFDbkUsVUFBVSxDQUFDLEdBQUcsQ0FBZ0IsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2pELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2QsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsT0FBTyxFQUFFLENBQUM7UUFDWCxDQUFDO1FBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRSxPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUM7S0FDRCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgS2V5Y2xvYWtFdmVudFR5cGUsIEtleWNsb2FrU2VydmljZSB9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBFTVBUWSwgZmluYWxpemUsIGZpcnN0VmFsdWVGcm9tLCBmcm9tLCBmcm9tRXZlbnQsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFJvdXRlQ29uZmlnLCBicmlkZ2UgfSBmcm9tICdhcmlsL2Jvb3QvYnJpZGdlJztcclxuaW1wb3J0IHsgQXBwcywgTWljcm9BcHBTZXJ2aWNlIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuXHJcbmltcG9ydCB7IEFwaUNvbmZpZ3NGYWN0b3J5IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuXHJcbmV4cG9ydCBjb25zdCBBUElfQ09ORklHUyA9IG5ldyBBcGlDb25maWdzRmFjdG9yeSgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGxvYWRBcGlDb25maWdzID1cclxuXHQoaHR0cENsaWVudDogSHR0cENsaWVudCwga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSwgYXBwTmFtZTogc3RyaW5nLCBtaWNyb0FwcFNlcnZpY2U/OiBNaWNyb0FwcFNlcnZpY2UpID0+ICgpID0+XHJcblx0XHRuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT5cclxuXHRcdFx0aHR0cENsaWVudFxyXG5cdFx0XHRcdC5nZXQ8QXBpQ29uZmlnc0ZhY3Rvcnk+KGlzRGV2TW9kZSgpID8gJy4vYXNzZXRzL2xvY2FsLWNvbmZpZ3MvYXBpLmxvY2FsLmpzb24nIDogJy4vYXBpLmpzb24nKVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0c3dpdGNoTWFwKChjb25maWdzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGJyaWRnZS5ob3N0TWVudUl0ZW1zLnNldChbXSk7XHJcblx0XHRcdFx0XHRcdGJyaWRnZS5wbHVnaW5Kc29uLnNldCh7fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKEFQSV9DT05GSUdTLCB7IC4uLmNvbmZpZ3MgfSk7XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZnJvbShcclxuXHRcdFx0XHRcdFx0XHRrZXljbG9hay5pbml0KHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpZzogQVBJX0NPTkZJR1Mua2V5Y2xvYWssXHJcblx0XHRcdFx0XHRcdFx0XHRsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA6IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0XHRpbml0T3B0aW9uczogeyBvbkxvYWQ6ICdsb2dpbi1yZXF1aXJlZCcsIGNoZWNrTG9naW5JZnJhbWU6IGZhbHNlIH0sXHJcblx0XHRcdFx0XHRcdFx0XHRiZWFyZXJFeGNsdWRlZFVybHM6IFsnL2Fzc2V0cyddXHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0KS5waXBlKFxyXG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplKCgpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRhZGRFdmVudExpc3RlbmVyKCdtb2R1bGUtcmVhZHknLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYXBwID0gKGV2ZW50IGFzIEN1c3RvbUV2ZW50KS5kZXRhaWw7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGAke2FwcH06aW5pdC1rZXljbG9ha2AsIHsgZGV0YWlsOiBrZXljbG9hayB9KSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRrZXljbG9hay5rZXljbG9ha0V2ZW50cyQucGlwZSh0YWtlVW50aWwoZnJvbUV2ZW50KHdpbmRvdywgJ2JlZm9yZXVubG9hZCcpKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUudHlwZSA9PT0gS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaFN1Y2Nlc3MpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGAke2FwcH06dXBkYXRlLWtleWNsb2FrYCwgeyBkZXRhaWw6IGtleWNsb2FrIH0pKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9KSxcclxuXHRcdFx0XHRcdHN3aXRjaE1hcChcclxuXHRcdFx0XHRcdFx0KCkgPT5cclxuXHRcdFx0XHRcdFx0XHRtaWNyb0FwcFNlcnZpY2U/LmluaXQoaHR0cENsaWVudCwgQVBJX0NPTkZJR1MuYXBpKS5waXBlKFxyXG5cdFx0XHRcdFx0XHRcdFx0dGFwKChyZXN1bHQpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJpZGdlLmhvc3RNZW51SXRlbXMuc2V0KHJlc3VsdC5tZW51SXRlbXMpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmlkZ2UucGx1Z2luSnNvbi5zZXQocmVzdWx0LnBsdWdpbnMpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQpID8/IEVNUFRZXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKVxyXG5cdFx0XHRcdC5hZGQocmVzb2x2ZSlcclxuXHRcdCk7XHJcblxyXG4vKipcclxuICogb25seSB3b3JrcyB3aGVuIGlzSG9zdE1vZGUgaXMgdHJ1ZVxyXG4gKiBtaWNyby1hcHAgYWNjZXNzIGl0cyBvd24gYXBpLmpzb24gZmlsZSB3aGVuIG9wZW5lZCBpbiBob3N0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXBpQ29uZmlnT25NRkVNb2RlKFxyXG5cdGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcblx0a2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSxcclxuXHRhcHBOYW1lOiBBcHBzXHJcbik6ICgpID0+IFByb21pc2U8YW55PiB7XHJcblx0cmV0dXJuICgpID0+IHtcclxuXHRcdGNvbnN0IG9ic2VydmFibGUkID0gaHR0cENsaWVudFxyXG5cdFx0XHQuZ2V0PEFwaUNvbmZpZ3NGYWN0b3J5Pihpc0Rldk1vZGUoKSA/ICcuL2Fzc2V0cy9sb2NhbC1jb25maWdzL2FwaS5sb2NhbC5qc29uJyA6ICcuL2FwaS5qc29uJylcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKChjb25maWdzKSA9PiB7XHJcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKEFQSV9DT05GSUdTLCB7IC4uLmNvbmZpZ3MgfSk7XHJcblx0XHRcdFx0XHRpZiAoYXBwTmFtZSAhPT0gQXBwcy5USE9SICYmIGFwcE5hbWUgIT09IEFwcHMuWUVBUCkge1xyXG5cdFx0XHRcdFx0XHRBUElfQ09ORklHUy5hcGkgPSBBUElfQ09ORklHUy5nZXRFeHRlcm5hbEFwcEVuZHBvaW50KGFwcE5hbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcclxuXHR9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbG9hZEluaXREYXRhID0gKGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpID0+ICgpID0+XHJcblx0bmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIF9yZWplY3QpID0+IHtcclxuXHRcdGNvbnN0IGVuZHBvaW50ID0gQVBJX0NPTkZJR1MuYXBpICsgJy91aS1yb3V0ZS1jb250ZW50LWNvbmZpZ3MvYWxsJztcclxuXHRcdGh0dHBDbGllbnQuZ2V0PFJvdXRlQ29uZmlnW10+KGVuZHBvaW50KS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdGJyaWRnZS5yb3V0ZUNvbmZpZ3Muc2V0KGRhdGEpO1xyXG5cdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3I6IChlcnIpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBpbml0IGRhdGEgZnJvbSAke2VuZHBvaW50fTpgLCBlcnIpO1xyXG5cdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSk7XHJcbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL2Jvb3QvY29uZmlnL2FwaS9zcmMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbkcsT0FBTyxFQUFlLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLGlCQUFpQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDMUIsQ0FDQyxVQUFzQixFQUN0QixRQUF5QixFQUN6QixPQUFlLEVBQ2YsZUFBZ0MsRUFDaEMsaUJBQW9DLEVBQ25DLEVBQUUsQ0FDSixHQUFHLEVBQUUsQ0FDSixJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQzdCLFVBQVU7S0FDUixHQUFHLENBQW9CLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0tBQzVGLElBQUksQ0FDSixTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtJQUNyQixNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcs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QUMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFzQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FDNUQsSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDdEMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRywrQkFBK0IsQ0FBQztJQUNuRSxVQUFVLENBQUMsR0FBRyxDQUFnQixRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDakQsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sRUFBRSxDQUFDO1FBQ1gsQ0FBQztLQUNELENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBLZXljbG9ha0V2ZW50VHlwZSwgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XHJcbmltcG9ydCB7IEVNUFRZLCBmaW5hbGl6ZSwgZmlyc3RWYWx1ZUZyb20sIGZyb20sIGZyb21FdmVudCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgUm91dGVDb25maWcsIGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBBcHBzLCBNaWNyb0FwcFNlcnZpY2UgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwcHMnO1xyXG5pbXBvcnQgeyBFTEVNRU5UX0FVVEhaX0FVRElFTkNFLCBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ2FyaWwvcGVybWlzc2lvbic7XHJcblxyXG5pbXBvcnQgeyBBcGlDb25maWdzRmFjdG9yeSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY29uc3QgQVBJX0NPTkZJR1MgPSBuZXcgQXBpQ29uZmlnc0ZhY3RvcnkoKTtcclxuXHJcbmV4cG9ydCBjb25zdCBsb2FkQXBpQ29uZmlncyA9XHJcblx0KFxyXG5cdFx0aHR0cENsaWVudDogSHR0cENsaWVudCxcclxuXHRcdGtleWNsb2FrOiBLZXljbG9ha1NlcnZpY2UsXHJcblx0XHRhcHBOYW1lOiBzdHJpbmcsXHJcblx0XHRtaWNyb0FwcFNlcnZpY2U6IE1pY3JvQXBwU2VydmljZSxcclxuXHRcdHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZVxyXG5cdCkgPT5cclxuXHQoKSA9PlxyXG5cdFx0bmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+XHJcblx0XHRcdGh0dHBDbGllbnRcclxuXHRcdFx0XHQuZ2V0PEFwaUNvbmZpZ3NGYWN0b3J5Pihpc0Rldk1vZGUoKSA/ICcuL2Fzc2V0cy9sb2NhbC1jb25maWdzL2FwaS5sb2NhbC5qc29uJyA6ICcuL2FwaS5qc29uJylcclxuXHRcdFx0XHQucGlwZShcclxuXHRcdFx0XHRcdHN3aXRjaE1hcCgoY29uZmlncykgPT4ge1xyXG5cdFx0XHRcdFx0XHRicmlkZ2UuaG9zdE1lbnVJdGVtcy5zZXQoW10pO1xyXG5cdFx0XHRcdFx0XHRicmlkZ2UucGx1Z2luSnNvbi5zZXQoe30pO1xyXG5cclxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihBUElfQ09ORklHUywgeyAuLi5jb25maWdzIH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZyb20oXHJcblx0XHRcdFx0XHRcdFx0a2V5Y2xvYWsuaW5pdCh7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25maWc6IEFQSV9DT05GSUdTLmtleWNsb2FrLFxyXG5cdFx0XHRcdFx0XHRcdFx0bG9hZFVzZXJQcm9maWxlQXRTdGFydFVwOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0aW5pdE9wdGlvbnM6IHsgb25Mb2FkOiAnbG9naW4tcmVxdWlyZWQnLCBjaGVja0xvZ2luSWZyYW1lOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0XHRcdFx0YmVhcmVyRXhjbHVkZWRVcmxzOiBbJy9hc3NldHMnXVxyXG5cdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdCkucGlwZShcclxuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwZXJtaXNzaW9uc1JlYWR5ID0gcGVybWlzc2lvblNlcnZpY2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0LmZldGNoRnJvbUtleWNsb2FrKGtleWNsb2FrLCBFTEVNRU5UX0FVVEhaX0FVRElFTkNFKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQudGhlbigoa2V5cykgPT4gcGVybWlzc2lvblNlcnZpY2UuaHlkcmF0ZShrZXlzKSk7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCByZWFkeUFwcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRhZGRFdmVudExpc3RlbmVyKCdtb2R1bGUtcmVhZHknLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYXBwID0gKGV2ZW50IGFzIEN1c3RvbUV2ZW50KS5kZXRhaWw7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlYWR5QXBwcy5hZGQoYXBwKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoYCR7YXBwfTppbml0LWtleWNsb2FrYCwgeyBkZXRhaWw6IGtleWNsb2FrIH0pKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGVybWlzc2lvbnNSZWFkeS50aGVuKCgpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoYCR7YXBwfTppbml0LXBlcm1pc3Npb25zYCwgeyBkZXRhaWw6IHBlcm1pc3Npb25TZXJ2aWNlLmtleXMoKSB9KSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGtleWNsb2FrLmtleWNsb2FrRXZlbnRzJC5waXBlKHRha2VVbnRpbChmcm9tRXZlbnQod2luZG93LCAnYmVmb3JldW5sb2FkJykpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZS50eXBlID09PSBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhSZWZyZXNoU3VjY2Vzcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoYCR7YXBwfTp1cGRhdGUta2V5Y2xvYWtgLCB7IGRldGFpbDoga2V5Y2xvYWsgfSkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRrZXljbG9hay5rZXljbG9ha0V2ZW50cyQucGlwZSh0YWtlVW50aWwoZnJvbUV2ZW50KHdpbmRvdywgJ2JlZm9yZXVubG9hZCcpKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlLnR5cGUgPT09IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFJlZnJlc2hTdWNjZXNzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGVybWlzc2lvblNlcnZpY2UuZmV0Y2hGcm9tS2V5Y2xvYWsoa2V5Y2xvYWssIEVMRU1FTlRfQVVUSFpfQVVESUVOQ0UpLnRoZW4oKGtleXMpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBlcm1pc3Npb25TZXJ2aWNlLmh5ZHJhdGUoa2V5cyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZWFkeUFwcHMuZm9yRWFjaCgoYXBwKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChgJHthcHB9OnVwZGF0ZS1wZXJtaXNzaW9uc2AsIHsgZGV0YWlsOiBwZXJtaXNzaW9uU2VydmljZS5rZXlzKCkgfSkpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSksXHJcblx0XHRcdFx0XHRzd2l0Y2hNYXAoXHJcblx0XHRcdFx0XHRcdCgpID0+XHJcblx0XHRcdFx0XHRcdFx0bWljcm9BcHBTZXJ2aWNlPy5pbml0KGh0dHBDbGllbnQsIEFQSV9DT05GSUdTLmFwaSkucGlwZShcclxuXHRcdFx0XHRcdFx0XHRcdHRhcCgocmVzdWx0KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyaWRnZS5ob3N0TWVudUl0ZW1zLnNldChyZXN1bHQubWVudUl0ZW1zKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJpZGdlLnBsdWdpbkpzb24uc2V0KHJlc3VsdC5wbHVnaW5zKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdFx0KSA/PyBFTVBUWVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKClcclxuXHRcdFx0XHQuYWRkKHJlc29sdmUpXHJcblx0XHQpO1xyXG5cclxuLyoqXHJcbiAqIG9ubHkgd29ya3Mgd2hlbiBpc0hvc3RNb2RlIGlzIHRydWVcclxuICogbWljcm8tYXBwIGFjY2VzcyBpdHMgb3duIGFwaS5qc29uIGZpbGUgd2hlbiBvcGVuZWQgaW4gaG9zdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEFwaUNvbmZpZ09uTUZFTW9kZShcclxuXHRodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG5cdGtleWNsb2FrOiBLZXljbG9ha1NlcnZpY2UsXHJcblx0YXBwTmFtZTogQXBwc1xyXG4pOiAoKSA9PiBQcm9taXNlPGFueT4ge1xyXG5cdHJldHVybiAoKSA9PiB7XHJcblx0XHRjb25zdCBvYnNlcnZhYmxlJCA9IGh0dHBDbGllbnRcclxuXHRcdFx0LmdldDxBcGlDb25maWdzRmFjdG9yeT4oaXNEZXZNb2RlKCkgPyAnLi9hc3NldHMvbG9jYWwtY29uZmlncy9hcGkubG9jYWwuanNvbicgOiAnLi9hcGkuanNvbicpXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdHRhcCgoY29uZmlncykgPT4ge1xyXG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihBUElfQ09ORklHUywgeyAuLi5jb25maWdzIH0pO1xyXG5cdFx0XHRcdFx0aWYgKGFwcE5hbWUgIT09IEFwcHMuVEhPUiAmJiBhcHBOYW1lICE9PSBBcHBzLllFQVApIHtcclxuXHRcdFx0XHRcdFx0QVBJX0NPTkZJR1MuYXBpID0gQVBJX0NPTkZJR1MuZ2V0RXh0ZXJuYWxBcHBFbmRwb2ludChhcHBOYW1lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBmaXJzdFZhbHVlRnJvbShvYnNlcnZhYmxlJCk7XHJcblx0fTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGxvYWRJbml0RGF0YSA9IChodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSA9PiAoKSA9PlxyXG5cdG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XHJcblx0XHRjb25zdCBlbmRwb2ludCA9IEFQSV9DT05GSUdTLmFwaSArICcvdWktcm91dGUtY29udGVudC1jb25maWdzL2FsbCc7XHJcblx0XHRodHRwQ2xpZW50LmdldDxSb3V0ZUNvbmZpZ1tdPihlbmRwb2ludCkuc3Vic2NyaWJlKHtcclxuXHRcdFx0bmV4dDogKGRhdGEpID0+IHtcclxuXHRcdFx0XHRicmlkZ2Uucm91dGVDb25maWdzLnNldChkYXRhKTtcclxuXHRcdFx0XHRyZXNvbHZlKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgaW5pdCBkYXRhIGZyb20gJHtlbmRwb2ludH06YCwgZXJyKTtcclxuXHRcdFx0XHRyZXNvbHZlKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0pO1xyXG4iXX0=
@@ -9,6 +9,7 @@ import { loadApiConfigs, loadInitData } from 'aril/boot/config/api';
9
9
  import { ArilReuseStrategy, MicroAppService } from 'aril/boot/config/apps';
10
10
  import { loadPlugins } from 'aril/boot/config/plugins';
11
11
  import { i18nFolderName } from 'aril/i18n';
12
+ import { PermissionService } from 'aril/permission';
12
13
  import { ActivityService } from 'aril/util/activity';
13
14
  import { AppComponent } from './app.component';
14
15
  export var appName;
@@ -21,10 +22,10 @@ export const boot = (_appName, routes) => {
21
22
  { provide: RouteReuseStrategy, useClass: ArilReuseStrategy },
22
23
  {
23
24
  provide: APP_INITIALIZER,
24
- useFactory: (httpClient, keycloak, router, folderName, microAppService, activityService) => {
25
+ useFactory: (httpClient, keycloak, router, folderName, microAppService, activityService, permissionService) => {
25
26
  if (router)
26
27
  bridge.hostRouter = router;
27
- const runLoadApiConfigs = loadApiConfigs(httpClient, keycloak, folderName, microAppService);
28
+ const runLoadApiConfigs = loadApiConfigs(httpClient, keycloak, folderName, microAppService, permissionService);
28
29
  const runLoadInitData = loadInitData(httpClient);
29
30
  const runLoadPlugins = loadPlugins();
30
31
  return async () => {
@@ -35,10 +36,18 @@ export const boot = (_appName, routes) => {
35
36
  };
36
37
  },
37
38
  multi: true,
38
- deps: [HttpClient, KeycloakService, Router, i18nFolderName, MicroAppService, ActivityService]
39
+ deps: [
40
+ HttpClient,
41
+ KeycloakService,
42
+ Router,
43
+ i18nFolderName,
44
+ MicroAppService,
45
+ ActivityService,
46
+ PermissionService
47
+ ]
39
48
  }
40
49
  ]
41
50
  };
42
51
  bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
43
52
  };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2hvc3Qvc3JjL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUNOLGtCQUFrQixFQUNsQixNQUFNLEVBRU4sYUFBYSxFQUNiLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQVEsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsSUFBSSxPQUFhLENBQUM7QUFFekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBYyxFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQ3RELE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQXNCO1FBQ3BDLFNBQVMsRUFBRTtZQUNWLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDckQsYUFBYSxDQUNaLE1BQU0sRUFDTix5QkFBeUIsRUFBRSxFQUMzQixnQkFBZ0IsRUFBRSxFQUNsQixtQkFBbUIsRUFBRSxFQUNyQixnQkFBZ0IsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQ25EO1lBQ0QsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO1lBQzVEO2dCQUNDLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixVQUFVLEVBQUUsQ0FDWCxVQUFzQixFQUN0QixRQUF5QixFQUN6QixNQUFjLEVBQ2QsVUFBaUMsRUFDakMsZUFBZ0MsRUFDaEMsZUFBZ0MsRUFDL0IsRUFBRTtvQkFDSCxJQUFJLE1BQU07d0JBQUUsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7b0JBRXZDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUN2QyxVQUFVLEVBQ1YsUUFBUSxFQUNSLFVBQStCLEVBQy9CLGVBQWUsQ0FDZixDQUFDO29CQUNGLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakQsTUFBTSxjQUFjLEdBQUcsV0FBVyxFQUFFLENBQUM7b0JBQ3JDLE9BQU8sS0FBSyxJQUFJLEVBQUU7d0JBQ2pCLE1BQU0saUJBQWlCLEVBQUUsQ0FBQzt3QkFDMUIsTUFBTSxlQUFlLEVBQUUsQ0FBQzt3QkFDeEIsY0FBYyxFQUFFLENBQUM7d0JBQ2pCLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDNUMsQ0FBQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUM7YUFDN0Y7U0FDRDtLQUNELENBQUM7SUFFRixvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBBcHBsaWNhdGlvbkNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBib290c3RyYXBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQge1xyXG5cdFJvdXRlUmV1c2VTdHJhdGVneSxcclxuXHRSb3V0ZXIsXHJcblx0Um91dGVzLFxyXG5cdHByb3ZpZGVSb3V0ZXIsXHJcblx0d2l0aENvbXBvbmVudElucHV0QmluZGluZyxcclxuXHR3aXRoSGFzaExvY2F0aW9uLFxyXG5cdHdpdGhSb3V0ZXJDb25maWcsXHJcblx0d2l0aFZpZXdUcmFuc2l0aW9uc1xyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuXHJcbmltcG9ydCB7IEhPU1RfSTE4Tl9GT0xERVIsIGNyZWF0ZUJhc2VBcHBDb25maWcgfSBmcm9tICdhcmlsL2Jvb3QvYmFzZSc7XHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBsb2FkQXBpQ29uZmlncywgbG9hZEluaXREYXRhIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBzLCBBcmlsUmV1c2VTdHJhdGVneSwgTWljcm9BcHBTZXJ2aWNlIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuaW1wb3J0IHsgbG9hZFBsdWdpbnMgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL3BsdWdpbnMnO1xyXG5pbXBvcnQgeyBpMThuRm9sZGVyTmFtZSB9IGZyb20gJ2FyaWwvaTE4bic7XHJcbmltcG9ydCB7IEFjdGl2aXR5U2VydmljZSB9IGZyb20gJ2FyaWwvdXRpbC9hY3Rpdml0eSc7XHJcblxyXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHZhciBhcHBOYW1lOiBBcHBzO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJvb3QgPSAoX2FwcE5hbWU6IEFwcHMsIHJvdXRlczogUm91dGVzKSA9PiB7XHJcblx0YXBwTmFtZSA9IF9hcHBOYW1lO1xyXG5cdGNvbnN0IGFwcENvbmZpZzogQXBwbGljYXRpb25Db25maWcgPSB7XHJcblx0XHRwcm92aWRlcnM6IFtcclxuXHRcdFx0Y3JlYXRlQmFzZUFwcENvbmZpZyh7IGkxOG5Gb2xkZXI6IEhPU1RfSTE4Tl9GT0xERVIgfSksXHJcblx0XHRcdHByb3ZpZGVSb3V0ZXIoXHJcblx0XHRcdFx0cm91dGVzLFxyXG5cdFx0XHRcdHdpdGhDb21wb25lbnRJbnB1dEJpbmRpbmcoKSxcclxuXHRcdFx0XHR3aXRoSGFzaExvY2F0aW9uKCksXHJcblx0XHRcdFx0d2l0aFZpZXdUcmFuc2l0aW9ucygpLFxyXG5cdFx0XHRcdHdpdGhSb3V0ZXJDb25maWcoeyBvblNhbWVVcmxOYXZpZ2F0aW9uOiAncmVsb2FkJyB9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHR7IHByb3ZpZGU6IFJvdXRlUmV1c2VTdHJhdGVneSwgdXNlQ2xhc3M6IEFyaWxSZXVzZVN0cmF0ZWd5IH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXHJcblx0XHRcdFx0dXNlRmFjdG9yeTogKFxyXG5cdFx0XHRcdFx0aHR0cENsaWVudDogSHR0cENsaWVudCxcclxuXHRcdFx0XHRcdGtleWNsb2FrOiBLZXljbG9ha1NlcnZpY2UsXHJcblx0XHRcdFx0XHRyb3V0ZXI6IFJvdXRlcixcclxuXHRcdFx0XHRcdGZvbGRlck5hbWU6IHR5cGVvZiBpMThuRm9sZGVyTmFtZSxcclxuXHRcdFx0XHRcdG1pY3JvQXBwU2VydmljZTogTWljcm9BcHBTZXJ2aWNlLFxyXG5cdFx0XHRcdFx0YWN0aXZpdHlTZXJ2aWNlOiBBY3Rpdml0eVNlcnZpY2VcclxuXHRcdFx0XHQpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyb3V0ZXIpIGJyaWRnZS5ob3N0Um91dGVyID0gcm91dGVyO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRBcGlDb25maWdzID0gbG9hZEFwaUNvbmZpZ3MoXHJcblx0XHRcdFx0XHRcdGh0dHBDbGllbnQsXHJcblx0XHRcdFx0XHRcdGtleWNsb2FrLFxyXG5cdFx0XHRcdFx0XHRmb2xkZXJOYW1lIGFzIHVua25vd24gYXMgc3RyaW5nLFxyXG5cdFx0XHRcdFx0XHRtaWNyb0FwcFNlcnZpY2VcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25zdCBydW5Mb2FkSW5pdERhdGEgPSBsb2FkSW5pdERhdGEoaHR0cENsaWVudCk7XHJcblx0XHRcdFx0XHRjb25zdCBydW5Mb2FkUGx1Z2lucyA9IGxvYWRQbHVnaW5zKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRhd2FpdCBydW5Mb2FkQXBpQ29uZmlncygpO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCBydW5Mb2FkSW5pdERhdGEoKTtcclxuXHRcdFx0XHRcdFx0cnVuTG9hZFBsdWdpbnMoKTtcclxuXHRcdFx0XHRcdFx0YWN0aXZpdHlTZXJ2aWNlLnN0YXJ0KHsgc2hlbGxNb2RlOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdG11bHRpOiB0cnVlLFxyXG5cdFx0XHRcdGRlcHM6IFtIdHRwQ2xpZW50LCBLZXljbG9ha1NlcnZpY2UsIFJvdXRlciwgaTE4bkZvbGRlck5hbWUsIE1pY3JvQXBwU2VydmljZSwgQWN0aXZpdHlTZXJ2aWNlXVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fTtcclxuXHJcblx0Ym9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50LCBhcHBDb25maWcpLmNhdGNoKChlcnIpID0+IGNvbnNvbGUuZXJyb3IoZXJyKSk7XHJcbn07XHJcbiJdfQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2hvc3Qvc3JjL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUNOLGtCQUFrQixFQUNsQixNQUFNLEVBRU4sYUFBYSxFQUNiLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQVEsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsSUFBSSxPQUFhLENBQUM7QUFFekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBYyxFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQ3RELE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQXNCO1FBQ3BDLFNBQVMsRUFBRTtZQUNWLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDckQsYUFBYSxDQUNaLE1BQU0sRUFDTix5QkFBeUIsRUFBRSxFQUMzQixnQkFBZ0IsRUFBRSxFQUNsQixtQkFBbUIsRUFBRSxFQUNyQixnQkFBZ0IsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQ25EO1lBQ0QsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO1lBQzVEO2dCQUNDLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixVQUFVLEVBQUUsQ0FDWCxVQUFzQixFQUN0QixRQUF5QixFQUN6QixNQUFjLEVBQ2QsVUFBaUMsRUFDakMsZUFBZ0MsRUFDaEMsZUFBZ0MsRUFDaEMsaUJBQW9DLEVBQ25DLEVBQUU7b0JBQ0gsSUFBSSxNQUFNO3dCQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO29CQUV2QyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FDdkMsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUErQixFQUMvQixlQUFlLEVBQ2YsaUJBQWlCLENBQ2pCLENBQUM7b0JBQ0YsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNqRCxNQUFNLGNBQWMsR0FBRyxXQUFXLEVBQUUsQ0FBQztvQkFDckMsT0FBTyxLQUFLLElBQUksRUFBRTt3QkFDakIsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO3dCQUMxQixNQUFNLGVBQWUsRUFBRSxDQUFDO3dCQUN4QixjQUFjLEVBQUUsQ0FBQzt3QkFDakIsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUM1QyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUU7b0JBQ0wsVUFBVTtvQkFDVixlQUFlO29CQUNmLE1BQU07b0JBQ04sY0FBYztvQkFDZCxlQUFlO29CQUNmLGVBQWU7b0JBQ2YsaUJBQWlCO2lCQUNqQjthQUNEO1NBQ0Q7S0FDRCxDQUFDO0lBRUYsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgQXBwbGljYXRpb25Db25maWcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYm9vdHN0cmFwQXBwbGljYXRpb24gfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtcclxuXHRSb3V0ZVJldXNlU3RyYXRlZ3ksXHJcblx0Um91dGVyLFxyXG5cdFJvdXRlcyxcclxuXHRwcm92aWRlUm91dGVyLFxyXG5cdHdpdGhDb21wb25lbnRJbnB1dEJpbmRpbmcsXHJcblx0d2l0aEhhc2hMb2NhdGlvbixcclxuXHR3aXRoUm91dGVyQ29uZmlnLFxyXG5cdHdpdGhWaWV3VHJhbnNpdGlvbnNcclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XHJcblxyXG5pbXBvcnQgeyBIT1NUX0kxOE5fRk9MREVSLCBjcmVhdGVCYXNlQXBwQ29uZmlnIH0gZnJvbSAnYXJpbC9ib290L2Jhc2UnO1xyXG5pbXBvcnQgeyBicmlkZ2UgfSBmcm9tICdhcmlsL2Jvb3QvYnJpZGdlJztcclxuaW1wb3J0IHsgbG9hZEFwaUNvbmZpZ3MsIGxvYWRJbml0RGF0YSB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBpJztcclxuaW1wb3J0IHsgQXBwcywgQXJpbFJldXNlU3RyYXRlZ3ksIE1pY3JvQXBwU2VydmljZSB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBwcyc7XHJcbmltcG9ydCB7IGxvYWRQbHVnaW5zIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9wbHVnaW5zJztcclxuaW1wb3J0IHsgaTE4bkZvbGRlck5hbWUgfSBmcm9tICdhcmlsL2kxOG4nO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ2FyaWwvcGVybWlzc2lvbic7XHJcbmltcG9ydCB7IEFjdGl2aXR5U2VydmljZSB9IGZyb20gJ2FyaWwvdXRpbC9hY3Rpdml0eSc7XHJcblxyXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHZhciBhcHBOYW1lOiBBcHBzO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJvb3QgPSAoX2FwcE5hbWU6IEFwcHMsIHJvdXRlczogUm91dGVzKSA9PiB7XHJcblx0YXBwTmFtZSA9IF9hcHBOYW1lO1xyXG5cdGNvbnN0IGFwcENvbmZpZzogQXBwbGljYXRpb25Db25maWcgPSB7XHJcblx0XHRwcm92aWRlcnM6IFtcclxuXHRcdFx0Y3JlYXRlQmFzZUFwcENvbmZpZyh7IGkxOG5Gb2xkZXI6IEhPU1RfSTE4Tl9GT0xERVIgfSksXHJcblx0XHRcdHByb3ZpZGVSb3V0ZXIoXHJcblx0XHRcdFx0cm91dGVzLFxyXG5cdFx0XHRcdHdpdGhDb21wb25lbnRJbnB1dEJpbmRpbmcoKSxcclxuXHRcdFx0XHR3aXRoSGFzaExvY2F0aW9uKCksXHJcblx0XHRcdFx0d2l0aFZpZXdUcmFuc2l0aW9ucygpLFxyXG5cdFx0XHRcdHdpdGhSb3V0ZXJDb25maWcoeyBvblNhbWVVcmxOYXZpZ2F0aW9uOiAncmVsb2FkJyB9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHR7IHByb3ZpZGU6IFJvdXRlUmV1c2VTdHJhdGVneSwgdXNlQ2xhc3M6IEFyaWxSZXVzZVN0cmF0ZWd5IH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXHJcblx0XHRcdFx0dXNlRmFjdG9yeTogKFxyXG5cdFx0XHRcdFx0aHR0cENsaWVudDogSHR0cENsaWVudCxcclxuXHRcdFx0XHRcdGtleWNsb2FrOiBLZXljbG9ha1NlcnZpY2UsXHJcblx0XHRcdFx0XHRyb3V0ZXI6IFJvdXRlcixcclxuXHRcdFx0XHRcdGZvbGRlck5hbWU6IHR5cGVvZiBpMThuRm9sZGVyTmFtZSxcclxuXHRcdFx0XHRcdG1pY3JvQXBwU2VydmljZTogTWljcm9BcHBTZXJ2aWNlLFxyXG5cdFx0XHRcdFx0YWN0aXZpdHlTZXJ2aWNlOiBBY3Rpdml0eVNlcnZpY2UsXHJcblx0XHRcdFx0XHRwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcclxuXHRcdFx0XHQpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyb3V0ZXIpIGJyaWRnZS5ob3N0Um91dGVyID0gcm91dGVyO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRBcGlDb25maWdzID0gbG9hZEFwaUNvbmZpZ3MoXHJcblx0XHRcdFx0XHRcdGh0dHBDbGllbnQsXHJcblx0XHRcdFx0XHRcdGtleWNsb2FrLFxyXG5cdFx0XHRcdFx0XHRmb2xkZXJOYW1lIGFzIHVua25vd24gYXMgc3RyaW5nLFxyXG5cdFx0XHRcdFx0XHRtaWNyb0FwcFNlcnZpY2UsXHJcblx0XHRcdFx0XHRcdHBlcm1pc3Npb25TZXJ2aWNlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgcnVuTG9hZEluaXREYXRhID0gbG9hZEluaXREYXRhKGh0dHBDbGllbnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgcnVuTG9hZFBsdWdpbnMgPSBsb2FkUGx1Z2lucygpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdFx0YXdhaXQgcnVuTG9hZEFwaUNvbmZpZ3MoKTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgcnVuTG9hZEluaXREYXRhKCk7XHJcblx0XHRcdFx0XHRcdHJ1bkxvYWRQbHVnaW5zKCk7XHJcblx0XHRcdFx0XHRcdGFjdGl2aXR5U2VydmljZS5zdGFydCh7IHNoZWxsTW9kZTogdHJ1ZSB9KTtcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRtdWx0aTogdHJ1ZSxcclxuXHRcdFx0XHRkZXBzOiBbXHJcblx0XHRcdFx0XHRIdHRwQ2xpZW50LFxyXG5cdFx0XHRcdFx0S2V5Y2xvYWtTZXJ2aWNlLFxyXG5cdFx0XHRcdFx0Um91dGVyLFxyXG5cdFx0XHRcdFx0aTE4bkZvbGRlck5hbWUsXHJcblx0XHRcdFx0XHRNaWNyb0FwcFNlcnZpY2UsXHJcblx0XHRcdFx0XHRBY3Rpdml0eVNlcnZpY2UsXHJcblx0XHRcdFx0XHRQZXJtaXNzaW9uU2VydmljZVxyXG5cdFx0XHRcdF1cclxuXHRcdFx0fVxyXG5cdFx0XVxyXG5cdH07XHJcblxyXG5cdGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwgYXBwQ29uZmlnKS5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKGVycikpO1xyXG59O1xyXG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpbC1wZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9wZXJtaXNzaW9uL2FyaWwtcGVybWlzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './src/permission.service';
2
+ export * from './src/constants';
3
+ export * from './src/has-permission.directive';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3Blcm1pc3Npb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NyYy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9jb25zdGFudHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9oYXMtcGVybWlzc2lvbi5kaXJlY3RpdmUnO1xyXG4iXX0=
@@ -0,0 +1,4 @@
1
+ // Backend `aril.element-authz.client-id` property'sinin default değerinin FE karşılığı.
2
+ // UMA ticket sorgusunun audience'ı budur — SPA client'ı (ui-thor) DEĞİL, resource-sahibi client.
3
+ export const ELEMENT_AUTHZ_AUDIENCE = 'thor';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9wZXJtaXNzaW9uL3NyYy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0ZBQXdGO0FBQ3hGLGlHQUFpRztBQUNqRyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCYWNrZW5kIGBhcmlsLmVsZW1lbnQtYXV0aHouY2xpZW50LWlkYCBwcm9wZXJ0eSdzaW5pbiBkZWZhdWx0IGRlxJ9lcmluaW4gRkUga2FyxZ/EsWzEscSfxLEuXHJcbi8vIFVNQSB0aWNrZXQgc29yZ3VzdW51biBhdWRpZW5jZSfEsSBidWR1ciDigJQgU1BBIGNsaWVudCfEsSAodWktdGhvcikgREXEnsSwTCwgcmVzb3VyY2Utc2FoaWJpIGNsaWVudC5cclxuZXhwb3J0IGNvbnN0IEVMRU1FTlRfQVVUSFpfQVVESUVOQ0UgPSAndGhvcic7XHJcbiJdfQ==
@@ -0,0 +1,49 @@
1
+ import { Directive, Input, TemplateRef, ViewContainerRef, effect, inject, signal } from '@angular/core';
2
+ import { PermissionService } from './permission.service';
3
+ import * as i0 from "@angular/core";
4
+ export class HasPermissionDirective {
5
+ set arilHasPermission(value) {
6
+ this.keys.set(Array.isArray(value) ? value : [value]);
7
+ }
8
+ set arilHasPermissionMode(value) {
9
+ this.mode.set(value);
10
+ }
11
+ set arilHasPermissionElse(value) {
12
+ this.elseTemplate.set(value);
13
+ }
14
+ constructor() {
15
+ this.templateRef = inject((TemplateRef));
16
+ this.viewContainer = inject(ViewContainerRef);
17
+ this.permissionService = inject(PermissionService);
18
+ this.keys = signal([]);
19
+ this.mode = signal('any');
20
+ this.elseTemplate = signal(null);
21
+ effect(() => {
22
+ this.viewContainer.clear();
23
+ if (!this.permissionService.ready())
24
+ return;
25
+ const granted = this.mode() === 'all' ? this.permissionService.hasAll(this.keys()) : this.permissionService.hasAny(this.keys());
26
+ if (granted) {
27
+ this.viewContainer.createEmbeddedView(this.templateRef);
28
+ }
29
+ else if (this.elseTemplate()) {
30
+ // Intentionally read only on the denied path — granted renders must not track elseTemplate changes; reordering branches would reintroduce re-render churn.
31
+ this.viewContainer.createEmbeddedView(this.elseTemplate());
32
+ }
33
+ });
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HasPermissionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
36
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: HasPermissionDirective, isStandalone: true, selector: "[arilHasPermission]", inputs: { arilHasPermission: "arilHasPermission", arilHasPermissionMode: "arilHasPermissionMode", arilHasPermissionElse: "arilHasPermissionElse" }, ngImport: i0 }); }
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HasPermissionDirective, decorators: [{
39
+ type: Directive,
40
+ args: [{ selector: '[arilHasPermission]', standalone: true }]
41
+ }], ctorParameters: () => [], propDecorators: { arilHasPermission: [{
42
+ type: Input,
43
+ args: [{ required: true }]
44
+ }], arilHasPermissionMode: [{
45
+ type: Input
46
+ }], arilHasPermissionElse: [{
47
+ type: Input
48
+ }] } });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXBlcm1pc3Npb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9wZXJtaXNzaW9uL3NyYy9oYXMtcGVybWlzc2lvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUd6RCxNQUFNLE9BQU8sc0JBQXNCO0lBU2xDLElBQStCLGlCQUFpQixDQUFDLEtBQXdCO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxJQUFhLHFCQUFxQixDQUFDLEtBQW9CO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFhLHFCQUFxQixDQUFDLEtBQWtDO1FBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDtRQWxCUSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQW9CLENBQUEsQ0FBQyxDQUFDO1FBQzNDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekMsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFOUMsU0FBSSxHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUM1QixTQUFJLEdBQUcsTUFBTSxDQUFnQixLQUFLLENBQUMsQ0FBQztRQUNwQyxpQkFBWSxHQUFHLE1BQU0sQ0FBOEIsSUFBSSxDQUFDLENBQUM7UUFhaEUsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7Z0JBQUUsT0FBTztZQUM1QyxNQUFNLE9BQU8sR0FDWixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pILElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekQsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUNoQywySkFBMko7Z0JBQzNKLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRyxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FoQ1csc0JBQXNCO2tHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRGxDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTt3REFVaEMsaUJBQWlCO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFHWixxQkFBcUI7c0JBQWpDLEtBQUs7Z0JBR08scUJBQXFCO3NCQUFqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIGVmZmVjdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2FyaWxIYXNQZXJtaXNzaW9uXScsIHN0YW5kYWxvbmU6IHRydWUgfSlcclxuZXhwb3J0IGNsYXNzIEhhc1Blcm1pc3Npb25EaXJlY3RpdmUge1xyXG5cdHByaXZhdGUgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8dW5rbm93bj4pO1xyXG5cdHByaXZhdGUgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcclxuXHRwcml2YXRlIHBlcm1pc3Npb25TZXJ2aWNlID0gaW5qZWN0KFBlcm1pc3Npb25TZXJ2aWNlKTtcclxuXHJcblx0cHJpdmF0ZSBrZXlzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XHJcblx0cHJpdmF0ZSBtb2RlID0gc2lnbmFsPCdhbnknIHwgJ2FsbCc+KCdhbnknKTtcclxuXHRwcml2YXRlIGVsc2VUZW1wbGF0ZSA9IHNpZ25hbDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xyXG5cclxuXHRASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZXQgYXJpbEhhc1Blcm1pc3Npb24odmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcblx0XHR0aGlzLmtleXMuc2V0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKTtcclxuXHR9XHJcblx0QElucHV0KCkgc2V0IGFyaWxIYXNQZXJtaXNzaW9uTW9kZSh2YWx1ZTogJ2FueScgfCAnYWxsJykge1xyXG5cdFx0dGhpcy5tb2RlLnNldCh2YWx1ZSk7XHJcblx0fVxyXG5cdEBJbnB1dCgpIHNldCBhcmlsSGFzUGVybWlzc2lvbkVsc2UodmFsdWU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCkge1xyXG5cdFx0dGhpcy5lbHNlVGVtcGxhdGUuc2V0KHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0dGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcblx0XHRcdGlmICghdGhpcy5wZXJtaXNzaW9uU2VydmljZS5yZWFkeSgpKSByZXR1cm47XHJcblx0XHRcdGNvbnN0IGdyYW50ZWQgPVxyXG5cdFx0XHRcdHRoaXMubW9kZSgpID09PSAnYWxsJyA/IHRoaXMucGVybWlzc2lvblNlcnZpY2UuaGFzQWxsKHRoaXMua2V5cygpKSA6IHRoaXMucGVybWlzc2lvblNlcnZpY2UuaGFzQW55KHRoaXMua2V5cygpKTtcclxuXHRcdFx0aWYgKGdyYW50ZWQpIHtcclxuXHRcdFx0XHR0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuZWxzZVRlbXBsYXRlKCkpIHtcclxuXHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IHJlYWQgb25seSBvbiB0aGUgZGVuaWVkIHBhdGgg4oCUIGdyYW50ZWQgcmVuZGVycyBtdXN0IG5vdCB0cmFjayBlbHNlVGVtcGxhdGUgY2hhbmdlczsgcmVvcmRlcmluZyBicmFuY2hlcyB3b3VsZCByZWludHJvZHVjZSByZS1yZW5kZXIgY2h1cm4uXHJcblx0XHRcdFx0dGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmVsc2VUZW1wbGF0ZSgpISk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iXX0=
@@ -0,0 +1,57 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PermissionService {
4
+ constructor() {
5
+ this.permissionKeys = signal(new Set(), {
6
+ equal: (a, b) => a.size === b.size && [...b].every((k) => a.has(k))
7
+ });
8
+ this.readySignal = signal(false);
9
+ this.ready = this.readySignal.asReadonly();
10
+ }
11
+ hydrate(keys) {
12
+ this.permissionKeys.set(new Set(keys));
13
+ this.readySignal.set(true);
14
+ }
15
+ has(key) {
16
+ return this.permissionKeys().has(key);
17
+ }
18
+ hasAny(keys) {
19
+ return keys.some((k) => this.has(k));
20
+ }
21
+ hasAll(keys) {
22
+ return keys.every((k) => this.has(k));
23
+ }
24
+ keys() {
25
+ return [...this.permissionKeys()];
26
+ }
27
+ async fetchFromKeycloak(keycloak, audience) {
28
+ try {
29
+ const kc = keycloak.getKeycloakInstance();
30
+ const url = `${kc.authServerUrl}/realms/${kc.realm}/protocol/openid-connect/token`;
31
+ const body = new URLSearchParams({
32
+ grant_type: 'urn:ietf:params:oauth:grant-type:uma-ticket',
33
+ audience,
34
+ response_mode: 'permissions'
35
+ });
36
+ const res = await fetch(url, {
37
+ method: 'POST',
38
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded', Authorization: `Bearer ${kc.token}` },
39
+ body
40
+ });
41
+ if (!res.ok)
42
+ return []; // izin yoksa Keycloak 403 döner → boş set (fail-closed)
43
+ const permissions = (await res.json());
44
+ return permissions.map((p) => p.rsname);
45
+ }
46
+ catch {
47
+ return []; // any exception → fail-closed, no console.log
48
+ }
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: PermissionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
51
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: PermissionService, providedIn: 'root' }); }
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: PermissionService, decorators: [{
54
+ type: Injectable,
55
+ args: [{ providedIn: 'root' }]
56
+ }] });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9wZXJtaXNzaW9uL3NyYy9wZXJtaXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBU25ELE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFFUyxtQkFBYyxHQUFHLE1BQU0sQ0FBc0IsSUFBSSxHQUFHLEVBQUUsRUFBRTtZQUMvRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuRSxDQUFDLENBQUM7UUFDSyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixVQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQXdDL0M7SUF0Q0EsT0FBTyxDQUFDLElBQWM7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsR0FBRyxDQUFDLEdBQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBYztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSTtRQUNILE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBeUIsRUFBRSxRQUFnQjtRQUNsRSxJQUFJLENBQUM7WUFDSixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMxQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxhQUFhLFdBQVcsRUFBRSxDQUFDLEtBQUssZ0NBQWdDLENBQUM7WUFDbkYsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUM7Z0JBQ2hDLFVBQVUsRUFBRSw2Q0FBNkM7Z0JBQ3pELFFBQVE7Z0JBQ1IsYUFBYSxFQUFFLGFBQWE7YUFDNUIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUM1QixNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsbUNBQW1DLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNyRyxJQUFJO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsd0RBQXdEO1lBQ2hGLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQW9CLENBQUM7WUFDMUQsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNSLE9BQU8sRUFBRSxDQUFDLENBQUMsOENBQThDO1FBQzFELENBQUM7SUFDRixDQUFDOzhHQTVDVyxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQURKLE1BQU07OzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuXHJcbmludGVyZmFjZSBVbWFQZXJtaXNzaW9uIHtcclxuXHRyc25hbWU6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIHtcclxuXHRwcml2YXRlIHBlcm1pc3Npb25LZXlzID0gc2lnbmFsPFJlYWRvbmx5U2V0PHN0cmluZz4+KG5ldyBTZXQoKSwge1xyXG5cdFx0ZXF1YWw6IChhLCBiKSA9PiBhLnNpemUgPT09IGIuc2l6ZSAmJiBbLi4uYl0uZXZlcnkoKGspID0+IGEuaGFzKGspKVxyXG5cdH0pO1xyXG5cdHByaXZhdGUgcmVhZHlTaWduYWwgPSBzaWduYWwoZmFsc2UpO1xyXG5cdHJlYWRvbmx5IHJlYWR5ID0gdGhpcy5yZWFkeVNpZ25hbC5hc1JlYWRvbmx5KCk7XHJcblxyXG5cdGh5ZHJhdGUoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcclxuXHRcdHRoaXMucGVybWlzc2lvbktleXMuc2V0KG5ldyBTZXQoa2V5cykpO1xyXG5cdFx0dGhpcy5yZWFkeVNpZ25hbC5zZXQodHJ1ZSk7XHJcblx0fVxyXG5cdGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucGVybWlzc2lvbktleXMoKS5oYXMoa2V5KTtcclxuXHR9XHJcblx0aGFzQW55KGtleXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4ga2V5cy5zb21lKChrKSA9PiB0aGlzLmhhcyhrKSk7XHJcblx0fVxyXG5cdGhhc0FsbChrZXlzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGtleXMuZXZlcnkoKGspID0+IHRoaXMuaGFzKGspKTtcclxuXHR9XHJcblx0a2V5cygpOiBzdHJpbmdbXSB7XHJcblx0XHRyZXR1cm4gWy4uLnRoaXMucGVybWlzc2lvbktleXMoKV07XHJcblx0fVxyXG5cclxuXHRhc3luYyBmZXRjaEZyb21LZXljbG9hayhrZXljbG9hazogS2V5Y2xvYWtTZXJ2aWNlLCBhdWRpZW5jZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qga2MgPSBrZXljbG9hay5nZXRLZXljbG9ha0luc3RhbmNlKCk7XHJcblx0XHRcdGNvbnN0IHVybCA9IGAke2tjLmF1dGhTZXJ2ZXJVcmx9L3JlYWxtcy8ke2tjLnJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmA7XHJcblx0XHRcdGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcclxuXHRcdFx0XHRncmFudF90eXBlOiAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6dW1hLXRpY2tldCcsXHJcblx0XHRcdFx0YXVkaWVuY2UsXHJcblx0XHRcdFx0cmVzcG9uc2VfbW9kZTogJ3Blcm1pc3Npb25zJ1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcblx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0aGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtrYy50b2tlbn1gIH0sXHJcblx0XHRcdFx0Ym9keVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0aWYgKCFyZXMub2spIHJldHVybiBbXTsgLy8gaXppbiB5b2tzYSBLZXljbG9hayA0MDMgZMO2bmVyIOKGkiBib8WfIHNldCAoZmFpbC1jbG9zZWQpXHJcblx0XHRcdGNvbnN0IHBlcm1pc3Npb25zID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFVtYVBlcm1pc3Npb25bXTtcclxuXHRcdFx0cmV0dXJuIHBlcm1pc3Npb25zLm1hcCgocCkgPT4gcC5yc25hbWUpO1xyXG5cdFx0fSBjYXRjaCB7XHJcblx0XHRcdHJldHVybiBbXTsgLy8gYW55IGV4Y2VwdGlvbiDihpIgZmFpbC1jbG9zZWQsIG5vIGNvbnNvbGUubG9nXHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  export * from './prodiveHost';
2
2
  export * from './prodiveHostRouter';
3
3
  export * from './provideHostKeycloak';
4
+ export * from './provideHostPermissions';
4
5
  export * from './provideLocaleId';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3Byb3ZpZGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHJvZGl2ZUhvc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb2RpdmVIb3N0Um91dGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlSG9zdEtleWNsb2FrJztcclxuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlTG9jYWxlSWQnO1xyXG5cclxuIl19
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3Byb3ZpZGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wcm9kaXZlSG9zdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcHJvZGl2ZUhvc3RSb3V0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVIb3N0S2V5Y2xvYWsnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVIb3N0UGVybWlzc2lvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVMb2NhbGVJZCc7XHJcblxyXG4iXX0=
@@ -1,6 +1,7 @@
1
1
  import { bridge } from 'aril/boot/bridge';
2
2
  import { provideHostKeycloak } from './provideHostKeycloak';
3
+ import { provideHostPermissions } from './provideHostPermissions';
3
4
  // Host altında çağrıldığında shared keycloak ekler; MFE standalone'da
4
5
  // (bridge.hostNgZone null) bu path zaten boot olmuyor, güvenli fallback.
5
- export const provideHost = (app) => bridge.hostNgZone ? [provideHostKeycloak(app)] : [];
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZGl2ZUhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3Byb3ZpZGVyL3NyYy9wcm9kaXZlSG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsc0VBQXNFO0FBQ3RFLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFTLEVBQTBDLEVBQUUsQ0FDaEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBBcHBzIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuXHJcbmltcG9ydCB7IHByb3ZpZGVIb3N0S2V5Y2xvYWsgfSBmcm9tICcuL3Byb3ZpZGVIb3N0S2V5Y2xvYWsnO1xyXG5cclxuLy8gSG9zdCBhbHTEsW5kYSDDp2HEn3LEsWxkxLHEn8SxbmRhIHNoYXJlZCBrZXljbG9hayBla2xlcjsgTUZFIHN0YW5kYWxvbmUnZGFcclxuLy8gKGJyaWRnZS5ob3N0Tmdab25lIG51bGwpIGJ1IHBhdGggemF0ZW4gYm9vdCBvbG11eW9yLCBnw7x2ZW5saSBmYWxsYmFjay5cclxuZXhwb3J0IGNvbnN0IHByb3ZpZGVIb3N0ID0gKGFwcDogQXBwcyk6IEFycmF5PFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnM+ID0+XHJcblx0YnJpZGdlLmhvc3ROZ1pvbmUgPyBbcHJvdmlkZUhvc3RLZXljbG9hayhhcHApXSA6IFtdO1xyXG4iXX0=
6
+ export const provideHost = (app) => bridge.hostNgZone ? [provideHostKeycloak(app), provideHostPermissions(app)] : [];
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZGl2ZUhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3Byb3ZpZGVyL3NyYy9wcm9kaXZlSG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEUsc0VBQXNFO0FBQ3RFLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFTLEVBQTBDLEVBQUUsQ0FDaEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBBcHBzIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuXHJcbmltcG9ydCB7IHByb3ZpZGVIb3N0S2V5Y2xvYWsgfSBmcm9tICcuL3Byb3ZpZGVIb3N0S2V5Y2xvYWsnO1xyXG5pbXBvcnQgeyBwcm92aWRlSG9zdFBlcm1pc3Npb25zIH0gZnJvbSAnLi9wcm92aWRlSG9zdFBlcm1pc3Npb25zJztcclxuXHJcbi8vIEhvc3QgYWx0xLFuZGEgw6dhxJ9yxLFsZMSxxJ/EsW5kYSBzaGFyZWQga2V5Y2xvYWsgZWtsZXI7IE1GRSBzdGFuZGFsb25lJ2RhXHJcbi8vIChicmlkZ2UuaG9zdE5nWm9uZSBudWxsKSBidSBwYXRoIHphdGVuIGJvb3Qgb2xtdXlvciwgZ8O8dmVubGkgZmFsbGJhY2suXHJcbmV4cG9ydCBjb25zdCBwcm92aWRlSG9zdCA9IChhcHA6IEFwcHMpOiBBcnJheTxQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzPiA9PlxyXG5cdGJyaWRnZS5ob3N0Tmdab25lID8gW3Byb3ZpZGVIb3N0S2V5Y2xvYWsoYXBwKSwgcHJvdmlkZUhvc3RQZXJtaXNzaW9ucyhhcHApXSA6IFtdO1xyXG4iXX0=
@@ -0,0 +1,43 @@
1
+ import { APP_INITIALIZER } from '@angular/core';
2
+ import { PermissionService } from 'aril/permission';
3
+ // Mirrors provideHostKeycloak's host-bootstrap/login/network budget, but on timeout we resolve
4
+ // (never reject) — an un-hydrated PermissionService just stays ready()=false, so permission checks
5
+ // fail-closed instead of blocking app bootstrap.
6
+ const HOST_PERMISSIONS_INIT_TIMEOUT_MS = 30000;
7
+ export const provideHostPermissions = (app) => {
8
+ return [
9
+ PermissionService,
10
+ {
11
+ provide: APP_INITIALIZER,
12
+ useFactory: (permissionService) => hostPermissionsInitializer(permissionService, app),
13
+ deps: [PermissionService],
14
+ multi: true
15
+ }
16
+ ];
17
+ };
18
+ export const hostPermissionsInitializer = (permissionService, app) => () => new Promise((resolve) => {
19
+ let timeoutHandle;
20
+ hostPermissionListener(app, permissionService);
21
+ const resolveOnInit = () => {
22
+ removeEventListener(`${app}:init-permissions`, resolveOnInit);
23
+ clearTimeout(timeoutHandle);
24
+ resolve();
25
+ };
26
+ timeoutHandle = setTimeout(() => {
27
+ removeEventListener(`${app}:init-permissions`, resolveOnInit);
28
+ resolve();
29
+ }, HOST_PERMISSIONS_INIT_TIMEOUT_MS);
30
+ addEventListener(`${app}:init-permissions`, resolveOnInit);
31
+ });
32
+ // Pure listener wiring: hydrates PermissionService on both init and update. Used by
33
+ // hostPermissionsInitializer above; the update listener is never removed, so it keeps hydrating
34
+ // across token refreshes even after the APP_INITIALIZER promise above has resolved.
35
+ export function hostPermissionListener(app, permissionService) {
36
+ addEventListener(`${app}:init-permissions`, (event) => {
37
+ permissionService.hydrate(event.detail);
38
+ });
39
+ addEventListener(`${app}:update-permissions`, (event) => {
40
+ permissionService.hydrate(event.detail);
41
+ });
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZUhvc3RQZXJtaXNzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvcHJvdmlkZXIvc3JjL3Byb3ZpZGVIb3N0UGVybWlzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUcxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCwrRkFBK0Y7QUFDL0YsbUdBQW1HO0FBQ25HLGlEQUFpRDtBQUNqRCxNQUFNLGdDQUFnQyxHQUFHLEtBQU0sQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEdBQVMsRUFBWSxFQUFFO0lBQzdELE9BQU87UUFDTixpQkFBaUI7UUFDakI7WUFDQyxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxpQkFBb0MsRUFBRSxFQUFFLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO1lBQ3hHLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ3pCLEtBQUssRUFBRSxJQUFJO1NBQ1g7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxpQkFBb0MsRUFBRSxHQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUNuRyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQzdCLElBQUksYUFBNEMsQ0FBQztJQUVqRCxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUUvQyxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7UUFDMUIsbUJBQW1CLENBQUMsR0FBRyxHQUFHLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlELFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QixPQUFPLEVBQUUsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQy9CLG1CQUFtQixDQUFDLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM5RCxPQUFPLEVBQUUsQ0FBQztJQUNYLENBQUMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBRXJDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUMsQ0FBQztBQUVKLG9GQUFvRjtBQUNwRixnR0FBZ0c7QUFDaEcsb0ZBQW9GO0FBQ3BGLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxHQUFXLEVBQUUsaUJBQW9DO0lBQ3ZGLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3JELGlCQUFpQixDQUFDLE9BQU8sQ0FBRSxLQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkQsaUJBQWlCLENBQUMsT0FBTyxDQUFFLEtBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQXBwcyB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBwcyc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnYXJpbC9wZXJtaXNzaW9uJztcclxuXHJcbi8vIE1pcnJvcnMgcHJvdmlkZUhvc3RLZXljbG9haydzIGhvc3QtYm9vdHN0cmFwL2xvZ2luL25ldHdvcmsgYnVkZ2V0LCBidXQgb24gdGltZW91dCB3ZSByZXNvbHZlXHJcbi8vIChuZXZlciByZWplY3QpIOKAlCBhbiB1bi1oeWRyYXRlZCBQZXJtaXNzaW9uU2VydmljZSBqdXN0IHN0YXlzIHJlYWR5KCk9ZmFsc2UsIHNvIHBlcm1pc3Npb24gY2hlY2tzXHJcbi8vIGZhaWwtY2xvc2VkIGluc3RlYWQgb2YgYmxvY2tpbmcgYXBwIGJvb3RzdHJhcC5cclxuY29uc3QgSE9TVF9QRVJNSVNTSU9OU19JTklUX1RJTUVPVVRfTVMgPSAzMF8wMDA7XHJcblxyXG5leHBvcnQgY29uc3QgcHJvdmlkZUhvc3RQZXJtaXNzaW9ucyA9IChhcHA6IEFwcHMpOiBQcm92aWRlciA9PiB7XHJcblx0cmV0dXJuIFtcclxuXHRcdFBlcm1pc3Npb25TZXJ2aWNlLFxyXG5cdFx0e1xyXG5cdFx0XHRwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXHJcblx0XHRcdHVzZUZhY3Rvcnk6IChwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UpID0+IGhvc3RQZXJtaXNzaW9uc0luaXRpYWxpemVyKHBlcm1pc3Npb25TZXJ2aWNlLCBhcHApLFxyXG5cdFx0XHRkZXBzOiBbUGVybWlzc2lvblNlcnZpY2VdLFxyXG5cdFx0XHRtdWx0aTogdHJ1ZVxyXG5cdFx0fVxyXG5cdF07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaG9zdFBlcm1pc3Npb25zSW5pdGlhbGl6ZXIgPSAocGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLCBhcHA6IEFwcHMpID0+ICgpID0+XHJcblx0bmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuXHRcdGxldCB0aW1lb3V0SGFuZGxlOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcclxuXHJcblx0XHRob3N0UGVybWlzc2lvbkxpc3RlbmVyKGFwcCwgcGVybWlzc2lvblNlcnZpY2UpO1xyXG5cclxuXHRcdGNvbnN0IHJlc29sdmVPbkluaXQgPSAoKSA9PiB7XHJcblx0XHRcdHJlbW92ZUV2ZW50TGlzdGVuZXIoYCR7YXBwfTppbml0LXBlcm1pc3Npb25zYCwgcmVzb2x2ZU9uSW5pdCk7XHJcblx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcclxuXHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0fTtcclxuXHJcblx0XHR0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHJlbW92ZUV2ZW50TGlzdGVuZXIoYCR7YXBwfTppbml0LXBlcm1pc3Npb25zYCwgcmVzb2x2ZU9uSW5pdCk7XHJcblx0XHRcdHJlc29sdmUoKTtcclxuXHRcdH0sIEhPU1RfUEVSTUlTU0lPTlNfSU5JVF9USU1FT1VUX01TKTtcclxuXHJcblx0XHRhZGRFdmVudExpc3RlbmVyKGAke2FwcH06aW5pdC1wZXJtaXNzaW9uc2AsIHJlc29sdmVPbkluaXQpO1xyXG5cdH0pO1xyXG5cclxuLy8gUHVyZSBsaXN0ZW5lciB3aXJpbmc6IGh5ZHJhdGVzIFBlcm1pc3Npb25TZXJ2aWNlIG9uIGJvdGggaW5pdCBhbmQgdXBkYXRlLiBVc2VkIGJ5XHJcbi8vIGhvc3RQZXJtaXNzaW9uc0luaXRpYWxpemVyIGFib3ZlOyB0aGUgdXBkYXRlIGxpc3RlbmVyIGlzIG5ldmVyIHJlbW92ZWQsIHNvIGl0IGtlZXBzIGh5ZHJhdGluZ1xyXG4vLyBhY3Jvc3MgdG9rZW4gcmVmcmVzaGVzIGV2ZW4gYWZ0ZXIgdGhlIEFQUF9JTklUSUFMSVpFUiBwcm9taXNlIGFib3ZlIGhhcyByZXNvbHZlZC5cclxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RQZXJtaXNzaW9uTGlzdGVuZXIoYXBwOiBzdHJpbmcsIHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSk6IHZvaWQge1xyXG5cdGFkZEV2ZW50TGlzdGVuZXIoYCR7YXBwfTppbml0LXBlcm1pc3Npb25zYCwgKGV2ZW50KSA9PiB7XHJcblx0XHRwZXJtaXNzaW9uU2VydmljZS5oeWRyYXRlKChldmVudCBhcyBDdXN0b21FdmVudDxzdHJpbmdbXT4pLmRldGFpbCk7XHJcblx0fSk7XHJcblx0YWRkRXZlbnRMaXN0ZW5lcihgJHthcHB9OnVwZGF0ZS1wZXJtaXNzaW9uc2AsIChldmVudCkgPT4ge1xyXG5cdFx0cGVybWlzc2lvblNlcnZpY2UuaHlkcmF0ZSgoZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8c3RyaW5nW10+KS5kZXRhaWwpO1xyXG5cdH0pO1xyXG59XHJcbiJdfQ==